如何在XML中声明属性ID
我正在写一些XML和XSD作为作业。。。 在我的XML中有一个名为如何在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
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
。对此有何评论?