0

これは非常に単純な質問ですが、私の Google スキルではまだ答えが得られていません。

XSD は、要素がより高いレベルの要素内に存在しなければならないことを強制できますか? 「明示的なnilへの設定」を許可または禁止できることは知っていますが、それは同じようには聞こえません。

例えば:

<parentTag>
    <childTag1>
        ... stuff
    </childTag1>
    <childTag2>   <!-- FAIL VALIDATION IF a childTag2 isn't in parentTag!!! -->
        ... stuff
    </childTag2>
</parentTag>

もしそうなら、構文は何ですか?

4

1 に答える 1

2

XSD の要素は、デフォルトで存在する必要があります。指定しない場合、子要素のminOccursプロパティは 1 に設定されます。

つまり、 を設定して、要素を明示的にオプションminOccurs="0"にする必要があります。

スキーマの例

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="parentTag">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="childTag1" minOccurs="0"/> <!-- This element is optional -->
      <xs:element name="childTag2"/> <!-- This element is required -->
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>

有効な XML のテスト (xmllint を使用)

<?xml version="1.0"?>
<parentTag>
  <childTag1>
        <!-- ... stuff -->
  </childTag1>
  <childTag2>
        <!-- ... stuff -->
  </childTag2>
</parentTag>
testfile.xml が検証します

無効な XML のテスト

<?xml version="1.0"?>
<parentTag>
  <childTag1>
        <!-- ... stuff -->
  </childTag1>
</parentTag>
testfile.xml:2: 要素のparentTag: スキーマの妥当性エラー: 要素 'parentTag': 子要素がありません。期待されるのは ( childTag2 ) です。
testfile.xml が検証に失敗する
于 2012-05-16T19:53:34.150 に答える