4.7 KiB
4.7 KiB
Documentación XML Schema (XSD)
Definición
XSD (XML Schema Definition) es un lenguaje, también llamado simplemente XML Schema, que sirve para definir la estructura de un documento XML, permitiendo su validación.
Declaracion de un archivo XSD y su vinculacion al XML
Sin espacio de nombres asociado
Al usar la etiqueta noNamespaceSchemaLocation, podemos usar un archivo xsd sin namespace asociado
<?xml version="1.0" encoding="utf-8"?>
<!-- archivo.xsd -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="etiqueta_raiz">
<!-- Contenido -->
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!-- archivo.xml -->
<etiqueta_raiz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="archivo.xsd">
<contenido/>
</etiqueta_raiz>
Con espacio de nombres personalizado
schemaLocation necesita dos valores:
- La url del espacio de nombres.
- La ubicacion del archivo con el esquema del espacio de nombres.
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!-- archivo.xml -->
<custom:etiqueta_raiz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://custom.url archivo.xsd"
xmlns:custom="https://custom.url">
<custom:contenido/>
</custom:etiqueta_raiz>
- targetNamespace define el espacio de nombres para este esquema.
- xmlns especifica que este es el espacio de nombres por defecto.
- elementFormDefault indica que todos los elementos tienen que llevar el espacio de nombres (qualified) o no es necesario que lo lleven (unqualified)
<?xml version="1.0" encoding="utf-8"?>
<!-- archivo.xsd -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://custom.url"
xmlns="https://custom.url"
elementFormDefault="qualified">
<xs:element name="etiqueta_raiz">
<!-- Contenido -->
</xs:element>
</xs:schema>
Estructura y elementos
Tipos de datos
anyURI, base64Binary, boolean, date, dateTime, decimal, double, duration, float, hexBinary, gDay, gMonth, gMonthDay, gYear, gYearMonth, NOTATION, QName, string, and time
Elementos
Simples
Los elementos simples solo pueden contener texto.
<!-- Simple -->
<xs:element name="nombre_del_elemento" type="xs:tipo_de_dato"/>
<!-- Con valor por defecto -->
<xs:element name="nombre_del_elemento" type="xs:tipo_de_dato" default="valor"/>
<!-- Con valor fijo -->
<xs:element name="nombre_del_elemento" type="xs:tipo_de_dato" fixed="valor"/>
<!-- Con faceta/restricciones -->
<xs:element>
<xs:simpleType>
<xs:restriction base="xs:tipo_de_dato">
<xs:tipo_restriccion value="valor"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Atributos
Simples
<!-- Simple -->
<xs:attribute name="nombre_del_atributo" type="xs:tipo_de_dato"/>
<!-- Con valor por defecto -->
<xs:attribute name="nombre_del_atributo" type="xs:tipo_de_dato" default="valor"/>
<!-- Con valor fijo -->
<xs:attribute name="nombre_del_atributo" type="xs:tipo_de_dato" fixed="valor"/>
<!-- Obligatorio (por defecto es opcional-->
<xs:attribute name="nombre_del_atributo" type="xs:tipo_de_dato" use="required"/>
<!-- Con faceta/restricciones -->
<xs:attribute name="nombre_atributo">
<xs:simpleType>
<xs:restriction base="xs:tipo_de_dato">
<xs:pattern value="[A-D]{3}\d"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
Complejos
<!-- Elemento complejo vacio, con atributos -->
<xs:element name="nombre_elemento">
<xs:complexType>
<xs:attribute name="nombre_atributo" type="xs:tipo_de_dato"/>
</xs:complexType>
</xs:element>
<!-- Elemento complejo con elementos, y atributos -->
<xs:element name="nombre_elemento">
<xs:complexType>
<xs:sequence>
<xs:element name="nombre_elemento" type="xs:tipo_de_dato"/>
</xs:sequence>
<xs:attribute name="nombre_atributo" type="xs:tipo_de_dato"/>
</xs:complexType>
</xs:element>
<!-- Elemento complejo con texto, y atributos -->
<xs:element name="nombre_elemento">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:tipo_de_dato">
<xs:attribute name="nombre_atributo" type="xs:tipo_de_dato"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<!-- Elemento complejo con elementos, texto, y atributos -->
<xs:element name="nombre_elemento">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="nombre_elemento" type="xs:tipo_de_dato"/>
</xs:sequence>
<xs:attribute name="nombre_atributo" type="xs:tipo_de_dato"/>
</xs:complexType>
</xs:element>