问题
I am using xsd:all
in a complex type. When I miss any mandatory elements while validating it will show all the elements. It will not display the exact missed element.
But if I am use xsd:sequence
I can get the exact missed element.
Is there any difference between these two?
xsd:sequence
: XML element must be in same order.
But xsd:all
: XML element may be any order.
回答1:
<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.
回答2:
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.
回答3:
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
回答4:
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.
回答5:
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.
来源:https://stackoverflow.com/questions/16101488/difference-between-xsdall-and-xsdsequence-in-schema-definition