2012-02-17 2 views
0
<Container> 
    <MyObject> 
     <property1>abcd</property1> 
     <property2> 
      <Version>3.2</Version> 
     </property2> 
    </MyObject> 

    <Contained> 

     <MyObject> 
      <property1>something</property1> 
      <property2> 
       <Version>1.1</Version> 
       <Version>1.2</Version> 
       <Version>1.6</Version> 
      </property2> 
     </MyObject> 

     <MyObject> 
      <property1>something else</property1> 
      <property2> 
       <Version>2.3</Version> 
       <Version>2.5</Version> 
       <Version>2.6</Version> 
      </property2> 
     </MyObject> 

    </Contained> 
</Container> 

、に基づいて「マックスが発生した」私は最大のMyObjectには直接コンテナに含まれている場合、それが発生することなど、Versionプロパティの制限を発生置くことができます正確に1回ですが、MyObjectがContainedに含まれている場合、何度も何度も発生することがありますか?XSDと、コンテキストに対応するXSDファイル内でこのXML構造を考えると

similar questionに基づいて、私はそれが不可能だと思う傾向がありますが、私は確信しています。

答えて

0

あなたのコードからは、論理的には、Container/MyObjectContainer/Contained/MyObjectはその名前にもかかわらず異なるタイプであるようです。

私はこれらのためにXSDで2つの異なるタイプを宣言しました。 1つはContainer/MyObjectmaxOccurs="1"であり、もう1つはContained/MyObjectmaxOccurs="whateverYouWant"である。

1

短い答えはいいえ、XSD 1.0を使って行うことはできません。バージョンアップやSchematronのアサーションを追加することができます。あるいは、純粋なXSD 1.0が唯一の答えであれば、私はリモデリングの方法を見つけようとします。 @ penarturはどこから始めるべきかを知ることができます(代わりに、拡張機能によって再利用して、コンテンツモデルの最後に「違い」をモデル化して、拡張がその魔法を働かせるようにします)。

関連する問題