XSD レベルで、ドキュメント内の別の要素の存在に基づいて要素要件を定義できますか?
たとえば、要素も存在する場合は<firstname />
常に要素を提供する必要<id />
があります。それ以外の場合、名前はオプションです。
これを XSD レベルで強制できない場合、両方の要素をオプションにして、別のレベルのチェックを通じて要件を強制する必要がありますか?
オプション大歓迎。
XSD レベルで、ドキュメント内の別の要素の存在に基づいて要素要件を定義できますか?
たとえば、要素も存在する場合は<firstname />
常に要素を提供する必要<id />
があります。それ以外の場合、名前はオプションです。
これを XSD レベルで強制できない場合、両方の要素をオプションにして、別のレベルのチェックを通じて要件を強制する必要がありますか?
オプション大歓迎。
これを DTD で実行した例を次に示します。(注: テスト インスタンスは、oXygen XML エディター (Xerces を使用) を使用して検証されました。)
DTD (test.dtd)
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT user ((firstname?|(firstname,id)),lastname)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT id (#PCDATA)>
XML インスタンスの例 (有効および無効) を次に示します。
有効
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "test.dtd">
<user>
<firstname/>
<id/>
<lastname/>
</user>
無効
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "test.dtd">
<user>
<id/>
<lastname/>
</user>
有効
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "test.dtd">
<user>
<firstname/>
<lastname/>
</user>
これは、XSD レベルでは強制できません。
両方の要素をオプションにして、アプリケーション アーキテクチャの異なるレベルで要件を適用することは、私にとっては良い選択肢のように思えます。