Разница между и в определении схемы?


Я использую xsd:all в комплексе типа. Когда я пропущу какие-либо обязательные элементы при проверке, он покажет все элементы. Он не будет отображать точный пропущенный элемент.

но если я использую xsd:sequence Я могу получить точный пропущенный элемент.

есть ли разница между этими двумя?

xsd:sequence: XML-элемент должен быть в том же порядке.

но xsd:all: XML элемент может быть в любом порядке.

5   51   2013-04-19 13:30:07

5 ответов:

<xsd:all> указывает, что дочерние элементы могут появляться в любом порядке.

<xsd:sequence> указывает, что дочерние элементы могут отображаться только в указанном порядке.

пример последовательности:

<xs:element name="compElement">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="ele1" type="xs:string"/>
      <xs:element name="ele2" type="xs:string"/>
      <xs:element name="ele3" type="xs:string"/>
      <xs:element name="ele4" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

если вы создадите XML из этого xsd, то он будет выглядеть примерно так:

<compElement>
  <ele1>First</ele1>
  <ele2>Second</ele2>
  <ele3>Third</ele3>
  <ele4>Fourth</ele4>
</compElement>

пример для всех:

<xs:element name="compElement">
  <xs:complexType>
    <xs:all>
      <xs:element name="ele1" type="xs:string"/>
      <xs:element name="ele2" type="xs:string"/>
      <xs:element name="ele3" type="xs:string"/>
      <xs:element name="ele4" type="xs:string"/>
    </xs:all>
  </xs:complexType>
</xs:element>

если вы создадите XML-файл из этого xsd, то он может выглядеть примерно так это:

<compElement>
  <ele2>Second</ele2>
  <ele1>First</ele1>
  <ele4>Fourth</ele4>
  <ele3>Third</ele3>
</compElement>

Подробнее на xsd: все
Подробнее на xsd: последовательность

надеюсь, я ответил на ваш вопрос.

отличия:

  • имя xsd:все - "дочерние элементы могут появляться в любом порядке и каждый дочерний элемент может произойти ноль или один раз" (т. е. атрибута maxOccurs может быть 0 или 1)
  • имя xsd:последовательность - "дочерние элементы должны появляться в последовательности. Каждый дочерний элемент может возникать от 0 до любого количества раз" (т. е. maxOccurs может быть 0 или любое число или "неограниченный")

из учебников W3Schools здесь и здесь.

Индикатор

The <all> индикатор указывает, что дочерние элементы могут появляться в любом порядке, и что каждый дочерний элемент должен встречаться только один раз:

Индикатор Последовательности

The <sequence> индикатор указывает, что дочерние элементы должны располагаться в определенном порядке:

ссылка

схема просто определяет, что представляет собой совместимый документ.

Как сообщается о несоответствии полностью зависит от валидатора. Ничто не мешает валидатору сообщать, какие именно поля отсутствуют, но, по-видимому, тот, который вы используете, в этом случае не работает.

является ли это ошибкой или по дизайну вам придется обсудить с поставщиком валидатора.

когда мы используем под тегом, он указывает, что все элементы, объявленные в этом complexType, должны отображаться в том же порядке в XML-документе. в противном случае вы получите сообщение об ошибке. для Нет необходимости указывать элементы в правильном порядке.