Я пытался использовать xs: unique, но пока безуспешно.У меня есть следующая простая схема:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://testuri/test.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://testuri/test.xsd"
elementFormDefault="qualified"
id="XMLSchema1">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="items">
<xs:complexType>
<xs:sequence>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
С помощью этого проверяется следующий простой XML-файл:
<?xml version="1.0" encoding="utf-8" ?>
<root xmlns="http://testuri/test.xsd">
<items>
<item id="1"/>
<item id="1"/>
<item id="1"/>
</items>
</root>
Теперь предположим, что мы хотим сделать идентификатор атрибута уникальным.Я думал о том, чтобы просто изменить схему на:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema
xmlns="http://testuri/test.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://testuri/test.xsd"
elementFormDefault="qualified" id="XMLSchema1">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="items">
<xs:complexType>
<xs:sequence>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="itemKey">
<xs:selector xpath="items/item"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
</xs:schema>
Однако приведенный выше xml все еще проверяется.
Я уверен, что проблема заключается в xpath селектора.Есть идеи?