XSD 兄弟元素内的唯一约束
XSD unique constraint within sibling elements
我有以下 XML 文件。我正在尝试在 XML 文件中创建一个唯一约束,以便图书的 ID 在图书馆中应该是唯一的。我尝试创建一个,但能够在组内创建唯一约束。
<library>
<group>
<groupName>Group 1</groupName>
<books>
<book>
<name>Aa</name>
<id>11</id>
</book>
<book>
<name>Bb</name>
<id>12</id>
</book>
</books>
</group>
<group>
<groupName>Group 1</groupName>
<books>
<book>
<name>Cc</name>
<id>11</id>
</book>
<book>
<name>Dd</name>
<id>14</id>
</book>
</books>
</group>
</library>
在给定的文件中,书名 'Cc' 的 ID 为 11,与书名 'Aa' 相同,因此验证应该失败。请帮我看看我哪里出错了
这是我的 xsd 文件
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="library">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="group">
<xs:complexType>
<xs:sequence>
<xs:element name="groupName" type="xs:string" />
<xs:element name="books">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="id" type="xs:unsignedByte" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueRegAddr">
<xs:selector xpath="book"/>
<xs:field xpath="id"/>
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
如果有两本书ID相同,则library
元素无效,所以需要为library
定义唯一性约束。您对 books
元素的有效性定义了约束,这太窄了。
我有以下 XML 文件。我正在尝试在 XML 文件中创建一个唯一约束,以便图书的 ID 在图书馆中应该是唯一的。我尝试创建一个,但能够在组内创建唯一约束。
<library>
<group>
<groupName>Group 1</groupName>
<books>
<book>
<name>Aa</name>
<id>11</id>
</book>
<book>
<name>Bb</name>
<id>12</id>
</book>
</books>
</group>
<group>
<groupName>Group 1</groupName>
<books>
<book>
<name>Cc</name>
<id>11</id>
</book>
<book>
<name>Dd</name>
<id>14</id>
</book>
</books>
</group>
</library>
在给定的文件中,书名 'Cc' 的 ID 为 11,与书名 'Aa' 相同,因此验证应该失败。请帮我看看我哪里出错了 这是我的 xsd 文件
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="library">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="group">
<xs:complexType>
<xs:sequence>
<xs:element name="groupName" type="xs:string" />
<xs:element name="books">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="id" type="xs:unsignedByte" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueRegAddr">
<xs:selector xpath="book"/>
<xs:field xpath="id"/>
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
如果有两本书ID相同,则library
元素无效,所以需要为library
定义唯一性约束。您对 books
元素的有效性定义了约束,这太窄了。