如何在XML中声明属性ID

如何在XML中声明属性ID,xml,xsd,Xml,Xsd,我正在写一些XML和XSD作为作业。。。 在我的XML中有一个名为a(不是实际名称)的标记和名为id的属性。我的部分XML如下所示: <a id="1"> ........... </a> <a id="1"> ............ </a> ........... ............ 当我使用XSD进行验证时,它不会给出错误 <xsd:attribute name="i

我正在写一些XML和XSD作为作业。。。 在我的XML中有一个名为
a
(不是实际名称)的标记和名为
id
的属性。我的部分XML如下所示:

    <a id="1">
    ...........
    </a>
    <a id="1">
    ............
    </a>

...........
............
当我使用XSD进行验证时,它不会给出错误

    <xsd:attribute name="id" type="xsd:string" />

我试图使用xsd:ID作为属性
ID
的数据类型,但它给了我一个错误;我想不出是什么问题

如何执行此操作?

“1”是有效字符串,因此验证不会返回错误。 如果要指定某些限制(例如“id应以字母开头”),则必须声明类型并指定模式:

<xsd:simpleType name="myID">
    <xsd:restriction base="xsd:string">
        <xsd:pattern value="[a-zA-Z].*"/>
    </xsd:restriction>
</xsd:simpleType>
....
  <xsd:attribute name="id" type="myID"/>
....

....
....
如果要指定唯一性限制,可以使用xsd:unique元素,如下所示:

<xsd:element name="root" type="myList">
  <xsd:unique name="myId">
    <xsd:selector xpath="./a"/>
    <xsd:field xpath="@id"/>
  </xsd:unique>
</xsd:element> 


这意味着声明为某些“myList”的元素“root”应该包含具有唯一属性“id”的子元素“a”

您应该返回使用
type=“xsd:id”
。除了确保该值是唯一的之外,它还允许您使用
xsd:IDREF
进行引用

尝试使用
xsd:ID
时出现的错误是ID值必须以字母开头。如果您将您的ID更改为“ID-1”/“ID-2”或“a1”/“a2”之类的值,它将正常工作

模式示例:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xsd:element name="doc">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" ref="a"/>
        <xsd:element maxOccurs="unbounded" ref="b"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="a">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string">
          <xsd:attribute name="id" use="required" type="xsd:ID"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="b">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string">
          <xsd:attribute name="idref" use="required" type="xsd:IDREF"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

XML示例:

<doc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="Untitled1.xsd">
  <a id="ID-1">
    ...........
  </a>
  <a id="ID-2">
    ............
  </a>
  <b idref="ID-1"/>
</doc>

...........
............

XML文件中的ID属性类型必须以字母和一些有限的特殊字符开头

在XML文件中尝试此类型的ID,例如:

...........
……因此,如果您分配xsd,不会出现错误,但如果您不分配xsd,则会出现错误?我想要的是每个元素都有一个id属性,并确保id的每个值都是唯一的。我刚刚添加了一条关于xsd:unique特性的注释。这将对您有所帮助。我如何向xml中添加一些文本,以指定每个元素的属性id的类型为xsd:id?是否可以将此声明嵌入文档本身?讨论在
ID
IDREF
上使用
key
keyref
unique
。对此有何评论?