具有相同名称

问题描述:

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我不得不提及的是属于内部元件特定值结构相同

不确定您的具体要求是什么,但下面的模式验证您的文档。它说根元素必须命名为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>