2016-11-02 4 views
0

私はこのようなXML文書を持っている:キーとキーリファレンスの制約: "xs:selector"の選択方法?

<a> 
    <b name="OneB"> 
     <c name="OneC"/> 
    </b> 
    <b name="TwoB"> 
     <c name="TwoC"/> 
    </b> 

    <d Bname="OneB" Cname="OneC"/> <!-- Correct --> 
    <d Bname="TwoB" Cname="TwoC"/> <!-- Correct --> 
    <d Bname="OneB" Cname="TwoC"/> <!-- Wrong --> 
    <d Bname="TwoB" Cname="OneC"/> <!-- Wrong --> 
</a> 

私はXS書きたい:キーおよびxsを:だけこのように、「D」の要素にCNAME属性の正しい値を許可することができ、私のXSDファイル内のkeyref :Cname値は、Bname値要素の子である場合にのみ有効な値です(例のように)。 どうすればいいですか? xs:selector xpath式で属性値( "@")を指定できないため、どのように理解できません。 xs:keyとxs:keyrefを書くことは可能でしょうか、それとも私が使うことができる別の解決法がありますか?

答えて

0

XPath式が述語を許可しないため、keyおよびkeyrefでこれを行うことはできません。したがって、属性の実際の値に依存することはできません。

XSD 1.1アサーション(または、Schematronのような別の技術)を使用する必要があります。

<xs:assert test="every $d in d satisfies 
       some $b in b satisfies $d/@Cname = $b/c/@name 
           and $d/@Bname = $b/@name"/> 
+0

ありがとう:XSD 1.1を使用すると、このような<a>要素のアサーションを定義します。これは私を助けた。 –