2010-05-18 274 views
1

XSD元素,使XSD與同名元素,只有屬性值例如identifyed: -具有相同名稱

<a> 
    <b n="structure one"> 
    <c n="inner element 1"/> 
    <c n="inner element 2"/> 
    <c n="inner element 3"/> 
    </b> 
    <b n="structure two"> 
    <c n="inner element 1 for structure two"/> 
    <c n="inner element 2 for structure two"/> 
    <c n="inner element 3 for structure two"/> 
    </b> 
</a> 

通知,從XML我不得不提及的是屬於內部元件特定值結構相同

回答

1

不確定您的具體要求是什麼,但下面的模式驗證您的文檔。它說根元素必須命名爲a,它可以包含任意數量的b元素,它們本身包含任意數量的c元素。 bc元素必須包含名稱爲n的屬性。

<xs:schema attributeFormDefault="unqualified" 
      elementFormDefault="qualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="a"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element maxOccurs="unbounded" name="b"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element maxOccurs="unbounded" name="c"> 
       <xs:complexType> 
        <xs:attribute name="n" type="xs:string" use="required" /> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      <xs:attribute name="n" type="xs:string" use="required" /> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

如果要將屬性約束爲特定的一組值,可以使用限制。此架構列舉的bc元素n屬性的可能值:

<xs:schema attributeFormDefault="unqualified" 
      elementFormDefault="qualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="a"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element maxOccurs="unbounded" name="b" type="b"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:complexType name="b"> 
    <xs:sequence> 
     <xs:element maxOccurs="unbounded" name="c"> 
     <xs:complexType> 
      <xs:attribute name="n" use="required"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
       <xs:enumeration value="inner element 1"/> 
       <xs:enumeration value="inner element 2"/> 
       <xs:enumeration value="inner element 3"/> 
       <xs:enumeration value="inner element 1 for structure two"/> 
       <xs:enumeration value="inner element 2 for structure two"/> 
       <xs:enumeration value="inner element 3 for structure two"/> 
       </xs:restriction> 
      </xs:simpleType> 
      </xs:attribute> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 

    <xs:attribute name="n" use="required"> 
     <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="structure one"/> 
      <xs:enumeration value="structure two"/> 
      <xs:enumeration value="structure three"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 
    </xs:complexType> 

</xs:schema> 

你也可以用正則表達式約束屬性的值,如:

<xs:schema attributeFormDefault="unqualified" 
      elementFormDefault="qualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="a"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element maxOccurs="unbounded" name="b" type="b"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:complexType name="b"> 
    <xs:sequence> 
     <xs:element maxOccurs="unbounded" name="c"> 
     <xs:complexType> 
      <xs:attribute name="n" use="required"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
       <xs:pattern value="^inner element [0-9]+.*$"/> 
       </xs:restriction> 
      </xs:simpleType> 
      </xs:attribute> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 

    <xs:attribute name="n" use="required"> 
     <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:pattern value="structure (one|two|three)"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 
    </xs:complexType> 

</xs:schema>