模式定义中 < xsd: all > 和 < xsd: order > 之间的区别?

我在复杂类型中使用 xsd:all。如果在验证时遗漏了任何强制性元素,它将显示所有元素。它不会显示完全错过的元素。

但是如果我使用 xsd:sequence,我可以得到精确的错过的元素。

这两者之间有什么区别吗?

XML 元素的顺序必须相同。

但是 xsd:all: XML 元素可以是任意顺序。

116215 次浏览

Difference:

  • xsd:all - "child elements can appear in any order and each child element can occur zero or one time" (ie, maxOccurs can be 0 or 1)
  • xsd:sequence - "child elements must appear in a sequence. Each child element can occur from 0 to any number of times" (ie, maxOccurs can be 0 or any number or 'unbounded')

From the W3Schools tutorials here and here.

All Indicator

The <all> indicator specifies that the child elements can appear in any order, and that each child element must occur only once:

Sequence Indicator

The <sequence> indicator specifies that the child elements must appear in a specific order:

reference link

<xsd:all> specifies that the child elements can appear in any order.

<xsd:sequence> specifies child elements can only appear in the order mentioned.

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

If you create an XML from this xsd then, it will look something like this:

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

Example for all:

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

If you create an XML file from this xsd then it could look something like this:

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

More info on xsd:all
More Info on xsd:sequence

Hope I answered your question.

when we use under tag, it indicates all the elements that are declared in that complexType MUST appear in same order in XML document. otherwise, you will get an error. for there is no need to specify elements in proper order.

The schema merely defines what constitutes a compliant document.

How non-compliance is reported is entirely up to the validator. There is nothing stopping a validator from reporting exactly which fields are missing, but apparently the one you use does not in this case.

Whether that is a bug or by design you would have to discuss with the provider of the validator.

SIMPLE XML EXAMPLE:

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

XSD OF ABOVE XML(Explained):

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

Here:

xs:element : Defines an element.

xs:all : Denotes child elements can appear in any order.

xs:sequence : Denotes child elements only appear in the order mentioned.

xs:complexType : Denotes it contains other elements.

xs:simpleType : Denotes they do not contain other elements.

type: string, decimal, integer, boolean, date, time,

  • In simple words, xsd is another way to represent and validate XML data with the specific type.
  • With the help of extra attributes, we can perform multiple operations.

  • Performing any task on xsd is simpler than xml.