5

スキーマが与えられた場合 (匿名化され、関心のある重要なポイントの名前が変更され、残りは省略されます):

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="inspec"
    targetNamespace="the_right_namespace"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:element name="inspec">
    <xs:complexType>
      <xs:all>
        <xs:element name="a_scalar_property" type="xs:int"/>
        <xs:element name="a_collection_property">
          <xs:complexType>
            <snip>
          </xs:complexType>
        </xs:element>
        <xs:element name="another_collection_property">
          <xs:complexType>                
            <snip>
          </xs:complexType>
        </xs:element>                       
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>

およびインスタンス (VB xml リテラルを使用して宣言):

Dim xDocument = 
<x:inspec xmlns:x='the_right_namespace'>
<a_collection_property/>
<another_collection_property/>
</x:inspec>

検証はメッセージで失敗しますThe element 'inspec' in namespace 'the_right_namespace' has incomplete content. List of possible elements expected: 'a_scalar_property'.

なんで?allW3Schools によると、要素:

「all 要素は、子要素が任意の順序で表示され、各子要素が 0 回または 1 回発生することを指定します。」

省略a_scalar_propertyすることは、ゼロ回含めることと同じです。この文書が検証に失敗するのはなぜですか?

また、「完全なコードを投稿してください」などとは言わないでください。これは私の IP ではなく、正当な理由で匿名化しています。他にはほとんど何もありません。この最小限の例でテストしましたが、同じ結果が得られました。

4

2 に答える 2

6

minOccurs="0"のすべてのオプション要素に対してを指定する必要がありますxs:all

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="inspec"
    targetNamespace="the_right_namespace"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
    <xs:element name="inspec">
        <xs:complexType>
            <xs:all>
                <xs:element name="a_scalar_property" type="xs:int" minOccurs="0" />
                <xs:element name="a_collection_property" minOccurs="0">
                    <xs:complexType>
                        <!-- snip -->
                    </xs:complexType>
                </xs:element>
                <xs:element name="another_collection_property" minOccurs="0">
                    <xs:complexType>
                        <!-- snip -->
                    </xs:complexType>
                </xs:element>
            </xs:all>
        </xs:complexType>
    </xs:element>
</xs:schema>
于 2012-07-01T10:50:07.123 に答える
2

要素をオプションにするには、<all> グループであっても minOccurrs 属性を 0 にする必要があります。XML スキーマ仕様を読んでそれを理解するのは非常に面倒ですが、w3schools に頼るのは良い代替手段ではありません。

于 2012-07-01T10:48:23.447 に答える