Різниця між <xsd: all> та <xsd: sequence> у визначенні схеми?


81

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

Але якщо я використовую, xsd:sequenceя можу отримати точно пропущений елемент.

Чи є якась різниця між цими двома?

xsd:sequence: Елемент XML повинен бути в тому ж порядку.

Але xsd:all: XML-елемент може мати будь-який порядок.


По суті, різниця між цими двома - це те, що ви вже вказали у своєму запитанні. Однак обмеження, пов'язані з використанням цих двох композиторів, і наслідки, що виникають при розробці XSD, залежать від того, до якої специфікації ви маєте на увазі: XSD 1.0 або XSD 1.1?
Петру Гардея,

3
Схоже, ваше запитання полягає в тому, чому послідовність і всі помилки запису по-різному, коли вони знаходять відсутні елемент. Думаю, мова йде про логіку синтаксичного аналізу
Насір

Чи вже є відповідь на це питання? Я також хотів би знати, чи завжди мені потрібно використовувати <послідовність>, щоб отримати точний пропущений об'єкт.
GertV

1
Ви отримуєте незадовільні відповіді, оскільки ваш заголовок вводить в оману: відповіді правильно відповідають на питання в заголовку щодо значення "все" проти "послідовності". З ваших коментарів здається, що ваша справжня проблема полягає в різниці в тому, як ваш валідатор повідомляє про помилки перевірки для двох. Це не одне і те ж, і в будь-якому випадку неможливо відповісти, не знаючи, який валідатор ви використовуєте.
Йоахім Лоус

Відповіді:


134

<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: послідовність

Сподіваюся, я відповів на ваше запитання.


Привіт Джоші. element3, EXPECTED, але я дав minOccurs = 0 для element2 та element3
user1679378

2
Ви можете вказати атрибут "minOccurs" елемента "all" як нуль. Детальніше див. На w3schools.com/schema/el_all.asp
Мадхусудан Джоші

22

Різниця:

  • xsd: all - "дочірні елементи можуть з'являтися в будь-якому порядку, і кожен дочірній елемент може відбуватися нулем або одноразово" (тобто maxOccurs може бути 0 або 1)
  • xsd: послідовність - "дочірні елементи повинні з'являтися в послідовності. Кожен дочірній елемент може зустрічатися від 0 до будь-якої кількості разів" (тобто maxOccurs може бути 0 або будь-яким числом або "необмеженим")

З підручників W3Schools тут і тут .


4
Ви повинні кваліфікувати обмеження щодо потужності частинки як специфічні для XSD 1.0 - інакше це неправильно для XSD 1.1.
Петру Гардея,

8
w3schools не пов'язаний з W3C, тому їх веб-сторінки не є документами W3C.
Ben Companjen

@kamituel Чи можете ви цитувати, де <xs:all>обмежується кількість випадків, коли може відбутися дочірній елемент? Я не можу знайти підтвердження цього в специфікації W3C.
Люк Пуплетт

2
@kamituel Власне, це стосується самого елемента всередині його контейнера у схемі. Документ, який ви цитуєте, - це 1.1, який не має обмежень. У будь-якому випадку, я знайшов контрант, написаний на "людській англійській мові", так само, як ви вставили у своїй відповіді кілька рядків вище в документі 1.0.
Люк Пуплетт

1
"дочірній елемент може відбуватися нуль або один раз" насправді неправильно! Значення за замовчуванням - 1 для minOccurs, тобто воно ПОВИННО бути присутнім, і це стосується як усіх, так і послідовності.
PKCS12

2

Індикатор усіх

У <all>індикатор вказує , що дочірні елементи можуть з'являтися в будь-якому порядку, і що кожен дочірній елемент повинен відбуватися тільки один раз:

Індикатор послідовності

У <sequence>індикатор вказує , що дочірні елементи повинні з'являтися в певному порядку:

посилальне посилання


2
Ви повинні кваліфікувати обмеження щодо потужності частинки як специфічні для XSD 1.0 - інакше це неправильно для XSD 1.1.
Петру Гардея,

2

Схема просто визначає, що являє собою відповідний документ.

Спосіб повідомлення про невідповідність повністю залежить від валідатора. Ніщо не заважає валідатору повідомити, які саме поля відсутні, але, мабуть, те, яке ви використовуєте, у цьому випадку цього не робить.

Чи це помилка, чи за задумом, вам доведеться обговорити з постачальником валідатора.


Як це відповідає на запитання?
Себастьян Хофманн,

2
Здається, це питання задає різницю між послідовністю та всіма, але більш ретельне прочитання виявляє, що автор це вже знає, але спантеличений результатами його валідатора. Це як.
Йоахім Лоус,

2

ПРОСТИЙ ПРИКЛАД XML:

<school>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</school>

XSD ЗВЕРХ XML (Пояснення):

<xs:element name="school">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Тут:

xs: element : Визначає елемент.

xs: all : Позначає дочірні елементи, які можуть відображатися в будь-якому порядку.

xs: послідовність : Позначає дочірні елементи, що відображаються лише в зазначеному порядку.

xs: complexType : Позначає, що він містить інші елементи.

xs: simpleType : Позначає, що вони не містять інших елементів.

тип: рядок, десяткове, ціле число, логічне значення, дата, час,

  • Простими словами , xsd - це ще один спосіб представити та перевірити дані XML із певним типом.
  • За допомогою додаткових атрибутів ми можемо виконувати кілька операцій.

  • Виконання будь-якого завдання на xsd простіше, ніж xml.


0

коли ми використовуємо під тегом, це вказує на те, що всі елементи, які оголошені в цьому комплексі, повинні ПОВИННІ відображатися в однаковому порядку в документі XML. в іншому випадку ви отримаєте помилку. адже немає необхідності вказувати елементи у належному порядку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.