Page 1

4.7.1 Poniendo todo junto El DTD que cumple con esto, ubicado en el archivo persona.dtd, es:


4.8. Limitaciones de los DTD  La  No

Sintaxis no es XML (difíciles de manipular) soportan Espacios de nombres

 No

permiten especificar tipos de datos (por ejemplo: enteros, flotantes, fechas, etc.

 No

permiten especificar secuencias no ordenadas ((e1,e2,e3)|(e1,e3,e2)|(e2,e1,e3)|... (e3,e2,e1))


4.8. Limitaciones de los DTD  No

hay soporte para declaraciones sensibles al contexto: Los elementos se definen todos a nivel de documento, ejemplo, contenido con el mismo nombre cuya estructura cambia en diferentes contextos

 Soporte

limitado para Referencias cruzadas, no es posible formar claves a partir de varios atributos o de elementos

 No

son extensibles (una vez definido, no es posible añadir nuevos vocabularios a un DTD)


5. Esquemas XML


5.1. Introducción OBJETIVOS

Aprender qué es un esquema Diferenciarlos de las DTD Construir esquemas Utilizar esquemas para validar XML VALIDACIÓN

DE DOCUMENTOS XML

DTD  tienen ciertas limitaciones ESQUEMAS  más eficientes 5


5.2. Definición de esquema Un

XSchema es un documento que describe el formato válido de un documento XML.

Es

similar a una DTD 

define qué elementos puede contener un documento XML, cómo están organizados, y que atributos y de qué tipo pueden tener sus elementos.


5.3. Características de los esquemas  Un

esquema XML define la estructura válida para un tipo de documento XML (al igual que las DTD), es decir: Los elementos que pueden aparecer en el documento Los atributos que pueden utilizarse junto a cada elemento Cómo se pueden anidar los elementos (padres e hijos) El orden en el que deben aparecer los elementos hijos de un mismo padre El número permitido de elementos hijos Si un elemento puede ser vacío o no Tipos de datos para elementos y atributos Valores por defecto y fijos para elementos y atributos


5.3. Características de los esquemas  Los

esquemas se definen como documentos XML, en un documento aparte con extensión .XSD

 En

los documentos XML que se basen en ese esquema, incluiremos una referencia al archivo .XSD


5.4. Comparación esquemas/DTD  Usan

sintaxis de XML, al contrario que los DTDs.

 Permiten  Permiten

especificar los tipos de datos.

utilizar diferentes espacios de nombres (namespace), lo que implica que las reglas para validar ciertos elementos estarán definidas en cierto sitio (por ejemplo en www.w3c.org/2001/XMLSchema, mientras que otras reglas estarán en otro sitio.


5.4. Comparación esquemas/DTD Son

extensibles.

Por

ejemplo, un schema nos permite definir el tipo del contenido de un elemento o de un atributo, y especificar si debe ser un número entero, o una cadena de texto, o una fecha, etc. Los DTDs no nos permiten hacer estas cosas.

No

es posible describir ENTIDADES usando esquemas.


5.5. Partes de un esquema Declaración

del esquema

Elementos Tipos

de datos integrados simples

Tipos

definidos por el usuario

 Tipos de datos simples  Tipos de datos complejos

Lista

de atributos


5.1.1.Declaración del esquema <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> </xsd:schema>

El atributo xmlns indica la norma que sigue el esquema. Los elementos utilizados en la creación de un esquema “proceden” del espacio de nombres: http://www.w3.org/2001/XMLSchema Se podría no definir ninguno o usar uno de los más comunes xs o xsd. El elemento schema es el elemento raíz del documento en el que se define el esquema.


Declaración referencia de un esquema en un documento xml

Un

documento XML puede validarse contra varios esquemas Puede asociarse explícitamente mediante el atributo schemaLocation Si no se utiliza espacio de nombres, puede usarse el atributo noNamespaceSchemaLocation


Declaración referencia de un esquema en un documento xml  Ejemplo:

alumnos.xml

<alumnos xmlns="http://www.univer.es/alumnos” xsi:SchemaLocation=“http://www.univer.es/alumnos alumnos.xsd” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance"> . . . </alumnos>  Ejemplo:

brazil.xml

<?xml version="1.0"?> <pelicula xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="brazil-01.xsd"> <titulo>Brazil</titulo> </pelicula>


Declaración referencia de un esquema en un documento xml

En

el ejemplo de brazil.xml:

xsi:noNamespaceSchemaLocation= "brazil-01.xsd"> Esta línea indica que vamos a usar el fichero .xsd (contiene el Schema) para validar el documento xml, pero sin asociar un espacio de nombres a esas definiciones.


Declaración referencia de un esquema en un documento xml

 Los

espacios de nombres deben coincidir. También puede usarse xsi:noNameSpaceLocation

Alumnos.xsd <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.univer.es/alumnos" xmlns="http://www.univer.es/alumnos"> <xsd:element name="alumnos"> ...


Declaración referencia de un esquema en un documento xml

 Los

espacios de nombres deben coincidir. También puede usarse xsi:noNameSpaceLocation

Alumnos.xml <alumnos xmlns="http://www.univer.es/alumnos” xsi:schemaLocation=“http://www.univer.es/alumnos alumnos.xsd” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance"> . . . </alumnos>


Declaración referencia de un esquema en un documento xml Ejemplo de esquema  BookStore.xsd <?xml version="1.0"?> <xsd:schema xmlns:xsd=http://www.w3.org/2001/xmlschema targetNamespace=http://www.books.org xmlns=http://www.books.org elementFormDefault="qualified"> <xsd:element name="BookStore"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Book" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> ...


DeclaraciĂłnď&#x192; referencia de un esquema en un documento xml


Namespace del XMLSchema-instance


DeclaraciĂłnď&#x192; referencia de un esquema en un documento xml


El namespace de book (targetnamespace)


DeclaraciĂłnď&#x192; referencia de un esquema en un documento xml


DeclaraciĂłnď&#x192; referencia de un esquema en un documento xml


La instancia de documento xml puede ser: <?xml version="1.0"?> <BookStore xmlns ="http://www.books.org” xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.books.org BookStore.xsd"> <Book> <Title>My Life and Times</Title> <Author>Paul McCartney</Author> <Date>July, 1998</Date> <ISBN>94303-12021-43892</ISBN> <Publisher>McMillin Publishing</Publisher> </Book> ...

</BookStore>

Usar una declaración de namespace por defecto, diciéndole al validador del Esquema que todos los elementos usados en este documento vienen del namespace http://www.books.org


La instancia de documento xml puede ser: <?xml version="1.0"?> <BookStore xmlns ="http://www.books.org” xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.books.org BookStore.xsd"> <Book> <Title>My Life and Times</Title> <Author>Paul McCartney</Author> <Date>July, 1998</Date> <ISBN>94303-12021-43892</ISBN> <Publisher>McMillin Publishing</Publisher> </Book> ...

</BookStore>

Decirle al validador del esquema que el atributo schemaLocation que se está usando es el único en el namespace del XMLSchema-instance


La instancia de documento xml puede ser: <?xml version="1.0"?> <BookStore xmlns ="http://www.books.org” xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.books.org BookStore.xsd"> <Book> <Title>My Life and Times</Title> <Author>Paul McCartney</Author> <Date>July, 1998</Date> <ISBN>94303-12021-43892</ISBN> <Publisher>McMillin Publishing</Publisher> </Book> ...

</BookStore>

Con el schemaLocation se le dice al validador del esquema que el namespace http://www.books.org está definido por BookStore.xsd (por eso el schemaLocation tiene un par de valores)


DeclaraciĂłnď&#x192; referencia de un esquema en un documento xml


MĂşltiples niveles de chequeo


Elementos simples  Permiten

estructurar la definición del documento.

elemento simple es un elemento que sólo puede contener texto (cualquier tipo de dato), pero no a otros elementos ni atributos

 Un

 Para

definir un elemento simple, utilizamos la sintáxis:

<xsd:element name="xxx" type="yyy"/>  Ejemplos:

<xsd:element name="apellido" type="xsd:string"/> <xsd:element name="edad" type="xsd:integer"/> <xsd:element name="fecNac" type="xsd:date"/>


Tipos de datos simples: integrados o predefinidos


Tipos de datos simples: integrados o predefinidos

ď ľEJERCICIO.

Haz una tabla, con cada uno de los tipos de datos y su descripcion asociada.


Tipos de datos simples: integrados o predefinidos

Los más usuales son: Tipo

Descripción

Ejemplo

xsd:string

Cadena de texto

“brazil”

xsd:boolean

Valores booleanos

true, false

xsd:byte, xsd:short, xsd:integer, xsd:long

Números enteros

-7, 0, 10

xsd:float, xsd:double, xsd:decimal

Números decimales

-47, 12, 0, 134,23

xsd:date

Fecha

12/02/2011

xsd:time

Hora

21:00


Tipos de datos definidos por el usuario: simples

Tipos

de datos simples:

Todos los tipos de datos predefinidos son simples. En general representan valores atómicos (el número 7, el texto "Hola"), no listas. Excepcionalmente, se construyen no atómicos, como una lista de números primos (1,2 3,5,7,11...). Todos los tipos predefinidos son atómicos.


Tipos de datos definidos por el usuario: simples

Se

pueden asignar tanto a elementos que sólo tengan contenido textual como a atributos

También

se pueden construir, derivando de un tipo base predefinido al que se introducen restricciones.


Tipos de datos definidos por el usuario: simples

Ejemplo: Un

tipo de datos simple derivado es el que represente un correo electrónico. Se basa el tipo de datos predefinido xs:string, que representa cualquier cadena de texto, fuerza a que cumpla una serie de reglas (contener el carácter el carácter @, contener el carácter el carácter "."...). 


Tipos de datos definidos por el usuario: simples

Definición

de tipos simples

Se usará el componente de definición de tipos simples, <xs:simpleType>. Se podrán limitar el rango de valores con el componente <xs:restriction>. Se

pueden asignar a elementos y a atributos.


Tipos de datos definidos por el usuario: simples xs:simpleType

Es el componente de definición de tipos simples.   Atributos optativos principales: name:

nombre del tipo. Este atributo es obligatorio si el componente es hijo de <xs : schema>, de lo contrario no está permitido.

id:

identificador único para el componente.

Hasta ahora sólo se ha visto cómo asignar un tipo de datos predefinido (que siempre es simple) a un elemento.


Tipos de datos definidos por el usuario: simples

Ejemplo:

Asignar el tipo de datos predefinido xs:float al elemento <ingresosAnuales>. <xs:element name="ingresosAnuales" type="xs:float"/> La declaración anterior de elemento con un tipo simple asignado es una forma simplificada de a que se muestra a continuación. Se recomienda usar la simplificada.


Tipos de datos definidos por el usuario: simples

<xs:element name="ingresosAnuales"> <xs:simpleType> <xs:restriction base="xs:float" /> </xs:simpleType> </xs:element>


Tipos de datos definidos por el usuario: simples

Ahora se puede construir un tipo de datos simple, al que se le asignará un nombre, y que será un sinónimo del tipo de datos predefinido xs:float. Se usará el componente de restricción de valores de un tipo simple, xs:restriction. Este tipo no aporta nada nuevo a xs:float y se muestra a modo de ejemplo. No se recomienda definir tipos de datos que sean sinónimos a literales de predefinidos.


Tipos de datos definidos por el usuario: simples

<xs:simpleType name="TipoIngresosAnuales"> <xs:restriction base="xs:float" /> </xs:simpleType> <xs:element name= "ingresosAnuales" type="TipoIngresosAnuales"/>


Tipos de datos definidos por el usuario: simples

xs:restriction

Es un componente que define restricciones en los valores de un tipo. Atributos obligatorios: base:

nombre del tipo base a partir del cual se construirá el nuevo tipo, sea predefinido o construido.


Tipos de datos definidos por el usuario: simples

Atributos optativos principales: ď ąid:

identificador Ăşnico para el componente.


Tipos de datos definidos por el usuario: simples

Ejemplo:

Se declara un tipo simple que se utilizará para elementos que sean una contraseña. Será del tipo base xs:string, con unas facetas (se comentan a continuación) que fuercen su tamaño mínimo a 6 y máximo a 12.


Tipos de datos definidos por el usuario: simples

ď ľEjemplo:

<xs:simpleType name="TipoContrasenia"> <xs:restriction base="xs:string"> <xs:minLength value="6" /> <xs:maxLength value= "12" /> </xs:restriction> </xs:simpleType>


Tipos de datos definidos por el usuario: simples

La declaración de un elemento de nombre <clave> como del tipo recién creado sería: <xs:element name="clave" type="TipoContrasenia"> Un par de ejemplos de uso, uno válido y uno inválido, en un documento instancia XML son: <clave>claveValida!</clave> <clave>mala</clave>


Tipos de datos definidos por el usuario: simples

Facetas

length, minlength, maxlength: Longitud del tipo de datos pattern: Restricciones sobre valores mediante expresiones regulares enumeration: Restringe a una determinada enumeración de valores (max/min)(in/ex)clusive: Límites superiores/inferiores del tipo de datos totaldigits, fractionDigits: número de dígitos totales y decimales


Tipos de datos definidos por el usuario: simples

Ejemplo: El

elemento <edadLaboral> es un entero no negativo, que debe tener un valor mínimo a 16, incluido, y máximo 70, no incluido. En notación matemática se emplean los corchetes para identificar los intervalos cerrados (los extremos están incluidos) y paréntesis para identificar los intervalos abiertos (los extremos no están incluidos). En nuestro caso sería [16, 70)


Tipos de datos definidos por el usuario: simples

<xs:element name="edadLaboral"> <xs:simpleType> <xs:restriction base="xs:nonNegativelnteger"> <xs:minlnclusive value="16"/> <xs:maxExclusive value="70"/> </xs:restriction> </xs:simpleType> </xs:element>


Tipos de datos definidos por el usuario: simples

Si quisiĂŠramos definir un tipo de datos al que poder referenciar repetidas veces y declarar un elemento <edadLaboral> de ese tipo, serĂ­a:


Tipos de datos definidos por el usuario: simples

<xs:simpleType name="TipoEdadLaboral"> <xs:restriction base="xs:nonNegativelnteger"> <xs:minlnclusive value="16"/> <xs:maxExclusive value="70"/> </xs:restriction> </xs:simpleType> <xs: element name="edadLaboral" type="TipoEdadLaboral">


Tipos de datos definidos por el usuario: simples

Se recomienda llevar a cabo esta prĂĄctica, es decir, definir tipos de datos con nombre que puedan ser referenciados posteriormente. Se podrĂ­a crear una librerĂ­a de tipos de datos.


Tipos de datos definidos por el usuario: simples

Ejemplo: Se quiere definir un tipo de dato simple, TipoEstaciones, basado en el tipo predefinido xs:token, y que solamente permita como valores los nombres de las cuatro estaciones.


Tipos de datos definidos por el usuario: simples

<xs:simpleType name="TipoEstaciones"> <xs:restriction base="xs:token"> <xs:enumeration value="Primavera" /> <xs:enumeration value="Verano" /> <xs:enumeration value="Oto単o" /> <xs:enumeration value="Invierno"/> </xs:restriction> </xs:simpleType>


Tipos de datos definidos por el usuario: simples

Ejemplo: Se quiere un tipo de datos, TipoCantidad, basado en xs:decimal, que permita números con 2 dígitos decimales y 11 dígitos totales. El rango de valores implícito sería desde - 999.999.999,99 a 999.999.999,99.


Tipos de datos definidos por el usuario: simples

<xs:simpleType name="TipoCantidad"> <xs:restriction base="xs:decimal"> <xs:totalDigits value=â&#x20AC;&#x153;11"/> <xs:fractionDigits value="2"/> </xs:restriction> </xs:simpleType>


Tipos de datos definidos por el usuario: simples

Ejemplo: Se define un tipo basado en xs:string, usado para registrar direcciones en el que se quiere que todos los caracteres de espaciado (espacio, tabulador, nueva l铆nea y retorno de carro) se colapsen, lo que significa que si estos caracteres aparecen al principio o final de la cadena se eliminan, y si lo hacen en su interior, formando una hilera, se sustituyen en un solo espacio. La definici贸n de este tipo coincide con el tipo predefinido xs:token, derivado de xs:string.


Tipos de datos definidos por el usuario: simples

<xs:simpleType name="TipoDireccionFormateada" > <xs:restriction base="xs:string"> <xs:whiteSpace value="replace"/> </xs:restriction> </xs:simpleType>


Tipos de datos definidos por el usuario: simples EJERCICIO. Define diferentes tipos simples a partir de las siguientes especificaciones. A continuación, crea un esquema en el que sólo haya un elemento al que se le asigne un tipo simple de los definidos. Por último, escribe un documento instancia XML que sea válido con respecto a esE esquema. Repítelo para los distintos tipos definidos: a. Un número real con tres decimales que represente las temperaturas posibles en la Tierra, suponiendo que van desde -75° a 75°, ambas inclusive. b. Un xs:token que sólo pueda valer las siglas de los países vecinos de España, incluyendo a la propia España: ES, PR, FR, AN. c. Un número real que represente salarios, con 5 dígitos enteros y 2 decimales. d. Un mensaje de la red social Tweeter, conocido como tweet (trino), es una cadena de texto de una longitud máxima de 140 caracteres.


Tipos de datos definidos por el usuario: simples

xs:pattern Representa un patr贸n o expresi贸n regular que debe de cumplir la cadena de texto a la que se aplique. Ejemplo: Se quiere definir un tipo de datos, basado en xs:string, que se caracterice por cadenas de letras may煤sculas.


Tipos de datos definidos por el usuario: simples

<xs:simpleType name="TipoTresLetrasMayusculas"> <xs:restriction base="xs:string"> <xs:pattern value="[A-Z][A-Z][A-Z]"/> </xs:restriction> </xs:simpleType>


Tipos de datos definidos por el usuario: simples


Tipos de datos definidos por el usuario: simples


Tipos de datos definidos por el usuario: simples

Como se ha visto en los patrones anteriores, en las facetas se utilizan cuantifĂ­cadores (como tambiĂŠn se vio en los DTD):


Tipos de datos definidos por el usuario: simples

Hay ciertos caracteres que tienen un significado propio en las expresiones regulares: {, }, [, ],(,),?,*,+,-,|,^,.,\ Para indicar en una expresi贸n regular la aparici贸n literal de uno de estos caracteres, hay que anteponerle el car谩cter de escape \.


Tipos de datos definidos por el usuario: simples

Ejemplo: La expresión regular para una cadena que contenga las letras a o b o el carácter + sería: [ab\+]


Tipos de datos definidos por el usuario: simples

Ejemplo: Un número de teléfono que se quiere se represente como 3 dígitos, un punto, 3 dígitos, un punto, tres dígitos y un punto. Por ejemplo 912.345.678:


Tipos de datos definidos por el usuario: simples


Tipos de datos definidos por el usuario: simples

Ejemplo1: Dos dígitos seguidos de – seguidos de 3 dígitos seguidos de ? Seguidos de tres letras mayúsculas exceptuando la P. Ejemplo2: Define el siguiente patrón 22333 2333 22222333


Tipos de datos definidos por el usuario: simples

Ejercicio 1: Correo electr贸nico Ejercicio 2: Direcci贸n de red Ejercicio 3: Direcci贸n f铆sica


Tipos de datos definidos por el usuario: simples


Tipos de datos definidos por el usuario: simples

Más sobre derivación de tipos simples: uniones y listas Otra forma de derivar un tipo de datos consiste en definir uniones o listas de tipos de datos base: • Unión: es un tipo de datos creado a partir de una colección de tipos de datos base. Un valor es válido para una unión de tipos de datos si es válido para al menos uno de los tipos de datos que forman la unión. Se construye con el componente <xs: union>.


Tipos de datos definidos por el usuario: simples

Ejemplo: Se quiere reflejar que las tallas de ropa se pueden identificar por nĂşmeros (38, 40, 42) o por letras, que son las iniciales en inglĂŠs (S, M, L).


Tipos de datos definidos por el usuario: simples


Tipos de datos definidos por el usuario: simples

Cualquiera de estos dos fragmentos XML serĂ­an vĂĄlidos: <talla>42</talla> Y tambiĂŠn: <talla>M</talla>


Tipos de datos definidos por el usuario: simples

Lista: es un tipo de datos compuesto por listas de valores de un tipo de datos base. La lista de valores debe aparecer separada por espacios. Se construye con el componente <xs:list>.


Tipos de datos definidos por el usuario: simples

Ejemplo: Se define un tipo TipoListaNumerosBingo como una lista de valores enteros positivos que empieza en el 1 y acaba en el 90.


Tipos de datos definidos por el usuario: simples


Tipos de datos definidos por el usuario: simples

Un fragmento XML que sería válido para la definición precedente será: <numerosGanadores>1 7 19 34 42 60 63 73 </numerosGanadores>


Tipos de datos definidos por el usuario: simples

UT3.Parte2  
Advertisement