2013-04-19 5 views
47

私はxsd:allを複合型で使用しています。検証中に必須要素が見つからない場合は、すべての要素が表示されます。正確に逃した要素は表示されません。<xsd:all>とスキーマ定義の<xsd:sequence>の違いはありますか?

もし私がxsd:sequenceを使用していれば、正確に逃した要素を得ることができます。

これらの違いはありますか?

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

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

+0

基本的に、これらの2つの違いは、あなたの質問に既に示したことです。しかし、これら2つのコンポジタの使用に関連する制約と、XSDオーサリングにおけるそれらの影響は、XSD 1.0またはXSD 1.1のどちらの仕様に依存していますか? –

+1

URの質問のように見えるのは、配列が見つからず、要素が見つからなかった場合、すべての書き込みエラーが異なる方法です。私はそれがパーサーロジックについてだと思う。 – Nasir

+0

この質問には既に回答がありますか? 正確に逃したオブジェクトを取得するために常にを使用する必要があるかどうかも知りたいと思います。 – GertV

答えて

86

< xsd:all>子要素がどのような順序で表示されることを指定します。インフレータは、子要素は特定の順序で表示されなければならないことを指定します。

< xsd:sequence>は、指定された順序でのみ子要素を指定できます。シーケンスのための

例:

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

もし

<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を作成した場合、それはこのようなものでしょうこのxsdからXMLファイルを作成すると、次のようになります。

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

More info:すべてのxsdに More Info:私はあなたのquetionに答えシーケンス

希望。

+0

こんにちはJoshi ..私は質問xs.dを使用してxsdに対してxmlを検証するときに私の質問です:正確に逃した要素を表示しません。たとえば、element1が必要です..代わりに、すべての要素element1、element2が表示されます、element3、EXPECTEDですが、element2とelement3に対してminOccurs = 0を指定しました。 – user1679378

+1

"all"要素の "minOccurs"属性をゼロとして指定できます。詳細については、http://www.w3schools.com/schema/el_all.aspを参照してください。 – Joshi

16

差:

  • のxsd:すべて - "子要素は任意の順序で現れることができ、それぞれの子要素が0回または1回発生する可能性"(すなわち、maxOccurs属性が0であってもよく、または1)
  • のxsd:シーケンス - 「子要素を順に表示する必要があり、それぞれの子要素が0から何度でもに発生する可能性があります。」(すなわち、maxOccurs属性が0または任意の数または「無制限」であることができます)

からW3Schoolsチュートリアルherehere

+3

パーティクルのカーディナリティの制約は、XSD 1.0に固有のものとして修飾する必要があります。そうしないと、XSD 1.1では正しくありません。 –

+6

w3schoolsはW3Cと提携していないため、WebページはW3Cのドキュメントではありません。 –

+0

@kamituel ''が子要素の発生回数を制限する箇所を引用できますか?私はW3C仕様でこれの証拠を見つけることができません。 –

2

すべてのインジケータ<all>指標は子要素がどのような順序で表示することができていること、およびそれぞれの子要素は一度しか起こらなければならないことを指定し

シーケンスインジケータ

<sequence> indic

reference link

+2

XSD 1.0に固有のものとして、パーティクルのカーディナリティの制約を修飾する必要があります。そうしないと、XSD 1.1では正しくありません。 –

0

タグの下で使用する場合、そのcomplexTypeで宣言されているすべての要素がXMLドキュメント内で同じ順序で表示されなければならないことを示します。そうしないと、エラーが発生します。適切な順序で要素を指定する必要はないからです。

0

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

どのように違反が報告されるかは、バリデーターによって決まります。バリデーターが欠落しているフィールドを正確に報告するのを止めるものは何もありませんが、使用しているフィールドはこの場合は表示されません。

これはバグであるか設計によるものかにかかわらず、バリデータのプロバイダと相談する必要があります。