Sunteți pe pagina 1din 105

Estructura de documentos XML.

W3C Esquemas

IES Mar de Cdiz Dpto. de Informtica

Qu es XML Schema
Es

un conjunto de reglas que sirve para forzar la estructura y las restricciones de los contenidos de los documentos XML de una forma muy precisa. un documento XML con un vocabulario especializado

Es

ESPACIOS DE NOMBRES EN ESQUEMAS

ESPACIOS DE NOMBRES: permiten escribir esquemas y validar documentos que usan elementos y atributos de mltiples vocabularios XML. Se utilizan los espacios de nombres para evitar conflictos entre nombres de elementos o nombres de atributos con igual nombre, pero significado distinto.

Una diferencia importante entre las DTDs y Esquemas reside en que stas, como tales documentos XML, pueden usar vocabularios asociados a espacios de nombres. Por lo que se abre la posibilidad de marcar la diferencia entre elementos que compartan el mismo nombre pero no los mismos significados y viceversa.

ESTRUCTURA DE UN ESQUEMA
titulo.xsd <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema elementFormDefault="qualified"> <xsd:element name=TITULO type=xsd:String/> </xsd:schema>
xmlns: es una palabra reservada en xsd, que indica al parser que este elemento es una declaracin de un espacio de nombres.

<xsd:schema> este elemento se utiliza como elemento raz del documento y acta como contenedor del resto del contenidodel esquema Los prefijos: xsd: o xs: son usados por convencin para denotar el espacio de nombre del XML Schema, aunque cualquier otro prefijo podra ser usado Inicio0.xsd

xmlns:xsd

todos los elementos en el esquema tienen el prefijo xsd:, el cual est asociado al espacio de nombre del XML Schema a travs de la declaracin xmlns:xsd.
Atributo elementFormDefaut: qualified: los elementos de un documento XML instancia de un esquema debern ir todos precedidos de un prefijo del namespace (a menos que haya namespace por defecto) unqualified: slo llevar prefijo el elemento raz, y los elementos hijo lo heredern (salvo que se les indique expresamente otro prefijo) Atributo attributeFormDefault: unqualified: en los atributos no hace falta indicar un prefijo (salvo que difiera del elemento en el que se encuadran), ya que su namespace ser el mismo del elemento. qualified: en los atributos se debe incluir siempre el prefijo del namespace. Ir a diapositiva 25

ESPACIOS DE NOMBRES EN ESQUEMAS

Tengo una lista de clientes y otras de empleados y quiero guardar en un documento XML los clientes y el empleado que los atiende.
<?xml version="1.0"?> <clientes> <nombre>Juan</nombre> <nombre>Luis</nombre> ... </clientes> <?xml version="1.0"?> <empleados> <nombre>Juana</nombre> <nombre>Luisa</nombre> ... </empleados>

Cmo distinguir <nombre> del cliente de <nombre> del empleado?


<?xml version="1.0"?> <clientes> <nombre>Juan</nombre> <nombre>Juana</nombre> <!-- cual? --> ... </clientes>

ERROR!

Solucin

Solucin: Asociar un alias a los elementos de un espacio de nombres dentro de un mbito. xmlns:alias define alias en el mbito de un elemento.
Definimos un namespace. Debe ser nica y se suele utilizar una URL

<?xml version="1.0"?> <clientes-empleados xmlns:clientes="http://www.una-url.com/clientes/" xmlns:empleados="http://www.otra-url.com/empleados/"> <clientes:nombre>Juan</clientes:nombre> ... <empleados:nombre>Juana</empleados:nombre> ... </clientes-empleados>

Son 2 etiquetas distintas NOTA: Las URIs slo se utilizan para que el nombre sea nico, no son enlaces, ni tienen que contener informacin

PAPEL DE LOS ESPACIOS DE NOMBRES

W3C XML Schema intenta superar las limitaciones de las DTDs con respecto a ellos. W3C XML Schema asocia un espacio de nombres a todos los objetos (elementos, atributos, tipos simples, complejos, ...) definidos en un schema. Definir un namespace por defecto para un elemento nos evita tener que usar prefijos en todos los elementos hijo. La sintaxis es: <xmlns="namespaceURI">.

PAPEL DE LOS ESPACIOS DE NOMBRES

Hay dos formas distintas de declarar espacios de nombres: declaracin explcita se declara con un prefijo, y todos los nombres de elementos y atributos que estn asociados con el espacio de nombre debern utilizar el prefijo como parte de sus nombres cualificados resultan tiles cuando se quiere crear un documento que se apoya en mltiples espacios de nombre declaracin predeterminada (namespace por defecto) se declara sin un prefijo, y se hace referencia a todos los nombres de atributos y elementos que haya en su mbito con nombres no cualificados, y se presupone que estos se encuentran en el espacio de nombre.

Los prefijos no tienen que coincidir en el Schema y en los documentos instancia, slo tienen que coincidir los espacios de nombres a los que se refieren. De hecho, uno podra usar prefijos y el otro podra usar el espacio de nombres por defecto.

DECLARACION DE UN ESQUEMA
Hay dos maneras de declarar un esquema en un documento XML instancia de un esquema: A) Si se quiere que los elementos del documentos instancia referencien a un nico esquema <?xml version="1.0"?> <TITULO xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocation=titulo.xsd"> CURSO XML </TITULO>

