2011-07-01 10 views
2

要素のオープンまたはクローズによって決定される属性の要件を示すためのスキーマがありますか。例えば、私はopenという属性に 'test'という属性が必要ない要素を持っていますが、それが閉じられていれば必要です。オープン/クローズド要素に基づくXSD制限

<element name="employee" > 
    blah! 
</element> 

[OK]を

<element name="employee" /> 

失敗 - 必須の属性 '試験'。

答えて

2

"open"は、その要素にテキストノードの子があることを意味し、「閉じている」とは意味しません。つまり、要素にはテキストノードの子または属性がありますが、両方ではなく(?)ではないということです。

これは共起制約として分類されており、XSD 1.0では実行できません。 XSD 1.1のアサーションで行うことができます

<xs:element name="employee" type="..."> 
    <xs:assert test="string(.) or @name"/> 
</xs:element> 

XSD 1.1のサポートは現在XercesとSaxonで利用できます。

0

いいえ、それを行う方法はありません。 (私はリファレンスを引用したいが、非機能を参照するのは難しい)

一般に、これはXSDが提供するものを超えたステップです。非常に少数のケース(IDREFのような)では、別のデータムを参照することによって1つのデータムを検証する手段を提供します。 XSD 1.1には、あなたが必要とするかもしれない新しいassertion supportがいくつか用意されていますが、仕様は現時点での作業草案です。

関連する問題