質問
私はすべてを試しました <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>
メニューとサブメニューの共有グローバルタイプを使用して、これをよりきれいにモデル化できますが、この方法は比較的明白です。
所属していません StackOverflow