2011-09-16 15 views
2

1つのXSDを使用して、以下の2つのxml構造を定義します。XSD要素で、祖父母ノードの属性値に応じてmaxOccursを設定できますか?

<grandparent action="SUBMIT"> 
    <parent> 
     <child value="blah"/> 
    </parent> 
<grandparent> 

<grandparent action="CANCEL"> 
    <parent> 
    </parent> 
<grandparent> 

私は強制するルール:

  • アクションが "SUBMIT" と等しい場合は、<child>のためのmaxOccursは、アクションが "CANCEL" と等しい場合は、<child>のためのmaxOccursは、0(すなわちあるべき
  • 無制限でなければなりません表示されません)

XSDでこれらのルールを適用することはできますか?

+0

いいえ、そうではありません............................. –

+0

@ Deniel - Edが上で明確に説明したように、XSDでこのような条件付きの処理を行うことはできません。 –

+0

@Hugh - 私は便利な細部について考えるのに苦労しましたが、何も考えられませんでした。私はあなたができることに入ることができましたが、手元の問題でOPを助けることはできませんでした。彼はXSDの使い方を知っているように感じました。ただ、この要件に役立つ機能をいくつか見逃してしまったのではないかと期待していました。 –

答えて

2

XSD 1.0ではこの種の処理を行うことはできませんが、XSD 1.1(SaxonとXercesの最新リリースでは現在実装されています)で行うことができます。二つの可能なアプローチがある:

(a)の条件タイプ割当:祖父母のための2つの異なるタイプがあり、属性値にベースに対して

(b)は、アサーションを検証するかを選択:で無制限のmaxOccursを残し文法を追加し、行に沿って祖父母にアサーションを追加するtest="if (@ACTION='cancel') then empty(*/child) else true()"

関連する問題