2011-06-29 2 views
0

XSDファイルの<element>minOccursプロパティのデフォルトは1 (source)です。

<el1><el2>の2つの要素を含む複合型を指定するXSDがあるとします。
<el2>のみを含むXDocumentを指定すると、XDocumentは検証されません。
XSDを使用して欠落している要素のXMLを確認する方法

The element Message in namespace ___ has invalid child element el2 in namespace ___. 
List of possible elements expected: el1

これは、基本的には、1つの<el1>を含まないため、複雑なタイプのエラーを期待<el2>上のエラーがある:
代わりに、メッセージが表示されます。

私の質問は:
が持っているすべての<element> - タグがminOccurs> 0が存在しているかどうかを確認する方法はありますか?
これは、XSDでXMLを検証する際の非常に基本的なチェックです。

+0

私はそれがうまくいっていると思うが、エラーメッセージは単に誤解を招くだけです。 「これは私が次に見たいと思う要素ではない」と言っている。このメッセージが気に入らない場合は、スキーマではなく、バリデーターに問題があります。 – Nemo

+0

あなたは正しいかもしれませんが、minOccurs = 1で要素が追加されていない場合、最初の要素が見つからない場合にのみエラーが発生します。ユーザへのフィードバックは、一度に欠落している要素を1つ報告することは非効率的である。 @ニモ:他のバリデータを知っていますか? – Peter

答えて

2

スキーマの定義方法によっては、要素の出現順序が重要になります。

この場合、バリデータはそのエラーが<EL2>はどこがいけない表示されているということである<EL1>を期待しているが、要素<EL2>を見ています。私はあなたがあなたの複雑なタイプを定義するときに "シーケンス"を使用したことを意味します。だから、あなたが得るエラーは正しい。

これがまだ厄介で、要素の順序が解析に関係しない場合は、順序を強制しない「順序」ではなく「すべて」を使用します。バリデータは、必要な要素が<el1>でないことを確認する必要があります。次のように表示されます。

<xsd:complexType name="MyType"> 
    <xsd:all> 
    <xsd:element name="el1" minOccurs="1"/> 
    <xsd:element name="el2" minOccurs="1"/> 
    </xsd:all> 
</xsd:complexType> 

これが役立ちます。

+0

あなたが正しいです、それはここでの問題です。残念ながら、XSDは第三者によって提供されており、私たちはそれを変更するのが好きではありません。 – Peter

+0

@peter私はそれに賛成でしたが、少なくともあなたはバリデータが壊れていないことを知っています。 – Rob

関連する問題