質問

私はすべてを試しました <xs:all>, <xs:choice>, and <xs:sequence>

これらのどちらも私のケースを満足のいくものではありません。

誰かがこのようなことをどのように検証しますか?

<Menu>  
   <SubMenu>
      <MenuItem .. />  
      <MenuItem .. />  
      <MenuItem .. />  
   </SubMenu>  
   <MenuItem .. >  
   <MenuItem .. >  
</Menu>

ここで、 <Menu> 鬼ごっこ <SubMenu> および/または <MenuItem> 任意の順序で何度も(0-n)に発生する可能性があります。しかし、少なくともそのうちの1つは少なくとも一度発生する必要があります。

サブメニュータグ内の検証を無視します。

この問題の助けに感謝します。

役に立ちましたか?

解決

私があなたの要件を正しく理解した場合、モデルを「submenuまたはmenuitemの1つに続いてゼロ以上のsubmenuまたはmenuitem要素が続く」と表現できます。これは、2つの選択肢のシーケンスとして非常に簡単に表現できます。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <!-- whatever your element needs to be modelled as here -->
    <xs:element name="MenuItem">
        <xs:complexType>
            <xs:attribute name="text"/>
        </xs:complexType>
    </xs:element>

   <!-- only modelling the structure of the child elements here -->
    <xs:element name="SubMenu">
        <xs:complexType>
            <xs:sequence>
                <xs:choice minOccurs="1" maxOccurs="1">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="Menu">
        <xs:complexType>
            <xs:sequence>
                <xs:choice minOccurs="1" maxOccurs="1">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
                <xs:choice minOccurs="1" maxOccurs="unbounded">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
            </xs:sequence>          
        </xs:complexType>
    </xs:element>
</xs:schema>

メニューとサブメニューの共有グローバルタイプを使用して、これをよりきれいにモデル化できますが、この方法は比較的明白です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top