XMLSchema.

07.04.2018

¿Qué es un esquema XSD?

  • Es un vocabulario para expresar las reglas de los datos que usaremos.
  • Nos sirve de referencia para validar los datos que aparecen en el XML.

    Especifica:

    • La estructura de la instancia del documento XML (El elemento está formado por elementos, y estos a su vez por otros elementos, etc.)
    • El tipo de dato del elemento o atributo (cosa que no se hace tan bien en los DTDs). Ej: Numero entero entre 0 y 4.

XSD es un formato para definir la estructura de un documento XML. XSD sustituye al anterior formato DTD, y añade funcionalidad para definir la estructura XML con más detalle.

Ejemplo de documento XSD:

123456789101112131415 <?xml version="1.0"?>

<xs:schema xmlns:xs="https://www.w3.org/2001/XMLSchema"> 

         <xs:element>

               <xs:complexType> 

                    <xs:sequence> 

                             <xs:element name="to" type="xs:string"/> 

                             <xs:element name="from" type="xs:string"/>

                            <xs:element type="xs:string"/>

                            <xs:element name="body" type="xs:string"/>

                     </xs:sequence>

           </xs:complexType>

       </xs:element>

</xs:schema>

Como podemos ver, el propio documento XSD está también escrito en XML.

Cómo hacer referencia en un documento XML a su especificación XSD

Una vez escrita una especificación XSD, podemos puede escribir un documento XML, y hacer constar en el mismo que debe ser conforme a dicha especificación. Esto se hace añadiendo algunos atributos al elemento raíz del documento XML.

En el ejemplo siguiente, vemos un documento XML que es conforme a la especificación "note.xsd" presentada más arriba:

<?xml version="1.0"?>                  

 <notexmlns="https://human-computing.webnode.es/l/xmlschema/"xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="https://webnode.es note.xsd">

    <to>Tove</to>

   <from>Jani</from>

    <heading>Reminder</heading> 

    <body>Don't forget me this weekend!</body>

</note> 


En la línea 3, indicamos que el "namespace" al que pertenecen los elementos que aparecen en el documento es "https://webnode.es "

En la línea 4, indicamos que también pueden aparecer elementos del namespace "https://www.w3.org/2001/XMLSchema-instance", y deben ir precedidos por el prefijo "xsi"

En la línea 5, el atributo xsi:schemaLocation indica la ubicación del esquema XSD contra el que se debe validar el documento XML (En este caso un documento denominado "note.xsd"). Como vemos, este atributo utiliza el prefijo "xsi:", y por lo tanto se trata de un atributo definido en el namespace de la línea 4. 

Ejemplo 2:


    <?xml version='1.0'?>

   <BookStore xmlns ='https://www.books.org' (1 ) 

   xmlns:xsi='https://www.w3.org/2001/XMLSchema-instance'(2) 

   xsi:schemaLocation='https://www.books.org BookStore.xsd'> (3)


  • Indicamos al validador de esquemas el lugar donde están los elementos usados en la instancia del documento. Es decir, donde se encuentra el espacio de nombres. Para ello usamos default namespace.
  • Le decimos al validador que el atributo squemaLocation que estamos utilizando está definido en el espacio de nombres de esquemas XML.
  • Mediante schemaLocation indicamos al validador de esquemas que el espacio de nombres está definido en BookStore.xsd.

Declaraciones y definiciones.


  • Declaración. Las declaraciones describen los modelos de contenido (la estructura) de elementos y atributos dentro de las instancias de un documento XML.
  • Definición. Las definiciones crean nuevos tipo de datos (simples o complejos).


Función del esquema

  • Un esquema es equivalente en la terminología de objetos, a una clase XML.
  • Un esquema es equivalente en un lenguaje, a una oración de dicho lenguaje.
  • Una instancia XML, es equivalente en un lenguaje, a una frase concreta de dicho lenguaje.
  • Describe el lenguaje y el vocabulario a usar por otros para crear documentos XML.
  • Posibilita verificar que una frase de ese lenguaje pertenece a él. Ej.: el lenguaje a usar para describir el genoma humano.
  • El propósito de un documento esquema de XSD es definir los bloques arquitectónicos de un documento XML, de una forma análoga a como lo hace un DTD.

Elementos, atributos y tipos de datos simples

En el esquema se definen los elementos de que puede constar el documento XML, y los tipos de datos que pueden contener, mediante lineas de la forma:

123 <xs:element type="tipo_de_datos" />

Los tipos de datos más comunes son:

  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time

