[英]Unique attribute for 2 elements via XML Schema
我有下一个xml结构:
<menubar>
<menu id="id1">
<menuitem id="id2"/>
<menuitem id="id3"/>
<menuitem id="id4"/>
<menu id="id5">
<menuitem id="id1"/> -error because has the same id as the first menu element
...
<menuitem id="id7"/>
</menu>
</menu id="id8">
<menu id="id9">
<menuitem id="id10"/>
<menuitem id="id11"/>
</menu>
...
</menubar>
语言形式:
菜单栏有* 菜单
菜单有* 菜单和* menuitem
问题 :如何为两个元素的空间指定唯一性: menu和menuitem ? 换句话说:所有菜单和menuitems元素之间及其自身之间应具有唯一的id属性。
菜单元素和menuitem元素对于菜单元素的嵌套可能是无止境的。
这是我现在拥有的:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.alexblog.me"
xmlns="http://www.alexblog.me"
elementFormDefault="qualified">
<xsd:element name="menubar" type="MenubarType">
<xsd:unique name="uniqueIdsForMenubarElements">
<xsd:selector xpath=".//*"/>
<xsd:field xpath="@id"/>
</xsd:unique>
</xsd:element>
<xsd:element name="menu" type="MenuType"/>
<xsd:element name="menuitem" type="MenuitemType" nillable="true"/>
<xsd:attributeGroup name="MenubarElementsAttributeGroup">
<xsd:attribute name="id" type="xsd:string" use="required"/>
</xsd:attributeGroup>
<xsd:complexType name="MenuitemType">
<xsd:attributeGroup ref="MenubarElementsAttributeGroup"/>
</xsd:complexType>
<xsd:complexType name="MenuType">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="menu" type="MenuType"/>
<xsd:element name="menuitem"/>
</xsd:choice>
<xsd:attributeGroup ref="MenubarElementsAttributeGroup"/>
</xsd:complexType>
<xsd:complexType name="MenubarType">
<xsd:sequence>
<xsd:element ref="menu" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
它有效,但仅适用于菜单元素。 菜单项元素只是ignors。
在MenuType声明中,省略menuitem的元素类型。 指定它,验证将起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.