web-dev-qa-db-ja.com

スキーマ定義の<xsd:all>と<xsd:sequence>の違いは?

xsd:allを複合型で使用しています。検証中に必須の要素を見逃すと、すべての要素が表示されます。欠落した正確な要素は表示されません。

しかし、xsd:sequenceを使用している場合、正確に欠落した要素を取得できます。

これら2つの間に違いはありますか?

xsd:sequence:XML要素は同じ順序でなければなりません。

ただし、xsd:all:XML要素は任意の順序です。

67
user1679378

<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

私があなたの質問に答えたことを願っています。

113

差:

  • xsd:all-「子要素は任意の順序で出現でき、各子要素は0回または1回出現できます」(つまり、maxOccursは0または1になります) )
  • xsd:sequence-「子要素はシーケンスに出現する必要があります。各子要素は0から任意の回数発生できます」(つまり、maxOccursは0または任意の数または「無制限」)

W3Schoolsチュートリアル here および here から。

18
kamituel

すべてのインジケータ

<all>インジケータは、子要素を任意の順序で表示できること、および各子要素が1回だけ出現することを指定します。

シーケンスインジケータ

<sequence>インジケータは、子要素が特定の順序で表示される必要があることを指定します。

参照リンク

2
NPKR

スキーマは、準拠ドキュメントを構成するものを定義するだけです。

コンプライアンス違反の報告方法は、完全にバリデーター次第です。どのフィールドが欠落しているのかをバリデーターが正確に報告することを止めるものは何もありませんが、明らかにこの場合、使用するフィールドはそうではありません。

それがバグであるか、設計によるものであるかにかかわらず、バリデーターのプロバイダーと話し合う必要があります。

1
Joachim Lous

underタグを使用する場合、complexTypeで宣言されているすべての要素がXMLドキュメントで同じ順序で出現する必要があることを示します。そうしないと、エラーが発生します。要素を適切な順序で指定する必要がないためです。

0
user3423648