У меня есть XSD-файл:XSD хз: уникальные не удалось обнаружить дубликаты
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="library"
xmlns="library"
elementFormDefault="qualified">
<xs:element name="library">
<xs:complexType>
<xs:sequence>
<xs:element ref="book" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="book-name">
<xs:selector xpath="book"/>
<xs:field xpath="name"/>
</xs:unique>
</xs:element>
<xs:element name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
И в XML-экземпляр:
<library xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="library uniqueness.xsd"
xmlns="library">
<book>
<name>Hihi</name>
</book>
<book>
<name>Hihi</name>
</book>
</library>
я использую this валидатор, чтобы проверить мои документы.
Я предположил, что экземпляр XML должен быть недействительным, так как имена обеих книг в библиотеке: Hihi
, что означает, что каждое имя книги не является уникальным.
Я попытался добавить префикс пространства имен ко всему, переместив элементы xs:unique
в элемент book
, но все это не работает, и валидаторы XML говорят, что документ действителен.
Что я сделал не так? Любая помощь будет высоко ценится.
Спасибо! Однако у меня есть следующий вопрос. Почему префикс пространства имен является обязательным при указании XPath? Какова цель стандарта? –
Я не знаю аргументов в пользу этого решения. Однако это просто кажется упущением, потому что оно было «исправлено» в XSD 1.1 с атрибутом «xpathDefaultNamespace». – Meyer