Ejercicio Esquemas XML: Biblioteca
La herramienta de validación desde línea de comandos que utilizaremos se llama xmllint
, que pertenece al paquete debian libxml2-utils
Para validar un fichero xml con un fichero XSD (XML Schema Definition) ejecutamos el siguiente comando:
xmllint fichero.xml --schema fichero.xsd
Tambien podemos utilizar un programa gráfico que se llama xsddiagram.
Ejemplo 1: Tipos simples
ejemplo1.xml
<?xml version="1.0" encoding="utf-8"?>
<nota>hola</nota>
ejemplo1.xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="nota" type="xs:string"/>
</xs:schema>
Ejemplo 2: Tipos complejos
<libro>
<autor>Miguel de Cervantes Saavedra</autor>
<titulo>El Quijote de la Mancha</titulo>
</libro>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="libro">
<xs:complexType>
<xs:sequence>
<xs:element name="autor" type="xs:string" />
<xs:element name="titulo" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Ejemplo 3: Tipos complejos II
<biblioteca>
<libro>
<autor>Miguel de Cervantes Saavedra</autor>
<titulo>El Quijote de la Mancha</titulo>
</libro>
<libro>
<autor>Pablo Neruda</autor>
<titulo>Veinte poemas de amor y una canción desesperada</titulo>
</libro>
</biblioteca>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="biblioteca">
<xs:complexType>
<xs:sequence>
<xs:element name="libro" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="autor" />
<xs:element name="titulo" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Ejemplo 4: Restricciones
<?xml version="1.0" encoding="utf-8"?>
<biblioteca>
<libro>
<autor>Miguel de Cervantes Saavedra</autor>
<titulo>El Quijote de la Mancha</titulo>
<codigo>123</codigo>
</libro>
<libro>
<autor>Pablo Neruda</autor>
<titulo>Veinte poemas de amor y una canción desesperada</titulo>
<codigo>124</codigo>
</libro>
</biblioteca>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="biblioteca">
<xs:complexType>
<xs:sequence>
<xs:element name="libro" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="autor" />
<xs:element name="titulo" />
<xs:element name="codigo">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="9999"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Ejemplo 5: Restricciones II
<?xml version="1.0" encoding="utf-8"?>
<biblioteca>
<libro>
<autor>Miguel de Cervantes Saavedra</autor>
<titulo>El Quijote de la Mancha</titulo>
<codigo>123</codigo>
<ubicacion>estantería 1</ubicacion>
</libro>
<libro>
<autor>Pablo Neruda</autor>
<titulo>Veinte poemas de amor y una canción desesperada</titulo>
<codigo>124</codigo>
<ubicacion>estantería 11</ubicacion>
</libro>
</biblioteca>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="biblioteca">
<xs:complexType>
<xs:sequence>
<xs:element name="libro" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="autor" />
<xs:element name="titulo" />
<xs:element name="codigo">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="9999"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="ubicacion">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="estantería 1"/>
<xs:enumeration value="estantería 2"/>
<xs:enumeration value="estantería 3"/>
<xs:enumeration value="estantería 4"/>
<xs:enumeration value="estantería 5"/>
<xs:enumeration value="estantería 6"/>
<xs:enumeration value="estantería 7"/>
<xs:enumeration value="estantería 8"/>
<xs:enumeration value="estantería 9"/>
<xs:enumeration value="estantería 10"/>
<xs:enumeration value="estantería 11"/>
<xs:enumeration value="estantería 12"/>
<xs:enumeration value="estantería 13"/>
<xs:enumeration value="estantería 14"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Ejemplo 6: Atributos
<?xml version="1.0" encoding="utf-8"?>
<biblioteca>
<libro codigo="123" ubicacion="estantería 1">
<autor>Miguel de Cervantes Saavedra</autor>
<titulo>El Quijote de la Mancha</titulo>
</libro>
<libro codigo="1023" ubicacion="estantería 3">
<autor>Pablo Neruda</autor>
<titulo>Veinte poemas de amor y una canción desesperada</titulo>
</libro>
</biblioteca>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="biblioteca">
<xs:complexType>
<xs:sequence>
<xs:element name="libro" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="autor" />
<xs:element name="titulo" />
</xs:sequence>
<xs:attribute name="codigo">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="9999"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="ubicacion">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="estantería 1"/>
<xs:enumeration value="estantería 2"/>
<xs:enumeration value="estantería 3"/>
<xs:enumeration value="estantería 4"/>
<xs:enumeration value="estantería 5"/>
<xs:enumeration value="estantería 6"/>
<xs:enumeration value="estantería 7"/>
<xs:enumeration value="estantería 8"/>
<xs:enumeration value="estantería 9"/>
<xs:enumeration value="estantería 10"/>
<xs:enumeration value="estantería 11"/>
<xs:enumeration value="estantería 12"/>
<xs:enumeration value="estantería 13"/>
<xs:enumeration value="estantería 14"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>