XML Schema

De WikiEducator
Saltar a: navegación, buscar


Road Works.svg Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos.
Ver página de charlas.
Road Works.svg


XML Schema

Documentación

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,