Подтвердить что ты не робот

Выбор xsd для нескольких элементов

Я хочу, чтобы мой Xml файл выглядел следующим образом

<root>
<name>a</name>
<age>23</age>
</root>

 or 

<root>
<empno>b<empno>
<designation>ase</designation>
</root>

Можно ли создать схему XML для вышеописанного с помощью индикатора "выбора", как показано ниже.

    <xsd:element name="root">
    <xsd:complexType>
    <xsd:choice>

    <xsd:element name="name"/>
    <xsd:element name="age" />

     or

    <xsd:element name="empno"/>
    <xsd:element name="designation" />

    <xsd:choice>

    </xsd:complexType>
    <xsd:element>

Возможно ли это сделать?

4b9b3361

Ответ 1

Да, вы почти там.. просто отсутствует sequence.. Так как это набор полей, вы должны обернуть их под последовательность.

Эти теги последовательности будут находиться под тегом <Choice>. Теперь любой из этих наборов меток (Sequence) будет проверен.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root" type="root"/>
  <xs:complexType name="root">
    <xs:choice>
      <xs:sequence>
        <xs:element name="empno" type="xs:string" />
        <xs:element name="designation" type="xs:string" />
      </xs:sequence>
      <xs:sequence>
        <xs:element name="name" type="xs:string" />
        <xs:element name="age" type="xs:unsignedByte" />
      </xs:sequence>
    </xs:choice>
  </xs:complexType>
</xs:schema>

----------------------------------------------- ------------------------------------------

Я хотел бы добавить еще одно предложение здесь:

Я заметил, что вы используете вложенные объявления.. например:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="trunk">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="branch1" type="xs:string"/>
              <xs:element name="branch2" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="other" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Всегда предпочитайте использование пользовательских типов! Вот так:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root" type="root"/>

  <xs:complexType name="root">
    <xs:sequence>
      <xs:element name="trunk" type="trunk"/>
      <xs:element name="other" type="xs:string" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="trunk">
    <xs:sequence>
      <xs:element name="branch1" type="xs:string"/>
      <xs:element name="branch2" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Это улучшает читаемость, и вы можете повторно использовать complexType/simpleType..

надеюсь, что это поможет.