B) Si se quiere que los elementos del documento instancia puedan referenciar a uno o varios espacios de nombres <?xml version="1.0"?> <TITULO xmlns=http://igae.pap.meh.es/xml/titulo " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation=http://igae.pap.meh.es/xml/titulo http://igae.pap.meh.es/xml/titulo.xsd> CURSO XML </TITULO> El elemento raz slo puede tener un atributo xsi:schemaLocation, y por tanto si hubiera varios espacios de nombres en el esquema, en ese atributo se recogeran todas las parejas URI_del espacio_de_nombre / URL (los dos componentes de la pareja se separan con un espacio en blanco, al igual que las parejas).

En el caso B, es necesario que el fichero .xsd del esquema defina un espacio de nombre destino mediante targetnamespace <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema xmlns= http://igae.pap.meh.es/xml/titulo targetNamespace= http://igae.pap.meh.es/xml/titulo elementFormDefault="qualified">

El atributo targetNamespace (que es una URI) permite especificar el espacio de nombres para el cual un esquema define componentes.
Hay que declarar en el esquema un espacio de nombres igual que el valor del atributo targetNamespace del XML, con o sin prefijo, segn se quiera o no anteponer ste a los tag de xml.

Espacios de nombres: mbito y validacin

Si definimos el espacio de nombres en el elemento raz del documento, ste afecta a todos los elementos del documento. Si lo definimos en un elemento cualquiera, slo afecta a l mismo y a todos sus elementos hijos. Se pueden cualificar atributos, pero no tiene casi utilidad.

COMPOSICION DE ESQUEMAS

Si la mayora de la informacin que se necesita en un esquema ya est contenida en otro fichero XSD, no tiene sentido duplicarla en el resto de ficheros que la usen, ya que adems se produciran problemas cuando haya que modificar una parte de un esquema que se repita en otros. Para importar un fichero de esquema XSD en otro fichero se utiliza el elemento <include>, si ambos ficheros tienen el mismo espacio de nombres de destino: <include schemaLocation=ficheroejemplo.xsd/>

Para importar un fichero de esquema XSD, con un espacio de nombres de destino diferente, en otro fichero XSD, se usa el elemento <import>: <import namespace=espacio_de_nombres" schemaLocation=URI_del_esquema_XSD"/>
El atributo namespace es opcional. Su espacio de nombres ha de ser el del targetNamespace del esquema que importa.

Inclusin de Esquemas

Importacin de Esquemas

Redefinicin de Esquemas

En un proyecto en el que se crean varios esquemas, debemos dar a cada esquema un targetNamespace diferente, o hay que dar a todos los esquemas de la misma targetNamespace, o deberamos algunos de los esquemas no tienen targetNamespace?
stos son los cuatro enfoques de diseo para hacer frente a este problema: [1] Diseo Espacio de nombres Heterognea: dar a cada una de esquema targetNamespace diferente [2] Diseo Espacio de nombres Homognea: dar a todos los esquemas del mismo targetNamespace [3] Diseo Camalen de Espacio de nombres: dar al esquema "principal" un targetNamespace y no dar targetNamespace para los esquemas "de apoyo" (el espacio de nombres de esquemas de apoyo se llevar-en el targetNamespace del esquema principal, justo como un camalen) [4] <redefine> slo aplicable a los diseos Namespace homogneos y Camalen

[1] Diseo Espacio de nombres heterogneos Este enfoque de diseo es para dar a cada esquema una targetNamespace diferente. En el ejemplo se presentan los tres esquemas diseados utilizando este enfoque de diseo. Observa que cada esquema tiene un targetNamespace diferente. Ejem: namespace_heterogneos [2] Diseo Espacio de nombres Homognea Este enfoque de diseo dice para crear un nico, targetNamespace paraguas para todos los esquemas. En el ejemplo se presentan los tres esquemas diseados utilizando este enfoque. Observa que todos los esquemas tienen el mismo targetNamespace. Ejem: namespace_homogneos

[3] Espacio de nombres Camalen Diseo


Este enfoque de diseo dice para dar al esquema "principal" un targetNamespace, y los esquemas de "apoyo" no tienen targetNamespace. En el ejemplo, el esquema de la empresa es el esquema principal. Los esquemas persona y de productos estn apoyando al esquema empresa. Hay dos cosas a tener en cuenta acerca de este enfoque de diseo: a) En primer lugar, como se muestra en el ejemplo, un esquema es capaz b) En segundo lugar, observa las caractersticas de como camalen van en los esquemas sin targetNamespace: "Efecto camalen" ... Este es un trmino acuado por Henry Thompson para describir la capacidad de los componentes en un esquema sin targetNamespace tomar-en el espacio de nombres de otros esquemas. Ejem: namespace_camaleon

de acceder a los componentes en esquemas que no tienen targetNamespace, utilizando <include>.

[4]<redefine> slo aplicable a los diseos Namespace homogneos y Camalen El elemento <redefine> se utiliza para permitir el acceso a los componentes en otro esquema, mientras que al mismo tiempo da la capacidad de modificar cero o ms de los componentes. Por lo tanto, el elemento <redefine> tiene una doble funcionalidad: lo hace un <include> implcita. Por lo tanto, permite el acceso a todos los componentes en el esquema de referencia que le permite redefinir cero o ms de los componentes en el esquema de referencia, es decir, ampliar o restringir los componentes En el ejemplo, supongamos que desea utilizar TipoProducto en producto.xsd. Sin embargo, quisiera extender TipoProducto para incluir un identificador de producto. He aqu cmo hacerlo usando redefine.

