элемент xsd с тем же именем - PullRequest
1 голос
/ 18 мая 2010

для создания xsd для элемента с такими же именами, которые идентифицируются только по примеру значения атрибута: -

<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 Ответ

1 голос
/ 18 мая 2010

Не уверен, каковы ваши конкретные требования, но следующая схема проверяет ваш документ. Он говорит, что корневой элемент должен иметь имя a и может содержать любое количество элементов b, которые сами содержат любое количество элементов c Элементы b и c должны содержать атрибут с именем 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>

Если вы хотите ограничить атрибуты определенным набором значений, вы можете использовать ограничение. Эта схема перечисляет возможные значения атрибутов n для элементов b и c:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...