xsd:all
を複合型で使用しています。検証中に必須の要素を見逃すと、すべての要素が表示されます。欠落した正確な要素は表示されません。
しかし、xsd:sequence
を使用している場合、正確に欠落した要素を取得できます。
これら2つの間に違いはありますか?
xsd:sequence
:XML要素は同じ順序でなければなりません。
ただし、xsd:all
:XML要素は任意の順序です。
<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>
このxsdからXMLを作成すると、次のようになります。
<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>
このxsdからXMLファイルを作成すると、次のようになります。
<compElement>
<ele2>Second</ele2>
<ele1>First</ele1>
<ele4>Fourth</ele4>
<ele3>Third</ele3>
</compElement>
詳細 on xsd:all
詳細 on xsd:sequence
私があなたの質問に答えたことを願っています。
すべてのインジケータ
<all>
インジケータは、子要素を任意の順序で表示できること、および各子要素が1回だけ出現することを指定します。
シーケンスインジケータ
<sequence>
インジケータは、子要素が特定の順序で表示される必要があることを指定します。
スキーマは、準拠ドキュメントを構成するものを定義するだけです。
コンプライアンス違反の報告方法は、完全にバリデーター次第です。どのフィールドが欠落しているのかをバリデーターが正確に報告することを止めるものは何もありませんが、明らかにこの場合、使用するフィールドはそうではありません。
それがバグであるか、設計によるものであるかにかかわらず、バリデーターのプロバイダーと話し合う必要があります。
underタグを使用する場合、complexTypeで宣言されているすべての要素がXMLドキュメントで同じ順序で出現する必要があることを示します。そうしないと、エラーが発生します。要素を適切な順序で指定する必要がないためです。