2013-04-19 1 views
47

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

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

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

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

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

+0

По существу, разница между этими двумя - это то, что вы уже указали в своем вопросе. Тем не менее, ограничения, связанные с использованием этих двух компоновщиков и последствиями в создании XSD, зависят от того, какую спецификацию вы имеете в виду: XSD 1.0 или XSD 1.1? –

+1

Похоже, ур вопрос о том, почему последовательность и все писать ошибки по-разному, когда он находит отсутствующий элемент. Я думаю, что речь идет о логике парсера – Nasir

+0

Есть ли ответ на этот вопрос? Я также хотел бы знать, всегда ли я должен использовать , чтобы получить точный пропущенный объект. – GertV

ответ

86

< 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> 

More info на XSD: все More Info на XSD: последовательность

Надежда я ответил на ваш quetion.

+0

Привет Joshi .. Спасибо за комментарии к ur.But мой вопрос в том, когда я проверяю xml против xsd при использовании xsd: все это не покажет точный пропущенный элемент. Например, элемент1 ожидается .. Вместо этого он покажет все элементы element1, element2 , element3, EXPECTED, но я дал minOccurs = 0 для element2 и element3 – user1679378

+1

Вы можете указать атрибут «minOccurs» элемента «all» как ноль. Для получения дополнительной информации см. Http://www.w3schools.com/schema/el_all.asp – Joshi

16

Разница:

  • XSD: все - «дочерние элементы могут появляться в любом порядке, и каждый дочерний элемент может произойти ноль или один раз» (то есть, MaxOccurs может быть 0 или 1)
  • XSD: последовательность - «дочерние элементы должны появляться в последовательности Каждый дочерний элемент может происходить от 0 до любого числа раз.» (то есть, MaxOccurs может быть 0 или любое число или «неограниченная»)

от учебники W3Schools here и here.

+3

Вы должны квалифицировать ограничения на мощность частицы как относящиеся к XSD 1.0 - в противном случае это неверно для XSD 1.1. –

+6

w3schools не является аффилированным лицом с W3C, поэтому их веб-страницы не являются документами W3C. –

+0

@kamituel Можете ли вы указать, где '' ограничивает количество раз, когда может возникнуть дочерний элемент? Я не могу найти доказательства этого в спецификации W3C. –

2

Все Индикатор

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

Sequence Indicator

<sequence> Показатель АТОР указывает, что дочерние элементы должны появляться в определенном порядке:

reference link

+2

Вы должны определить ограничения на мощность частицы как специфичные для XSD 1.0 - в противном случае это неверно для XSD 1.1. –

0

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

0

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

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

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