Ejem: namespace_redefine

Claves y Unicidad

Los DTDs proporcionaban el atributo ID para marcar la unicidad (un valor ID era nico en todo el documento). XML Schema tiene ms posibilidades:
Indicar que un elemento es nico (unique) Definir atributos nicos Definir combinaciones de elementos y atributos como nicos Distincin entre unicidad y claves (key)
Clave

= adems de ser nico, debe existir y no puede ser nulo.

Declarar el rango de un documento en el que algo es nico

Claves y Unicidad

Referencias a Claves

Limitaciones DTD

No utilizan un modelo de contenido abierto, no tolerando elementos no definidos. Tipos de datos limitados - los DTDs proveen tipos de datos muy limitados:

Los DTDs no usan sintaxis XML Es difcil definir rangos o conjuntos


<!ATTLIST fecha diaDeLaSemana (lunes | martes | mircoles | jueves | viernes | sbado | domingo) #IMPLIED>

Limitaciones DTD

Sin Subclases DTD no permiten describir las estructuras de datos comunes en una definicin de clase y capturar todas las variaciones en subclases.
El orden de los hijos es demasiado rgido - los DTD requieren: Listar todos los elementos hijos en el orden en que deben ocurrir <!ELEMENT P (A, B+, C?)> Sin soporte de espacio de nombres Para controlar la validez, debemos mantener los prefijos del documento XML en sincronizacin con el DTD Limitadas formas de expresar repeticiones El elemento B debe ocurrir exactamente 15 veces: <!ELEMENT P (A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,C)>

Ventajas sobre las DTD

Son documentos XML se pueden procesar como cualquier otro documento XML Soportan tipos de datos se pueden definir elementos enteros, de coma flotante, fechas, strings, etc. Son extensibles se pueden crear nuevos tipos de datos. Mecanismos de Orientacin a Objetos Permiten extender o restringir un tipo previamente definido Tiene ms poder de expresin se puede especificar, por ejemplo, que cierto valor no tenga ms de 2 caracteres.

XML versus DTD

Documento XML
<?xml version="1.0"?> <!DOCTYPE date SYSTEM "date.dtd"> <date> <day>14</day> <month>September</month> <year>2003</year> <weekday>Sunday</weekday> </date>

Document Type Definition (DTD)