Un elemento también puede tener atributos. Los atributos se definen igual que los elementos, sustituyendo xs:element por xs:attribute. Ejemplos:

1234 <xs:attribute type="xs:string" use="required"/><xs:attribute type="xs:string" use="optional" default="es"/>

También podemos crear nuevos tipos de datos, estableciendo restricciones sobre los valores posibles de un tipo de datos predefinido. Ejemplo:

<xs:element name ="age">

   <xs:simpleType>

         <xs:restriction base="xs:integer">

            <xs:minInclusive value="0"/>

            <xs:maxInclusive value="120"/>

        </xs:restriction>

   </xs:simpleType>

</xs:element>

<xs:element name ="car">

     <xs:simpleType>

          <xs:restriction base="xs:string">

                 <xs:enumeration value="Audi"/>

                 <xs:enumeration value="Golf"/>

                <xs:enumeration value="BMW"/>

        </xs:restriction>

    </xs:simpleType>

</xs:element>

<xs:element name="letter">

     <xs:simpleType>

         <xs:restriction base="xs:string">

                  <xs:pattern value="([a-z][A-Z])+"/>

         </xs:restriction>

    </xs:simpleType>

</xs:element>


Restricciones aplicables a tipos de datos simples


enumeration Defines a list of acceptable values
fractionDigits Specifies the maximum number of decimal places allowed. Must be equal to or greater than zero
length Specifies the exact number of characters or list items allowed. Must be equal to or greater than zero
maxExclusive Specifies the upper bounds for numeric values (the value must be less than this value)
maxInclusive Specifies the upper bounds for numeric values (the value must be less than or equal to this value)
maxLength Specifies the maximum number of characters or list items allowed. Must be equal to or greater than zero
minExclusive Specifies the lower bounds for numeric values (the value must be greater than this value)
minInclusive Specifies the lower bounds for numeric values (the value must be greater than or equal to this value)
minLength Specifies the minimum number of characters or list items allowed. Must be equal to or greater than zero
pattern Defines the exact sequence of characters that are acceptable
totalDigits Specifies the exact number of digits allowed. Must be greater than zero
whiteSpace Specifies how white space (line feeds, tabs, spaces, and carriage returns) is handled

Tipos de Datos Compuestos

Se pueden definir tipos de datos compuestos mediante elementos <xs:complexType>. Los tipos de datos compuestos contienen un conjunto de tipos de datos simples o compuestos. Estos se pueden agrupar mediante indicadores de orden como <xs:sequence> y también pueden emplear indicadores de ocurrencia, como explicamos más adelante.

<xs:element name="employee"  type="fullpersoninfo"/>

<xs:complexType name="eprsoninfo">

     <xs:sequence>

          <xs:element type="xs:string"/>

          <xs:element type="xs:string"/>

    </xs:sequence>

</xs:complexType>

<xs:complexType name="fullpersonoinfo">

    <xs:complexContent>

       <xs:extension base="personinfo">

            <xs:sequence>

                 <xs:element name ="address" type="xs:string"/>

                 <xs:element name="city" type="xs:string"/>

                 <xs:element name="country" type="xs:string"/>

             </xs:sequence>

        </xs:extension>

   </xs:complexContent>

</xs:complexType>

En el ejemplo de arriba podemos ver las definiciones de:

  • Un tipo compuesto denominado "personinfo"
  • Un tipo compuesto "fullpersoninfo", definido como una extension del tipo "personinfo". Esto se hace empleando los tags <xs:complexContent> y <xs:extension>.
  • Un elemento "employee" del tipo "fullpersoninfo"


Indicadores

Existen siete indicadores que pueden ser utilizados en la definición de un tipo compuesto.

Indicadores de orden:

  • <xs:all>...</xs:all> - Los elementos que contiene pueden aparecer en cualquier orden.
  • <xs:choice>...</xs:choice> - Sólo puede aparecer uno de los elementos que contiene
  • <xs:sequence>...</xs:sequence> - Los elementos que contiene deben aparecer exactamente en el mismo orden en que están definidos

Indicadores de ocurrencia:

Por defecto, los elementos definidos como parte de un tipo compuesto deben aparecer exactamente una vez. Los atributos maxOccurs and minOccurs modifican este requisito:

  • maxOccurs="n" - Atributo que indica que el elemento puede aparecer varias veces, hasta un máximo de "n" veces. Si especificamos maxOccurs="unbounded", el elemento puede aparecer un número indefinido de veces.
  • minOccurs="n" - Atributo que indica que el elementos debe aparecer un mínimo de "n" veces. minOccurs="0″, significa que el elemento es opcional, y puede no aparecer.

