繁体   English   中英

通过XML模式的2个元素的唯一属性

[英]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

问题 :如何为两个元素的空间指定唯一性: menumenuitem 换句话说:所有菜单和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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM