DevSupportDocs/xsd.md

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>