Indicadores de grupo:

  • Group name - Podemos definir y asignar un nombre a un grupo de elementos de la forma <xs:group name="nombre_grupo">...</xs:group>.
    Una vez definido, en la definición de un tipo de datos compuesto podemos hacer referencia al mismo utilizando la sintaxis <xs:group ref="nombre_grupo"/>
  • attributeGroup name - De la misma forma, podemos definir y asignar un nombre a un grupo de atributos de la forma <xs:attributeGroup name="nombre_grupo">...</xs:attributeGroup>
    Una vez definido, podemos hacer referencia a dicho grupo con la sintaxis <xs:attributegroup ref="nombre_grupo"/>


  • DTD (Document Style Definition).

  • XSD sucesores del DTD.Muy pronto los esquemas XSD serán usados en la mayoría de las aplicaciones web, reemplazando a los DTDs, que se han estado usando hasta ahora.

    • Algunas de las razones para este cambio son:
      • XSD Schemas son más fáciles de aprender que los DTDs.
      • XSD Schemas son susceptibles de mejorar con nuevos añadidos.
      • XSD Schemas son más ricos y fáciles de usar que los DTDs.
      • XSD Schemas están escritos en XML.
      • XSD Schemas soportan distintos tipos de datos (textos, numéricos, etc.)
      • XSD Schemas soportan nombres de espacios, que permiten una mejor definición de los elementos.

Validación del XML usando XSD

¿Que es la validación?

  • Es el proceso por el cual una instancia de un documento XML se comprueba si se ajusta a un document esquema de XML, es decir, que está en el formato esperado.

¿Para que se usa el esquema XSD?

  • Validar el contenido de un documento XML.
  • Determinar que el documento XMLes una instancia válida del vocabulario (gramática o reglas), expresado por el esquema XSD.
  • Define los elementos que pueden aparecer dentro de un documento XML y los atributos que pueden ser asociados con un elemento.
  • Define si un elemento está vacio o puede incluir texto.
  • Define el valor de defecto de un atributo.
  • Define los elementos que pueden contener elementos hijo.
  • Define la secuencia de los elemento hijo, que aparecen en un elemento.
  • Define el número de elementos hijo.

Notas.

  • Un archivo xml o xsl, se pueden validar respecto a un archivo DTD o XSD.
  • Si existe un tag (y su correspondiente cierre) en el archivo xml y no en el archivo XSD:
    • Con el Explorer, el tag no aparece en el html y no da error.
    • Para ver el error hay que validar. Para ello abrir el archivo xml con el Explorer y con el botón derecho seleccionar validar.
  • Si existe un tag (y su correspondiente cierre) en el archivo DTD y no en el archivo xml:
    • Con el Explorer, el tag no aparece en el html y no da error.
    • Para ver el error hay validar. Para ello abrir el archivo xml con el Explorer y con el botón derecho seleccionar validar.
    • Mensaje de Error: De acuerdo con DTD o con el esquema, el contenido del elemento (en XML), no está completo.

XSD Sintaxis

  • Estructura del esquema XSD

    El esquema

    • Un esquema XSD define la estructura de un conjunto de documentos XML.
    • Un esquema XSD se compone de:
      • elementos
      • atributos

    • Un esquema suministra detalles sobre el modelo de contenido y define:
      • Que elementos contiene:
        • los elementos que pueden aparecer en un documento.
        • los atributos que pueden aparecer en un documento.

      • Cuales son las relaciones entre ellos:
        • en que orden pueden estar esos elementos,
        • que elementos son elementos hijo,
        • en que secuencia pueden aparecer los elementos hijo,
        • el número de elementos hijo.

      • Que contenidos, datos o valores se permiten:
        • si un elemento puede ser vacío o puede incluir texto,
        • el tipo de datos (contenido) para los elementos y atributos.

      • Cuales son los valores por defecto para elementos y atributos.
  • Facetas

    ¿Qué son las facetas?

    • Las facetas son todas aquellas restricciones que sufren los elementos, valores o atributos del xml.

          - Restricciones de valores.

             - Restricciones de valores enumerados.

  • Espacio de nombres

  • Tipos de Datos

  • Tipos de indicadores (citados anterior mente).

  • XSD Varios

    • Plantillas XSD

    • XML Squema FA



© 2017 Human Lab. Todos los derechos reservados.
Creado con Webnode Cookies
¡Crea tu página web gratis! Esta página web fue creada con Webnode. Crea tu propia web gratis hoy mismo! Comenzar