У меня есть следующая структура 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>
Устная форма: меню имеет * меню menu имеет * menu и * menuitem
Вопрос : как указать уникальность для пространства из 2 элементов: menu и menuitem ?Другими словами: все элементы меню и элементы меню должны иметь уникальные атрибуты id между собой и между собой.
Вложение элементов меню и элементов меню для элемента меню может быть бесконечным.
Вот что у меня сейчас:
<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>
Работает, но только для меню элементов. Menuitem элементы просто игнорируют.