XML-схема объявляет корень

Если у меня есть такая схема:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema  targetNamespace="http://mysticwarlords.kaa/XMLSchema"
            xmlns="http://mysticwarlords.kaa/XMLSchema"
            xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:simpleType name="titletype">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Warlord"/>
            <xs:enumeration value="FirstMate"/>
            <xs:enumeration value="Jester"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:element name="warlord">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="warlordName" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="title" type="titletype" />
        </xs:complexType>
    </xs:element>

    <xs:element name="warband">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="warbandName" type="xs:string" />
            <xs:element name="warlords">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="warlord" minOccurs="1" maxOccurs="unbounded">
                    <xs:unique name="eachTitleOnlyOnce">
                        <xs:selector xpath="warlord"/>
                        <xs:field xpath="@title"/>
                    </xs:unique>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="wargroup">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="wargroupName" type="xs:string" />
            <xs:element name="warlords">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="warlord" minOccurs="1" maxOccurs="10" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="war">
        <xs:complexType>
            <xs:choice>
              <xs:element ref="wargroup"/>
              <xs:element ref="warband"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>

</xs:schema>

Я думаю, это будет проверять XML-файл, который является только элементом?

Что если бы я только хотел позволить быть корневым элементом?

1 ответ

Решение

Ваша схема будет проверять XML-файлы, содержащие корневой элемент warlord или же warband или же wargroup или же war,

Если я правильно понимаю ваш вопрос, вам нужно проверить только те XML-файлы, которые содержат корневой элемент war, Для этого вы должны изменить определения warlord, warband а также wargroup быть названным сложными типами - например:

  <xs:complexType name="warlord"> 
      <xs:sequence> 
          <xs:element name="warlordName" type="xs:string"/> 
      </xs:sequence> 
      <xs:attribute name="title" type="titletype" /> 
  </xs:complexType> 

а затем использовать эти типы вместо ref - например:

<xs:element name="war">   
    <xs:complexType>   
        <xs:choice>   
          <xs:element name="wargroup" type="wargroup"/>   
          <xs:element name="warband" type="warband"/>   
        </xs:choice>   
    </xs:complexType>   
</xs:element>   
Другие вопросы по тегам