<!ELEMENT date (day, month, year, weekday?)> <!ELEMENT day (#PCDATA)> <!ELEMENT month (#PCDATA)> <!ELEMENT year (#PCDATA)> <!ELEMENT weekday (#PCDATA)>

XML Schemas

La propuesta inicial de Microsoft dio lugar a los llamados


esquemas XDR

Posteriormente, el W3C dise un modelo de esquemas que es la propuesta oficial y la que debemos conocer
(llamados esquemas XSD)

XSD se public como una recomendacin el 31 de marzo del 2001 (se considera oficial desde mayo) XSD es ms complejo que otras alternativas anteriores, pero supuso un importante paso hacia adelante en la estandarizacin de XML

XML Schemas

Es un lenguaje de esquema utilizado para describir la estructura y las restricciones de los contenidos de los documentos XML de una forma muy precisa. Desarrollado por W3C (World Wide Web Consorcium) Son una sintxis alternativa para las DTDs, propuesta inicialmente por Microsoft, ArborText, Inso, etc. Utilizan la sintxis propia de XML Ventajas: Fciles de aprender (se usa tambin XML) Soportan tipos de datos: numricos, fechas Procesables igual que los documentos XML

Qu encontramos en un esquema XML

Un esquema XML define la estructura vlida 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 Cmo se pueden anidar los elementos (padres e hijos) El orden en el que deben aparecer los elementos hijos de un mismo padre El nmero permitido de elementos hijos Si un elemento puede ser vaco o no Tipos de datos para elementos y atributos Valores por defecto y fijos para elementos y atributos

XML Schemas

XML Referenciando a Schema

Ejemplo

Ejemplo

XML Schema & XML

inicio1.xsd

Schema XML: caractersticas


Son documentos XML. Soportan tipos de datos.

Soportan namespaces.
Permiten definir nuevos tipos de datos y restricciones sobre los valores de un elemento. Ofrecen mayor precisin que los DTDs.

Otras ventajas de XML Schemas

Mayor precisin en la definicin de tipos de datos mediante formatos y facetas o restricciones.


Por ejemplo, la fecha:
<date type="date">1999-03-11</date> es el 11 de marzo o el 3 de noviembre?

Los esquemas se definen como documentos XML, en un documento aparte con extensin .XSD En los documentos XML que se basen en ese esquema, incluiremos una referencia al archivo .XSD

Estructura del Documento Schema

Esquemas XML : elemento schema

Los elementos utilizados en la creacin de un esquema proceden del espacio de nombres: http://www.w3.org/2001/XMLSchema Con el uso de Esquemas se produce un doble proceso de validacin : un documento XML se valida respecto al Esquema y ste a su vez es un documento que se valida de acuerdo con las reglas del analizador de Esquemas. El elemento schema es el elemento raz del documento en el que se define el esquema:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> </xsd:schema>

Comentarios en Schema
XML-Schema ofrece dos formas de insertar comentarios. Siempre dentro del elemento xs:annotation

xs:documentation: es la forma de introducir documentacin de cdigo. xs:appinfo: est orientada a pasar informacin extra a las aplicaciones que hagan uso del Schema.
Pueden incluirse en cualquier parte del XML_Schema.

Mejoran la legibilidad (humana) del cdigo. <xs:annotation> <xs:documentation> texto </xs:documentation> </xs:annotation> Tambin se pueden utilizar los comentarios de XML. <!-- Comentario --> Es preferible utilizar el tipo de comentarios propios de XML-Schema. Se pueden estructurar. Se pueden procesar como un documento XML.

<xsd:annotation> Representa un elemento opcional de nivel raz ("top level") empleado para colocar comentarios generales sobre un Schema, el trmino nivel raz ("top level") se refiere a que ste debe ser colocado inmediatamente despus del elemento <xsd:schema>. Anidado dentro de <xsd:annotation> deben estar los elementos <xsd:appInfo> y <xsd:documentation> que definen los comentarios en s, el uso de estos elementos es descrito en la siguiente tabla :

DECLARACION DE UN ELEMENTO : <xsd:element name="nombreElemento type="tipoSimple/tipoCompuesto" minOccurs="valor maxOccurs="valor"/>


El valor por defecto de minOccurs y maxOccurs es 1 Tipos: simples y tipos complejos tipos simples : no contienen elementos ni atributos .slo contienen datos estos son algunos de los tipos simples ms comunes -xsd:string, xsd:integer, xsd:positiveInteger, xsd:int, xsd:long, xsd:short, xsd:decimal, xsd:float, xsd:double, xsd:boolean, xsd:time, xsd:date, ... tipos complejos : pueden contener elementos, atributos y texto los elementos se declaran utilizando el elemento <xsd:element> los atributos se declaran utilizando el elemento <xsd:attribute> se definen utilizando el elemento <xsd:complexType> este elemento puede tener los siguientes subelementos (Indicadores de orden) <xsd:sequence>, xsd:choice>, <xsd:all>

TIPOS DE ELEMENTOS

Tipos Complejos vs Simples

Pueden declararse 2 tipos: Complejos: Pueden contener sub-elementos y atributos. Simples: No contienen sub-elementos ni atributos Pueden aparecer dentro de elementos o en valores de atributos

complejos
<alumno dni="9873435"> <nombre>Jose</nombre> <apellidos>Bueno</apellidos> </alumno>

simples

Elementos complejos

Son elementos que contienen a otros elementos hijos, o que tienen atributos Se suelen dividir en 4 tipos:
Elementos vacos Elementos no vacos con atributos Elementos con elementos hijos Elementos con elementos hijos y con texto o valor propio (como el contenido mixto de las DTD)

Elementos complejos

Ejemplos:
<product pid="1345"/> <food type="dessert">Ice cream</food> <description>
Sucedi el <date>03.03.99</date> .... </description>

<employee>

<firstname>John</firstname> <lastname>Smith</lastname>

</employee>

Declarar elementos complejos

Para definir elementos complejos se utiliza la siguiente sintaxis:

<xsd:element name="empleado"> <xsd:complexType> <xsd:sequence> <xsd:element name=nombre type="xsd:string"/> <xsd:element name="apellidos" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element>

Ejemplo que vemos la equivqlencias con la DTD:

Ejem0.xsd

Declarar elementos complejos

Podemos usar otra sintaxis para reutilizar la definicin de los elementos hijos en varios elementos:

<xsd:element name="empleado" type="personinfo"/> <xsd:element name=estudiante type="personinfo"/> <xsd:complexType name="personinfo"> <xsd:sequence> <xsd:element name=nombre" type="xsd:string"/> <xsd:element name=apellidos" type="xsd:string"/> </xsd:sequence> </xsd:complexType>
reutilizar.xsd

Declarar elementos complejos

Para declarar un elemento vaco con atributos, se utilizar la siguiente sintxis:

<xsd:element name="producto"> <xsd:complexType> <xsd:attribute name=fruta" type="xsd:positiveInteger"/> </xsd:complexType> </xsd:element> ..........................................


<producto fruta="1345" />

vacioconatr.xsd

Declarar elementos complejos

Qu pasa si queremos que un elemento pueda tener atributos, pero no elementos hijo? Existe una forma de hacer esto, utilizando los elementos xsd:simpleContent y xsd:extension. Para declarar un elemento no vaco con atributos, y sin elementos hijos, se utilizar la siguiente sintxis:

<xsd:element name="lugar"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:integer"> <xsd:attribute name="pais" type="xsd:string"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element>
Vacioconatr0.xsd Vacioconatr0.xsd

Declarar elementos complejos

el elemento puede contener tanto datos carcter como elementos hijo.


Para declarar un elemento con contenido mixto, basta con aadir un atributo mixed al elemento xsd:complexType:

<xsd:element name=persona"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element name="nombre" type="xsd:string"/> <xsd:element name=hijos" type="xsd:positiveInteger"/> <xsd:element name=fecha_nac" type="xsd:date"/> </xsd:sequence> </xsd:complexType> </xsd:element>

Declarar elementos complejos

La declaracin anterior permitira un texto como el siguiente:


<persona> Nombre: <nombre>Juan Perez</nombre> Nmero de hijos: <hijos>2</hijos> Fecha nacimienrto: < fecha_nac >2001-07-13</ fecha_nac> </persona>

Elemmixto.xsd

Declarar elementos complejos: Indicadores

En los ejemplos anteriores hemos utilizado el elemento xsd:sequence como elemento hijo del elemento xsd:complexType

xsd:sequence indica que los elementos anidados en l deben aparecer en un orden determinado

Los esquemas XML nos ofrecen otras alternativas, adems de xsd:sequence, para indicar cmo se deben tratar los elementos que aparecen anidados en un elemento complejo
Las opciones o indicadores son: xsd:all y xsd:choice

Declarar elementos complejos: Indicador xsd:all

El indicador xsd:all indica que los elementos que contiene pueden aparecer en cualquier orden, pero como mximo slo una vez.

<xsd:element name="persona"> <xsd:complexType> <xsd:all> <xsd:element name="nombre" type="xsd:string"/> <xsd:element name="apellido1" type="xsd:string"/> <xsd:element name="apellido2" type="xsd:string"/> </xsd:all> </xsd:complexType> </xsd:element>

Elemall.xsd

Declarar elementos complejos: Indicador xsd:choice

El indicador xsd:choice Permite que uno y solo uno de los elementos contenidos en el grupo seleccionado est presente en el elemento contenedor. El elemento xsd:choice puede incluir opcionalmente los atributos minOccurs y maxOccurs, para especificar el mnimo y mximo nmero de elementos hijos que pueden incluirse en el documento.

<xsd:element name="persona"> <xsd:complexType> <xsd:choice> <xsd:element name=nombre" type="xsd:string"/> <xsd:element name="lapellidos" type="xsd:string"/> </xsd:choice> </xsd:complexType> </xsd:element>
Elemchoice.xsd

Declarar elementos complejos: Indicadores maxOccurs y minOccurs

Estos indicadores se utilizan para indicar el nmero mximo y mnimo de veces que puede aparecer un elemento hijo de un elemento complejo El atributo maxOccurs puede tomar el valor unbounded, que indica que no existe ningn lmite

<xsd:element name="persona"> <xsd:complexType> <xsd:sequence> <xsd:element name=nombre_completo" type="xsd:string"/> <xsd:element name=nombre_hijo" type="xsd:string" maxOccurs="10"/> </xsd:sequence> </xsd:complexType> </xsd:element>

El modelo de contenido ANY


En esquemas XML tambin contamos con un modelo de contenido ANY, que permite incluir elementos no declarados inicialmente en el esquema. A travs de <xsd:any> se puede indicar la presencia de cualquier tipo de elemento; el fragmento indica que dentro del elemento persona una vez que se encuentre el elemento apellido puede existir cualquier elemento adicional.

<xsd:element name="persona"> <xsd:complexType> <xsd:sequence> <xsd:element name="nombre" type="xsd:string"/> <xsd:element name="apellido" type="xsd:string"/> <xsd:any minOccurs="0"/> </xsd:sequence> </xsd:complexType> </xsd:element>

Elemany.xsd

El modelo de contenido ANY - atributos

Tambin contamos con un elemento que permite extender el nmero de atributos de un elemento:

<xsd:element name="person"> <xsd:complexType> <xsd:sequence> <xsd:element name="firstname" type="xsd:string"/> <xsd:element name="lastname" type="xsd:string"/> </xsd:sequence> <xsd:anyAttribute/> </xsd:complexType> </xsd:element>

Tipos derivados por extensin

En la declaracin de elementos complejos, es posible utilizar un mecanismo de herencia para reutilizar o extender elementos definidos con anterioridad (ver la siguiente pgina)

Ejem4.xsd

<xsd:element name="employee" type="fullpersoninfo"/> <xsd:complexType name="personinfo"> <xsd:sequence> <xsd:element name="firstname" type="xsd:string"/> <xsd:element name="lastname" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="fullpersoninfo"> <xsd:complexContent> <xsd:extension base="personinfo"> <xsd:sequence> <xsd:element name="address" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="country" type="xsd:string"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType>

ELEMENTOS GLOBALES

Para facilitar la legibilidad de los XML Schemas y reutilizar definiciones de otros esquemas, nos puede ser til crear un elemento global, y hacer referencias al mismo.

Los elementos globales son elementos que son hijos inmediatos del elemento schema. Los elementos locales son elementos anidados dentro de otros elementos.
Un elemento global : tiene que estar declarado como un subelemento del elemento <xsd:schema>, pero nunca como parte de un elemento de tipo complejo no puede contener referencias es decir no pueden albergar el atributo ref no puede indicar el nmero de ocurrencias que tiene que aparecer un elemento. Esta es la sintaxis de una declaracin local que hace referencia a un elemento global <xsd:element ref="nombreElementoGlobalYaExistente" minOccurs="valor"> el atributo ref hace referencia a un elemento global (que puede estar definido en otro fichero xsd, al que se referencia mediante un espacio de nombres) en la declaracin local, si queremos podemos indicar la cardinalidad del elemento global con los atributos (Indicadores de cantidad) minOccurs y maxOccurs

EJEMPLO CON REFERENCIAS A ELEMENTOS GLOBALES:

Ejem3.xsd

ELEMENTOS GLOBALES
EJEMPLO SIN REFERENCIAS A ELEMENTOS GLOBALES:
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema targetNamespace=http://igae.meh.es/cancion elementFormDefault="qualified">
<xsd:element name=CANCION type=Tipocancion/> <xsd:complexType name=Tipocancion> <xsd:sequence> <xsd:element name=NOMBRE type=xsd:string> <xsd:element name=AUTOR type=xsd:string> </xsd:sequence> </xsd:complexType> </xsd:schema>

Ahora vamos a definir otro esquema que agregar a sus elementos y atributos locales
otros procedentes del esquema : http://igae.meh.es/cancion. Esto se hace mediante un elemento xsd:import

EJEMPLO CON REFERENCIAS A ELEMENTOS GLOBALES: <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema xmlns:cc=http://igae.meh.es/cancion elementFormDefault="qualified"> <xsd:import namespace=http://igae.meh.es/cancion schemaLocation="http://igae.meh.es/cancion.xsd" /> <xsd:element name=DISCO"> <xsd:complexType> <xsd:sequence> <xsd:element ref=cc:CANCION maxoccurs=unbounded/> <element name=EDITORIAL type=xsd:string/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> Elem_globales.xsd

Esquemas XML : elementos simples

Un elemento simple es un elemento que slo puede contener texto (cualquier tipo de dato), pero no a otros elementos ni atributos.
Para definir un elemento simple, utilizamos la sintxis: <xsd:element name="xxx" type="yyy"/>

Ejemplos: <xsd:element name=apellido type="xs:string"/> <xsd:element name=edad" type="xs:integer"/> <xsd:element name=fecNac" type="xs:date"/>
Los tipos de datos ms utilizados son: xsd:string, xsd:decimal , xsd:integer , xsd:boolean , xsd:date , xsd:time Un elemento simple puede tener un valor por defecto y un valor fijo Esto se indica mediante los atributos default y fixed <xsd:element name="color" type="xsd:string" default="red"/>

Tipos de datos simples

Tipos de datos simples

Tipos de datos simples

Expresiones Regulares

Ejem2.xsd

Derivacin de Tipos Simples


Existen tres mecanismos de derivacin:

Por enumeracin (lista): el rango se describe explcitamente como la lista de valores vlidos.
Por unin : mediante unin de dos o ms tipos de datos. Por restriccin: se restringe el rango de valores del tipo de datos.

El mecanismo de extensin slo se aplica a los tipos de datos complejos.

Tipo Simple derivado Lista

Las listas son siempre tipos derivados que permiten varios valores en el contenido de un elemento.
Las listas son similares a la faceta enumeration, pero permiten incluir valores mltiples, separados mediante espacios. Las listas permiten elegir el tipo de datos de los valores en la lista, mediante el atributo "itemType, incluyendo tipos definidos por el usuario. Tambin se pueden aplicar otras facetas, como length, etc. Mediante <xsd:list> es posible definir que un tipo de dato simpleType que cumpla con la caractersticas de una lista; el fragmento siguiente demuestra la definicin de dos tipos de datos (simpleType) uno para una lista de nmeros decimales y otro para una lista de String's, ambas declaraciones les sigue la posible definicin del elemento en XML .

Los valores de la lista se separan mediante blancos.

<xs:simpleType name=listaFechas> <xs:list itemType =xs:date/> </xs:simpleType> <xs:element name=listaCumpleaos type=listaFechas>

-----------------------------------------<listaCumpleaos> 1975-03-25 1999-05-03 2001-09-27 </listaCumpleaos> <xsd:simpleType name="precios">

<xsd:list itemType="xsd:decimal"/>
</xsd:simpleType> <xsd:element name="historiaprecios" type="precios"> ________________________ <historiaprecios> 5.32 6.23 6.86 7.01 </historiaprecios> <xsd:simpleType name="valuelist"> <xsd:list itemType="xsd:string"/> </xsd:simpleType> <xsd:element name="nombres" type="valuelist"> __________________ <stringvalues> Andrea Bertha Carla Daniela Esther </stringvalues>

Ejemlist.xsd

Tipo Simple derivado Unin

Mediante <xsd:union> es posible definir un nuevo tipo de datos (simpleType) a partir de la unin de otros dos tipo de datos (simpleType).

Se componen de al menos dos tipos de datos alternativos.


El orden en que se definen los TD en la unin es significativo: los datos se intentan validar en ese orden.

<simpleType name=NumRomano> <restriction base=xs:string> <enumeration value=I/> <enumeration value=II/> <enumeration value=III/> </restriction> </simpleType>

Ejemplo de Unin
<simpleType name=CapituloRom> <list itemType=NumRomano/> </simpletType> <simpleType name=CapituloDec> <list itemType=xs:integer/> </simpletType> <simpleType name=union.Capitulos> <union memberTypes=CapituloRom CapituloDec/> </simpletType> . <numerosCap>1 2 3 4 5</numerosCap> <numerosCap>I II III</numerosCap> elemenunion0.xsd elemenunion.xsd

ELEMENTOS Y ATRIBUTOS EN ESQUEMAS

A. EL ELEMENTO ELEMENT
Como se ha adelantado, los elementos que van a aparecer en un documento instancia deben aparecer en el Esquema con un elemento element, cuyos atributos ms significativos son : maxOccurs y minOccurs : determinan el nmero mximo ( mnimo ) de veces que el elemento puede aparecer en un documento instancia; obviamente, slo se aplican a atributos de elementos de tipo real. name : especifica el nombre usado para referenciar un tipo de elemento tanto en el resto del Esquema como en un documento instancia. ref : hace referencia a un elemento global ya declarado. Es mutuamente excluyente con name. type : especifica el tipo de dato del elemento, con un valor nombre referido a un tipo global, simple o complejo.

Ejemplo : <xsd:element name=algunElemento type=xs:string/>


La mayora de elementos que se usan tienen elementos locales ( tanto simpleType como complexType ) o una referencia a un tipo global ( simple o complejo ) a travs del atributo type. siendo las opciones de contenido para el elemento element : annotation, simpleType y complexType.

ELEMENTOS Y ATRIBUTOS EN ESQUEMAS

B. EL ELEMENTO ATTRIBUTE
En un Esquema XML los atributos se declaran por medio del elemento attribute que a su vez tiene una serie de atributos que ponen restricciones a las propiedades de esta declaracin, cuya panormica depende de su ubicacin dentro del Esquema ( como se sabe un atributo global debe declararse como hijo del elemento schema ).
Dado el fragmento : <xsd:schema> <xsd:attribute name=miAtributo/> <xsd:element name=algunElemento type=xs:string/> </xsd:schema> el atributo miAtributo es global, y puede referenciarse en cualquier elemento o grupo de atributos del documento. En el caso que se quiera declarar un atributo de forma local, ste se coloca como hijo de la declaracin del elemento correspondiente.

Ejemplo
<xsd:schema> <xsd:element name=algunElemento> <xsd:complexType> <xsd:attribute name=miAtributo/> </xsd:complexType> </xsd:element> </xsd:schema>

Los atributos de un elemento son muy parecidos a los vistos para element. La diferencia ms importante es que los atributos son siempre de tipo simple. Un atributo especfico del elemento attribute es use, que da la posibilidad de limitar el uso del atributo en un documento instancia, pudiendo tomar los valores : optional, prohibited, y required. Sealar que en los atributos como norma se aplica el valor por defecto cuando los atributos no quedan determinados.

Esquemas XML :atributos (1)

Los atributos se deben declarar de forma similar a los elementos simples.

Si un elemento puede ir acompaado de atributos, el elemento se deber declarar como un elemento complejo.
Un atributo se declara de la siguiente forma:

<xsd:attribute name="xxx" type="yyy"/>


Ejemplo:

<xsd:attribute name=idioma" type="xs:string"/>

Los atributos tienen un tipo de dato:

xsd:string, xsd:decimal, xsd:integer, xsd:boolean, xsd:date, xsd:time

Esquemas XML atributos (2)

Los atributos pueden tener valores por defecto y valores fijos:


<xsd:attribute name=idioma" type="xsd:string" default=ES"/>

Por defecto, los atributos son opcionales.

Para indicar que un atributo debe ser obligatorio, se debe aadir a su declaracin en el esquema es atributo use
<xsd:attribute name="lang" type="xsd:string" use="required"/>

El atributo use puede tomar el valor optional si el atributo no es obligatorio (opcin por defecto)
Ejem1.xsd

Esquemas XML : facetas o restricciones

Las facetas o restricciones permiten restringir el valor que se puede dar a un elemento o atributo XML. Mediante restricciones podemos indicar que un valor debe estar comprendido en un rango determinado, debe ser un valor de una lista de valores cerrada, o debe ser mayor o menor que otro valor

Tipos de facetas: Valor comprendido en un rango El valor est restringido a un conjunto de valores posibles Restringir el valor de un elemento a una serie de caracteres

Longitud de los valores de los elementos

http://xml.osmosislatina.com/curso/validar/elementos_schema.htm

https://sites.google.com/site/todoxmldtd/home

Derivacin por restriccin: mediante patrones


. \d \D \s \S * ? + [abc] [0-9] (xy) | X{5} x{5,} X{5,8} (xyz){2}

= = = = = = = = = = = = = = = =

cualquier carcter. un dgito un no-dgito cualquier carcter blanco (nueva-lnea, tab, retorno de carro). cualquier carcter no-blanco. cardinalidad 0..N opcionalidad cardinalidad 1..N slo uno del grupo rango de valores y conjuncin operador or lgico 5 ocurrencias de x al menos 5 ocurrencias de x mnimo 5 y mximo 8 ocurrencias de x dos ocurrencias de xyz

Derivacin mediante patrones: Ejemplo


<xs:simpleType name=TipoCdigoPostal> <xs:restriction base=xs:string> <xs:pattern value=\d{5}(-\d{4})?/> </xs:restriction> </xs:simpleType> <xs:element name=cdigoPostaltype=TipoCdigoPostal> -----------------------------------------<cdigoPostal>12345-9876</cdigoPostal> <cdigoPostal>31415</cdigoPostal>

Ejemplo de Unin y restricciones

Tipos Simples Annimos

Pueden definirse tipos internamente sin nombre. No se pueden usar en la definicin de otro elemento.

<xs:element name=cdigoPostal> <xs:simpleType> <xs:restriction base=xs:string> <xs:pattern value=\d{5}(-\d{4})?/> </xs:restriction> </xs:simpleType> </xs:element>

Restriccin por rangos


xs:minExclusive xs:maxInclusive xs:maxExclusive

<xs:simpleType name=fechaCreacin> <xs:restriction base=xs:date> <xs:nimInclusive value=2001:09:27/> </xs:restriction> </xs:simpleType>

Otros tipos de restricciones

Limitar la longitud de una cadena:


<xs:length value=x> <xs:maxLength value=m> <xs:minLength value=n>

Limitar el nmero de dgitos de una cifra:


<xs:precision value=n> : mximo nmero de dgitos totales.

<xs:scale value=m>

: mximo numero de dgitos a la derecha del punto decimal.

Restriccin por enumeracin


En la instancia, los valores deben estar separados por blanco.

<xs:simpleType name=Paises> <xs:restriction base=xs:string> <xs:enumeration value=Espaa/> <xs:enumeration value=Francia/> <xs:enumeration value=Portugal/> <xs:enumeration value=Italia/> </xs:restriction> </xs:simpleType> <pais>Espaa</pais>

Esquemas XML restricciones (ej. 1)

<xsd:element name="age"> <xsd:simpleType> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="100"/> </xsd:restriction> </xsd:simpleType> </xsd:element>

Esquemas XML restricciones (ej. 2)


<xsd:element name="car"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Audi"/> <xsd:enumeration value="Golf"/> <xsd:enumeration value="BMW"/> </xsd:restriction> </xsd:simpleType>
</xsd:element>

Esquemas XML restricciones (ej. 2, alt.)


<xsd:element name="car" type="carType"/> <xsd:simpleType name="carType"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Audi"/> <xsd:enumeration value="Golf"/> <xsd:enumeration value="BMW"/> </xsd:restriction> </xsd:simpleType>

Esquemas XML restricciones (ej. 3)


<xsd:element name="letter"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="[a-z]"/> </xsd:restriction> </xsd:simpleType> </xsd:element>
En este ejemplo, el elemento letter debe tomar como valor 1 letra minscula (slo 1)

Esquemas XML restricciones (ej. 4)


<xsd:element name="iniciales"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/> </xsd:restriction> </xsd:simpleType> </xsd:element>
En este ejemplo, el elemento iniciales debe tomar como valor tres letras maysculas o minscula (slo 3)

Esquemas XML restricciones (ej. 5)


<xsd:element name=opcion"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="[xyz]"/> </xsd:restriction> </xsd:simpleType> </xsd:element>
En este ejemplo, el elemento opcion debe tomar como valor una de estas letras: x, y o z

Esquemas XML restricciones (ej. 6)

<xsd:element name=digitos"> <xsd:simpleType> <xsd:restriction base="xsd:integer"> <xsd:pattern value="[0-9][0-9][0-9][0-9][0-9]"/> </xsd:restriction> </xsd:simpleType> </xsd:element>

Esquemas XML restricciones (ej. 7)

<xsd:element name="letras"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="([a-z])*"/> </xsd:restriction> </xsd:simpleType> </xsd:element>

Esquemas XML restricciones (ej. 8)

<xsd:element name="password"> <xsd:simpleType> <xsd:restriction base="xs:string"> <xsd:pattern value="[a-zA-Z0-9]{8}"/> </xsd:restriction> </xsd:simpleType> </xsd:element>
En este ejemplo, el valor del campo password debe ser de 8 caracteres

Esquemas XML restricciones (ej. 9)


<xsd:element name="password"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:length value="8"/> </xsd:restriction> </xsd:simpleType>
</xsd:element>
Los elementos length, minLength y maxLength permiten indicar el nmero exacto, mnimo y mximo de caracteres que puede tener un valor de un elemento.

Elementos para restricciones


enumeration
fractionDigits

Establece una lista de valores aceptados


Nmero de cifras decimales

length maxExclusive y maxInclusive


minExclusive y minInclusive maxLength y minLength pattern totalDigits whiteSpace

Nmero de caracteres obligatorios Valor mximo de un rango


Valor mnimo en un rango Nmero mximo y mnimo de caracteres permitidos Define una secuencia de caracteres permitida Nmero exacto de dgitos permitidos Indica cmo se deben de tratar los espacios en blanco

XML Schema Limitaciones

No soporta entidades. Mecanismo para crear macros <!ENTITY &texto; "Esto texto se repite muchas veces" > Es necesario seguir usando los DTDs Lenguaje de Restricciones limitado Ejemplo: Verificar valor total = suma de valores parciales? Sensibilidad al contexto limitada Por ejemplo: Especificar que el contenido depende del valor de un atributo <transporte tipo="coche"> ...</transporte> <transporte tipo="avin"> ...</transporte> Tamao de archivos XML Schema puede ser excesivo Legibilidad de las especificaciones...XML no siempre es legible Complejidad de la especificacin: Muchas situaciones/combinaciones excepcin

Prctica 1

Disear un esquema XML para crear documentos para el prstamo.


En cada documento se indicarn:

El nombre y apellidos del bibliotecario Fecha del prstamo y de devolucin Datos del lector (id, nombre, apellidos, telfono y direccin) La direccin se dividir en tipo de calle (que puede ser calle, avenida o plaza), nombre calle, nmero, piso y letra, c.p., localidad y provincia Un mximo de tres ejemplares en prstamo. Para cada uno de ellos: el nmero de registro, ttulo, autor(es) El prstamo tendr un atributo numrico que servir como identificador

Prctica 2

Modificar un nuevo esquema, de forma que no todos los elementos estn anidados, utilizando las referencias. Primero declaramos los elementos simples. Luego declararemos los elementos complejos indicando su modelo de contenido mediante atributos ref.

Prctica 3

Crear un esquema xml para codificar datos de un pedido a un proveedor. Se indicarn los datos del proveedor (nif, nombre, direccin, localidad, tlfono), datos de la biblioteca, y el listado de items que se han pedido.

Para cada item se indicar el nmero de unidades, precio, y tambin el precio total del pedido y el nmero de items.

http://www.sidar.org/recur/desdi/traduc/es/xml/xmlschema/xmlschema0es.html https://sites.google.com/site/todoxmldtd/home Ejemplos: http://xml.osmosislatina.com/curso/validar/elementos_schema.htm https://sites.google.com/site/todoxmldtd/referenciiones-xml/referencia-dexsds-xml-schema/7-definicion-de-tipos-de-datos-en-xml-schema-xsd

S-ar putea să vă placă și