¿Cómo me aseguro valores de los elementos singulares en un esquema XML?
Pregunta
quiero asegurar que no existen títulos de libros duplicados en el siguiente XML:
<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="books3.xsd">
<book>
<title>Book1</title>
</book>
<book>
<title>Book2</title>
</book>
<book>
<title>Book1</title> <!-- duplicate should not be allowed -->
</book>
</books>
Estoy utilizando el siguiente esquema:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="books">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="book"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="testUnique">
<xs:selector xpath="book"/>
<xs:field xpath="title"/>
</xs:unique>
</xs:element>
<xs:element name="book">
<xs:complexType>
<xs:sequence>
<xs:element ref="title"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="title" type="xs:NCName"/>
</xs:schema>
editor de XML oXygen me dice que esto es válido cuando lo confirme.
¿Alguien puede ver lo que estoy haciendo mal?
Solución
el esquema parece bien y debería detectar el duplicado. puede ser un error en oxígeno?
Puede probar este sitio para validar su xml: http://www.xmlvalidation.com
y verá que encuentra errores en su XmlDocument:
Duplicar valor único [Libro1] declarada para la restricción de la identidad elemento "libros"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow