XML Schema
De WikiEducator
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas. |
Contenido
XML Schema
Documentación
- http://www.w3.org/TR/2001/REC-xmlschema-0-20010502/
- http://www.aafunky.com/w3c/xmlschema/xmlschema-0es.html
- http://www.w3schools.com/schema/
- http://www.xml.com/pub/a/2000/11/29/schemas/part1.html?page=1
Objetivo
XML Schema es una alternativa a DTD basada en XML. Describe la estructura de un documento XML.
- Definir la estructura correcta de bloques de un documento XML
- Define los elementos y atributos que pueden aparecer
- Define qué elementos son hijos, cuántos hijos y en qué orden.
- Define si un elemento puede contener texto o tiene que estar vacío.
- Define los tipos de datos de elementos y atributos.
- Define valores fijos y por defecto
A diferencia del DTD:
- es un modelo extensible y tiene más poder expresivo.
- están escritos en XML
- soporta tipos de datos y namespaces
- son una recomendación del W3C
El tipo de documento XML
La estructura de un documento XML la forman:
- Su vocabulario (elementos y atributos)
- El modelo de contenido de cada elemento
- Los tipos de datos del contenido
Componentes de un esquema
- Componentes primarios: tipos de datos, elementos y atributos
- Componentes secundarios: definiciones especiales (grupos de atributos, restricciones y anotaciones)
- Componentes de ayuda. Se usan en otros componentes
Un ejemplo
(fuente: http://www.aafunky.com/w3c/xmlschema/xmlschema-0es.html)
<?xml version="1.0"?> <hojaPedido fechaPedido="1999-10-20"> <enviarA pais="EEUU"> <nombre>Alice Smith</nombre> <calle>123 Maple Street</calle> <ciudad>Mill Valley</ciudad> <estado>CA</estado> <zip>90952</zip> </enviarA> <facturarA pais="EEUU"> <nombre>Robert Smith</nombre> <calle>8 Oak Avenue</calle> <ciudad>Old Town</ciudad> <estado>PA</estado> <zip>95819</zip> </facturarA> <comentario>¡Deprisa, mi césped parece una selva!</comentario> <elementos> <elemento numProducto="872-AA"> <nombreProducto>Cortacesped</nombreProducto> <cantidad>1</cantidad> <precioEEUU>148.95</precioEEUU> <comentario>Confirmar que es eléctrico</comentario> </elemento> <elemento numProducto="926-AA"> <nombreProducto>Monitor para bebes</nombreProducto> <cantidad>1</cantidad> <precioEEUU>39.98</precioEEUU> <fechaEnvio>1999-05-21</fechaEnvio> </elemento> </elementos> </hojaPedido>
XML Schema:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:annotation> <xsd:documentation xml:lang="es"> Esquema de hoja de pedido para Example.com. Copyright 2000 Example.com. Todos los derechos reservados. </xsd:documentation> </xsd:annotation> <xsd:element name="hojaPedido" type="TipoHojaPedido"/> <xsd:element name="comentario" type="xsd:string"/> <xsd:complexType name="TipoHojaPedido"> <xsd:sequence> <xsd:element name="enviarA" type="direccionEEUU"/> <xsd:element name="facturarA" type="direccionEEUU"/> <xsd:element ref="comentario" minOccurs="0"/> <xsd:element name="elementos" type="Elementos"/> </xsd:sequence> <xsd:attribute name="fechaPedido" type="xsd:date"/> </xsd:complexType> <xsd:complexType name="direccionEEUU"> <xsd:sequence> <xsd:element name="nombre" type="xsd:string"/> <xsd:element name="calle" type="xsd:string"/> <xsd:element name="ciudad" type="xsd:string"/> <xsd:element name="estado" type="xsd:string"/> <xsd:element name="zip" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="pais" type="xsd:NMTOKEN" fixed="EEUU"/> </xsd:complexType> <xsd:complexType name="Elementos"> <xsd:sequence> <xsd:element name="elemento" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="nombreProducto" type="xsd:string"/> <xsd:element name="cantidad"> <xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxExclusive value="100"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="precioEEUU" type="xsd:decimal"/> <xsd:element ref="comentario" minOccurs="0"/> <xsd:element name="fechaEnvio" type="xsd:date" minOccurs="0"/> </xsd:sequence> <xsd:attribute name="numProducto" type="SKU" use="required"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> <!-- Stock Keeping Unit [Código de Almacenaje], --> <!-- un código para identificar productos --> <xsd:simpleType name="SKU"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-[A-Z]{2}"/> </xsd:restriction> </xsd:simpleType> </xsd:schema>
Elemento schema
- Declaración del espacio de nombres de la recomendación del W3C
- Los hijos directos de schema son declaraciones y definiciones globales
- Elemento raíz (declarado a nivel global).
- Sequence: los elementos tienen que aparecer en el mismo orden (especificador)
- Tipos simples (limitan el texto que se puede insertar como valor)
- Tipos complejos (pueden ser anónimos)
- element
- para declarar elementos. Atributos: name, ref, type, sympleType, complexType
- attribute
- para declarar atributos. Nomalmente dentro de attributeGroup. Tipos: simpleType o type. Siempre son de tipo simple. Frecuencia: use: required, optional, prohibited,.
- sequence
- los elementos tienen que aparecer en el mismo orden
- cardinalidad
- minOccurs, maxOccurs. Si no se especifica nada: 1.
- Restricciones de valor
- fixed, default,