134 lines
4.0 KiB
Markdown
134 lines
4.0 KiB
Markdown
## 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
|
|
<?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
|
|
<?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
|
|
<?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
|
|
<?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
|
|
|
|
#### Elementos simples
|
|
|
|
Los elementos simples solo pueden contener texto. La diferencia entre fixed y default es que en que con fixed, el valor no se puede modificar, tiene que ser ese, y con default si es modificable.
|
|
|
|
```xml
|
|
<xs:element name="nombre_del_elemento" type="xs:tipo_de_dato"/>
|
|
<xs:element name="nombre_del_elemento" type="xs:tipo_de_dato" {fixed|default}="cadena"/>
|
|
```
|
|
|
|
#### Atributos
|
|
|
|
##### Simples
|
|
|
|
```xml
|
|
<!-- 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 -->
|
|
<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
|
|
|
|
```xml
|
|
<!-- 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 -->
|
|
|
|
|
|
<!-- 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>
|
|
``` |