2014-07-27 113 views
1

我定義了一個包含多個複雜元素的xsd,它們在不同的元素下重複類似的結構。 示例:是否可以定義包含屬性組的元素組?

<keys> 
    <add-key> 
    <add key="new key" value="v1"> 
    </add-key> 
    <del-key> 
    <add key="bad key" value="v2"> 
    </del-key> 
</keys> 

定義以下內容的正確方法是什麼?我在使用這段代碼時無法解析模式。

<xs:complexType name="keyType"> 
    <xs:sequence maxOccurs="unbounded"> 
    <xs:element name="add"> 
     <xs:complexType> 
     <xs:attributeGroup ref="keyAttributeGroup"/> 
     </xs:complexType> 
    </xs:element> 
    </xs:sequence> 
</xs:complexType> 

<xs:attributeGroup name="keyAttributeGroup"> 
    <xs:attribute name="key" type="xs:string" use="required"/> 
    <xs:attribute name="value" type="xs:string" use="required"/> 
</xs:attributeGroup> 

回答

2

如果事先所有的名字一個元素類型的知道的KeyType可以有(add-key, del-key),然後一個可能的解決方案是使用一個未命名的選擇

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="keys"> 
     <xs:complexType> 
       <xs:choice maxOccurs="unbounded"> 
        <xs:element name="add-key" type="keyType" /> 
        <xs:element name="del-key" type="keyType" /> 
       </xs:choice> 
     </xs:complexType> 
    </xs:element> 

    <xs:complexType name="keyType"> 
     <xs:sequence maxOccurs="unbounded"> 
      <xs:element name="add"> 
       <xs:complexType> 
        <xs:attributeGroup ref="keyAttributeGroup" /> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:attributeGroup name="keyAttributeGroup"> 
     <xs:attribute name="key" type="xs:string" use="required" /> 
     <xs:attribute name="value" type="xs:string" use="required" /> 
    </xs:attributeGroup> 
</xs:schema> 

如果元素可以有任何隨機名稱(add-key, del-key, whatever),我知道最接近的解決方案是使用xs:any

+0

這絕對是一個有趣的方式來看待它!雖然,我正在尋找一種方法來定義一個元素組,每個元素下將有一個屬性組。我提供的例子是我面臨的一般問題的一個獨特案例。但是,我必須再次說你的答案很棒! – Asaf

相關問題