Путаница с индикаторами порядка XML-схемы - PullRequest
0 голосов
/ 21 января 2010

Я изучал, как написать XML-схему, и я озадачен индикаторами порядка XSD, такими как xs:sequence, xs:all, xs:choice. Кажется, их всего 3, и они требуются в сложных типах. Но что, если у меня есть XML, как показано ниже:

<row>
    <name>John</name>
    <city>LA</city>
    <country>France</country>
</row>

, в котором 3 элемента внутри <row/> могут появляться в любом порядке, т. Е. Могут появляться до <city> и <name> и т. Д., Например:

<row>
    <country>France</country>
    <city>LA</city>
    <name>John</name>
</row>

Означает ли это, что мне нужно будет указать новый <xs:sequence> для каждой последовательности элементов. Что делать, если у меня есть что-то вроде 20 элементов без определенного порядка. Здесь есть какой-нибудь ярлык? Я что-то упустил?

ОБНОВЛЕНИЕ : Я не могу использовать <xs:all>, потому что я мог бы оставить некоторые элементы. Все они не обязательны.

Ответы [ 3 ]

2 голосов
/ 21 января 2010

<xsl:all> по-прежнему ваш правильный ответ здесь, я верю. Каждый элемент в <xs:all> композиторе может иметь атрибут minOccurs, равный нулю. Результатом является набор элементов, которые могут встречаться в любом порядке, и любой элемент может встречаться ровно ноль или один раз. Например, ниже требуется, чтобы row содержал один элемент name, ноль или один элемент city и ноль или один элемент country в любом порядке.

<xs:element name="row"> 
    <xs:complexType>
        <xs:all> 
            <xs:element ref="name"/> 
            <xs:element ref="city" minOccurs='0'/> 
            <xs:element ref="country" minOccurs="0"/>
        </xs:all>
    </xs:complexType>

Возможно, я неправильно понял ваше требование.

2 голосов
/ 22 января 2010

Нашел ответ на этот вопрос. Вместо использования <xs:all> используйте <xs:choice> с minOccurs="0" и maxOccurs="unbounded". Теперь элементы не только являются необязательными, они также могут появляться в любом порядке.

<xs:element name="row">
 <xs:complexType>
   <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="name" /> 
     <xs:element name="city" /> 
     <xs:element name="country" />
   </xs:choice>
 </xs:complexType>
</xs:element>
1 голос
/ 21 января 2010

<xs:all> разрешает предметы в любом порядке. Просто используйте его вместо <xs:sequence>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...