2011-06-30 6 views
0

XML Schema 1.1の使用では、属性グループ内のすべての属性が存在する場合と存在しない場合の属性グループを定義したいと考えています。次の例では、<anelement>に両方の属性(attr_oneattr_two)が存在するか、どちらの属性も存在しないようにしたいと思います。XMLスキーマ1.1属性のグループ化の制約

<attributeGroup name="attrgroup"> 
    <attribute name="attr_one" /> 
    <attribute name="attr_one" /> 
</attributeGroup> 

<element name="anelement"> 
    <complexType> 
    <attributeGroup ref="attrgroup" /> 
    </complexType> 
</element> 

私が理解しているように、XML Schema 1.0では、これらの属性の関係を指定することはできません(正しい?)。 XSD 1.1でそれらを指定する最良の方法は何ですか?私は関係を指定するassertを使用できることを理解、次のようなもの:

<element name="anelement"> 
    <complexType> 
    <attributeGroup ref="attrgroup" /> 
    <assert test="(@attr_one and @attr_two) or not(@attr_one or @attr_two)" /> 
    </complexType> 
</element> 

しかし、私は例えば、私は既存の言語を使用して関係を指定することができるようになる1.1に追加され、何かがあった期待していました属性はattributeGroupです。 XMLスキーマ1.1でこの関係を指定する最良の方法は何ですか?

+0

クールを行うことができ、私はそのように主張するために提供されるXMLスキーマ1.1を知りませんでした。 – LarsH

+0

XML Schema 1.1のどの実装を使用していますか?サクソン? – LarsH

+0

うん、1.1。完全なXPathアサーションを持っています。 Xerces-Jは1.1のすべての部分をサポートしていますので、現時点で検証に使用しています。うまくいけば、他のツール(特にOXM)がすぐに追いつくことを望みます。 – Bob

答えて

1

これを行う方法はアサーションです。単純製剤は

test="exists(@attr_one) = exists(@attr_two)" 

であるか、あなたは

test="count(@attr_one|@attr_two) != 1" 
+0

ありがとう、私が思ったことについてthats。もっと複雑になることなくN個の属性にあなたのより単純な公式を外挿する方法はありますか? – Bob

関連する問題