如果我正确理解了您的需求,那么您可以将模型表述为“子菜单或菜单项之一,后跟零个或多个子菜单或菜单项元素”。这可以很容易地表示为两个选择的序列:
<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>
您可以使用菜单和子菜单的共享全局类型更清晰地对此进行建模,但我希望这种方式相对明显。