04.Estructura de Los Documentos W3C Esquemas

105
Estructura de Estructura de documentos XML. W3C documentos XML. W3C Esquemas Esquemas IES Mar de Cádiz IES Mar de Cádiz Dpto. de Informática Dpto. de Informática

Transcript of 04.Estructura de Los Documentos W3C Esquemas

Page 1: 04.Estructura de Los Documentos W3C Esquemas

Estructura de documentos Estructura de documentos XML. W3C EsquemasXML. W3C Esquemas

IES Mar de CádizIES Mar de CádizDpto. de InformáticaDpto. de Informática

Page 2: 04.Estructura de Los Documentos W3C Esquemas

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.

►Es un documento XML con un vocabulario especializado

Page 3: 04.Estructura de Los Documentos W3C Esquemas

ESPACIOS DE NOMBRES EN ESQUEMASESPACIOS DE NOMBRES EN ESQUEMAS ► ESPACIOS DE NOMBRES:ESPACIOS DE NOMBRES: permiten escribir esquemas y validar permiten escribir esquemas y validar

documentos que usan elementos y atributos de múltiples documentos que usan elementos y atributos de múltiples vocabularios XML. Se utilizan los espacios de nombres para vocabularios XML. Se utilizan los espacios de nombres para evitar conflictos entre nombres de elementos o nombres de evitar conflictos entre nombres de elementos o nombres de atributos con igual nombre, pero significado distinto.atributos con igual nombre, pero significado distinto.

► Una diferencia importante entre las DTDs y Esquemas reside Una diferencia importante entre las DTDs y Esquemas reside en que éstas, como tales documentos XML, pueden usar en que éstas, como tales documentos XML, pueden usar vocabularios asociados a espacios de nombres.vocabularios asociados a espacios de nombres.

► Por lo que se abre la posibilidad de marcar la diferencia entre Por lo que se abre la posibilidad de marcar la diferencia entre elementos que compartan el mismo nombre pero no los elementos que compartan el mismo nombre pero no los mismos significados y viceversa. mismos significados y viceversa.

Page 4: 04.Estructura de Los Documentos W3C Esquemas

ESTRUCTURA DE UN ESQUEMAESTRUCTURA 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>

<xsd:schema>–este elemento se utiliza como elemento raíz del documento y

actúa como contenedor del resto del contenidodel esquema

• Los prefijos: xsd: o xs:son usados por convención para denotar el espacio de nombre

del XML Schema, aunque cualquier otro prefijo podría ser usado

Inicio0.xsd

xmlns: es una palabra reservada en xsd, que indica al parser que este elemento es una declaración de un espacio de nombres.

Page 5: 04.Estructura de Los Documentos W3C Esquemas

xmlns:xsd

– todos los elementos en el esquema tienen el prefijo “xsd:”, el cual está asociado al espacio de nombre del XML Schema a través de la declaración “xmlns:xsd”.

•Atributo elementFormDefaut: •“qualified”: los elementos de un documento XML instancia de un esquema deberán ir todos precedidos de un prefijo del namespace (a menos que haya namespace por defecto)

•“unqualified”: sólo llevará prefijo el elemento raíz, y los elementos hijo lo herederán (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

Page 6: 04.Estructura de Los Documentos W3C Esquemas

ESPACIOS DE NOMBRES EN ESQUEMASESPACIOS DE NOMBRES EN ESQUEMAS

► Tengo una lista de clientes y otras de empleados y quiero guardar en Tengo una lista de clientes y otras de empleados y quiero guardar en un documento XML los clientes y el empleado que los atiende. un documento XML los clientes y el empleado que los atiende.

► ¿Cómo distinguir <nombre> del cliente de <nombre> del empleado?¿Cómo distinguir <nombre> del cliente de <nombre> del empleado?

<?xml version="1.0"?> <clientes> <nombre>Juan</nombre> <nombre>Luis</nombre> ... </clientes>

<?xml version="1.0"?> <empleados> <nombre>Juana</nombre> <nombre>Luisa</nombre> ...

</empleados>

<?xml version="1.0"?> <clientes> <nombre>Juan</nombre>

<nombre>Juana</nombre> <!-- cual? --> ...

</clientes>

¡ERROR!

Page 7: 04.Estructura de Los Documentos W3C Esquemas

SoluciónSolución► Solución: Asociar un alias a los elementos de un espacio de nombres Solución: Asociar un alias a los elementos de un espacio de nombres

dentro de un ámbito. dentro de un ámbito. ► xmlns:alias define alias en el ámbito de un elemento. xmlns:alias define alias en el ámbito de un elemento.

Definimos un namespace. Debe ser Definimos un namespace. Debe ser

única y se suele utilizar una URL ú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 sólo se utilizan para que el nombre sea único, no son enlaces, ni

tienen que contener información

Page 8: 04.Estructura de Los Documentos W3C Esquemas

PAPEL DE LOS ESPACIOS DE NOMBRESPAPEL DE LOS ESPACIOS DE NOMBRES

► W3C XML Schema intenta superar las limitaciones W3C XML Schema intenta superar las limitaciones de las DTDs con respecto a ellos.de las DTDs con respecto a ellos.

► W3C XML Schema asocia un espacio de nombres a W3C XML Schema asocia un espacio de nombres a todos los objetos (elementos, atributos, tipos todos los objetos (elementos, atributos, tipos simples, complejos, ...) definidos en un schema.simples, complejos, ...) definidos en un schema.

► Definir un namespace por defecto para un Definir un namespace por defecto para un elemento nos evita tener que usar prefijos en todos elemento nos evita tener que usar prefijos en todos los elementos hijo. La sintaxis es: los elementos hijo. La sintaxis es: <xmlns="namespaceURI">.<xmlns="namespaceURI">.

Page 9: 04.Estructura de Los Documentos W3C Esquemas

PAPEL DE LOS ESPACIOS DE NOMBRESPAPEL DE LOS ESPACIOS DE NOMBRES

► Hay dos formas distintas de declarar espacios de nombres:

declaración explícita► se declara con un prefijo, y todos los nombres de elementos y

atributos que estén asociados con el espacio de nombre deberán utilizar el prefijo como parte de sus nombres cualificados resultan útiles cuando se quiere crear un documento que se apoya en múltiples espacios de nombre

declaración 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, sólo tienen que coincidir los espacios de nombres a los que se refieren. De hecho, uno podría usar prefijos y el otro podría usar el espacio de nombres por defecto.

Page 10: 04.Estructura de Los Documentos W3C Esquemas

DECLARACION 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>

• Hay dos maneras de declarar un esquema en un documento XML instancia de un esquema:

Page 11: 04.Estructura de Los Documentos W3C Esquemas

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 raíz sólo puede tener un atributo “xsi:schemaLocation”,y por tanto si hubiera varios espacios de nombres en el esquema, en ese atributo se recogerían 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).

Page 12: 04.Estructura de Los Documentos W3C Esquemas

•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, según se quiera o no anteponer éste a los tag de xml.

Page 13: 04.Estructura de Los Documentos W3C Esquemas

Espacios de nombres:ámbito y validación

► Si definimos el espacio de nombres en el elemento raíz del documento, éste afecta a todos los elementos del documento.

► Si lo definimos en un elemento cualquiera, sólo afecta a él mismo y a todos sus elementos hijos.

► Se pueden cualificar atributos, pero no tiene casi utilidad.

Page 14: 04.Estructura de Los Documentos W3C Esquemas

COMPOSICION DE ESQUEMAS ► Si la mayoría de la información 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 además se producirían 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.

Page 15: 04.Estructura de Los Documentos W3C Esquemas

Inclusión de Esquemas

Page 16: 04.Estructura de Los Documentos W3C Esquemas

Importación de Esquemas

Page 17: 04.Estructura de Los Documentos W3C Esquemas

Redefinición de Esquemas

Page 18: 04.Estructura de Los Documentos W3C 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 deberíamos algunos de los esquemas no tienen targetNamespace?

Éstos son los cuatro enfoques de diseño para hacer frente a este problema: [1] Diseño Espacio de nombres Heterogénea:

dar a cada una de esquema targetNamespace diferente [2] Diseño Espacio de nombres Homogénea:

dar a todos los esquemas del mismo targetNamespace [3] Diseño Camaleón 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 camaleón) [4] <redefine> -

sólo aplicable a los diseños Namespace homogéneos y Camaleón

Page 19: 04.Estructura de Los Documentos W3C Esquemas

[1] Diseño Espacio de nombres heterogéneos Este enfoque de diseño es para dar a cada esquema una targetNamespace diferente.En el ejemplo se presentan los tres esquemas diseñados utilizando este enfoque de diseño.Observa que cada esquema tiene un targetNamespace diferente.

Ejem: namespace_heterogéneos

[2] Diseño Espacio de nombres Homogénea Este enfoque de diseño dice para crear un único, targetNamespace paraguas para todos los esquemas. En el ejemplo se presentan los tres esquemas diseñados utilizando este enfoque. Observa que todos los esquemas tienen el mismo targetNamespace.Ejem: namespace_homogéneos

Page 20: 04.Estructura de Los Documentos W3C Esquemas

[3] Espacio de nombres Camaleón Diseño

Este enfoque de diseño 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 están apoyando al esquema empresa.

Hay dos cosas a tener en cuenta acerca de este enfoque de diseño:

a) En primer lugar, como se muestra en el ejemplo, un esquema es capaz de acceder a los componentes en esquemas que no tienen targetNamespace, utilizando <include>.

b) En segundo lugar, observa las características de “como camaleón” van en los esquemas sin targetNamespace:

"Efecto camaleón" ... Este es un término acuñado 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

Page 21: 04.Estructura de Los Documentos W3C Esquemas

[4]<redefine> - sólo aplicable a los diseños Namespace homogéneos y

Camaleón

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 más de los componentes.

Por lo tanto, el elemento <redefine> tiene una doble funcionalidad: lo hace un <include> implícita. Por lo tanto, permite el acceso a todos los componentes en el esquema de referencia que le permite redefinir cero o más 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í cómo hacerlo usando redefine.

Ejem: namespace_redefine

Page 22: 04.Estructura de Los Documentos W3C Esquemas

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 más posibilidades: Indicar que un elemento es único (unique) Definir atributos únicos Definir combinaciones de elementos y atributos como únicos Distinción entre unicidad y claves (key)

► Clave = además de ser único, debe existir y no puede ser nulo.

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

Page 23: 04.Estructura de Los Documentos W3C Esquemas

Claves y Unicidad

Page 24: 04.Estructura de Los Documentos W3C Esquemas

Referencias a Claves

Page 25: 04.Estructura de Los Documentos W3C Esquemas

Limitaciones DTDLimitaciones DTD ► No utilizan un modelo de contenido abierto, no tolerando No utilizan un modelo de contenido abierto, no tolerando

elementos no definidos. elementos no definidos. ► Tipos de datos limitados - los DTDs proveen tipos de datos muy Tipos de datos limitados - los DTDs proveen tipos de datos muy

limitados:limitados:

► Los DTDs no usan sintaxis XML ► Es difícil definir rangos o conjuntos

<!ATTLIST fecha diaDeLaSemana (lunes | martes | miércoles | jueves | viernes | sábado | domingo) #IMPLIED>

Page 26: 04.Estructura de Los Documentos W3C Esquemas

Limitaciones DTDLimitaciones DTD► Sin Subclases Sin Subclases

DTD no permiten describir las estructuras de datos DTD no permiten describir las estructuras de datos comunes en una definición de clase y capturar todas las comunes en una definición de clase y capturar todas las variaciones en subclases. variaciones en subclases.

► El orden de los hijos es demasiado rígido - los DTD requieren: El orden de los hijos es demasiado rígido - los DTD requieren: Listar todos los elementos hijos en el orden en que deben Listar todos los elementos hijos en el orden en que deben

ocurrir ocurrir <!ELEMENT P (A, B+, C?)> <!ELEMENT P (A, B+, C?)>

► Sin soporte de espacio de nombres Sin soporte de espacio de nombres Para controlar la validez, debemos mantener los prefijos Para controlar la validez, debemos mantener los prefijos

del documento XML en sincronización con el DTD del documento XML en sincronización con el DTD

► Limitadas formas de expresar repeticiones Limitadas formas de expresar repeticiones El elemento B debe ocurrir exactamente 15 veces: 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)><!ELEMENT P (A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,C)>

Page 27: 04.Estructura de Los Documentos W3C Esquemas

Ventajas sobre las DTDVentajas sobre las DTD

► Son documentos XML Son documentos XML se pueden procesar como cualquier otro documento XML se pueden procesar como cualquier otro documento XML

► Soportan tipos de datos Soportan tipos de datos se pueden definir elementos enteros, de coma flotante, fechas, se pueden definir elementos enteros, de coma flotante, fechas,

strings, etc. strings, etc.

► Son extensibles Son extensibles se pueden crear nuevos tipos de datos. se pueden crear nuevos tipos de datos.

► Mecanismos de Orientación a Objetos Mecanismos de Orientación a Objetos Permiten extender o restringir un tipo previamente definido Permiten extender o restringir un tipo previamente definido

► Tiene más poder de expresión Tiene más poder de expresión se puede especificar, por ejemplo, que cierto valor no tenga se puede especificar, por ejemplo, que cierto valor no tenga

más de 2 caracteres. más de 2 caracteres.

Page 28: 04.Estructura de Los Documentos W3C Esquemas

XML versus DTDXML versus DTD ► Documento XMLDocumento XML

► Document Type Definition (DTD) Document Type Definition (DTD)

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

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

<!ELEMENT month (#PCDATA)><!ELEMENT year (#PCDATA)>

<!ELEMENT weekday (#PCDATA)>

Page 29: 04.Estructura de Los Documentos W3C Esquemas

XML SchemasXML Schemas

► La propuesta inicial de Microsoft dio lugar a los llamados La propuesta inicial de Microsoft dio lugar a los llamados esquemas XDR”esquemas XDR”

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

► XSD se publicó como una recomendación el 31 de marzo del XSD se publicó como una recomendación el 31 de marzo del 2001 (se considera oficial desde mayo)2001 (se considera oficial desde mayo)

► XSD es más complejo que otras alternativas anteriores, pero XSD es más complejo que otras alternativas anteriores, pero supuso un importante paso hacia adelante en la supuso un importante paso hacia adelante en la estandarización de XMLestandarización de XML

Page 30: 04.Estructura de Los Documentos W3C Esquemas

XML SchemasXML Schemas ► Es un lenguaje de esquema utilizado para describir la Es un lenguaje de esquema utilizado para describir la

estructura y las restricciones de los contenidos de los estructura y las restricciones de los contenidos de los documentos XML de una forma muy precisa. documentos XML de una forma muy precisa.

► Desarrollado por W3C (World Wide Web Consorcium) Desarrollado por W3C (World Wide Web Consorcium)

► Son una sintáxis alternativa para las DTDs, propuesta Son una sintáxis alternativa para las DTDs, propuesta inicialmente por Microsoft, ArborText, Inso, etc.inicialmente por Microsoft, ArborText, Inso, etc.

► Utilizan la sintáxis propia de XMLUtilizan la sintáxis propia de XML

► Ventajas:Ventajas: Fáciles de aprender (se usa también XML)Fáciles de aprender (se usa también XML) Soportan tipos de datos: numéricos, fechas…Soportan tipos de datos: numéricos, fechas… Procesables igual que los documentos XMLProcesables igual que los documentos XML

Page 31: 04.Estructura de Los Documentos W3C Esquemas

Qué encontramos en un esquema XMLQué encontramos en un esquema XML

► Un esquema XML define la estructura válida para Un esquema XML define la estructura válida para un tipo de documento XML (al igual que las DTD), un tipo de documento XML (al igual que las DTD), es decir:es decir:

Los elementos que pueden aparecer en el documentoLos elementos que pueden aparecer en el documento Los atributos que pueden utilizarse junto a cada elementoLos atributos que pueden utilizarse junto a cada elemento Cómo se pueden anidar los elementos (padres e hijos)Cómo se pueden anidar los elementos (padres e hijos) El orden en el que deben aparecer los elementos hijos de El orden en el que deben aparecer los elementos hijos de

un mismo padreun mismo padre El número permitido de elementos hijosEl número permitido de elementos hijos Si un elemento puede ser vacío o noSi un elemento puede ser vacío o no Tipos de datos para elementos y atributosTipos de datos para elementos y atributos Valores por defecto y fijos para elementos y atributosValores por defecto y fijos para elementos y atributos

Page 32: 04.Estructura de Los Documentos W3C Esquemas

XML SchemasXML Schemas

Page 33: 04.Estructura de Los Documentos W3C Esquemas

XML Referenciando a SchemaXML Referenciando a Schema

Page 34: 04.Estructura de Los Documentos W3C Esquemas

EjemploEjemplo

Page 35: 04.Estructura de Los Documentos W3C Esquemas

EjemploEjemplo

Page 36: 04.Estructura de Los Documentos W3C Esquemas

XML Schema & XMLXML Schema & XML

inicio1.xsd

Page 37: 04.Estructura de Los Documentos W3C Esquemas

Schema XML: característicasSchema XML: características

► Son documentos XML. Son documentos XML.

► Soportan tipos de datos. Soportan tipos de datos.

► Soportan namespaces. Soportan namespaces.

► Permiten definir nuevos tipos de datos y Permiten definir nuevos tipos de datos y restricciones sobre los valores de un elemento. restricciones sobre los valores de un elemento.

► Ofrecen mayor precisión que los DTDs. Ofrecen mayor precisión que los DTDs.

Page 38: 04.Estructura de Los Documentos W3C Esquemas

Otras ventajas de XML SchemasOtras ventajas de XML Schemas

► Mayor precisión en la definición de tipos de datos Mayor precisión en la definición de tipos de datos mediante formatos y facetas o restricciones.mediante formatos y facetas o restricciones.

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

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

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

Page 39: 04.Estructura de Los Documentos W3C Esquemas

Estructura del Documento SchemaEstructura del Documento Schema

Page 40: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML : Esquemas XML : elemento schemaelemento schema

► Los elementos utilizados en la creación de un esquema “proceden” Los elementos utilizados en la creación de un esquema “proceden” del espacio de nombres: del espacio de nombres: http://www.w3.org/2001/XMLSchema

► Con el uso de Esquemas se produce un doble proceso de validación : Con el uso de Esquemas se produce un doble proceso de validación : un documento XML se valida respecto al Esquema yun documento XML se valida respecto al Esquema y éste a su vez es un documento que se valida de acuerdo con las éste a su vez es un documento que se valida de acuerdo con las

reglas del analizador de Esquemas. reglas del analizador de Esquemas.

► El elemento El elemento schemaschema es el elemento raíz del documento en el que se es el elemento raíz del documento en el que se define el esquema:define el esquema:

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

</xsd:schema></xsd:schema>

Page 41: 04.Estructura de Los Documentos W3C Esquemas

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

► xs:documentation: es la forma de introducir documentación de código. ► xs:appinfo: está orientada a pasar información extra a las aplicaciones que

hagan uso del Schema.

Pueden incluirse en cualquier parte del XML_Schema.

► Mejoran la legibilidad (humana) del código.<xs:annotation>

<xs:documentation>texto

</xs:documentation></xs:annotation>

► También 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.

Page 42: 04.Estructura de Los Documentos W3C Esquemas

► <xsd:annotation> Representa un elemento opcional de nivel raíz ("top level") empleado para colocar comentarios generales sobre un Schema, el término nivel raíz ("top level") se refiere a que éste debe ser colocado inmediatamente después 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 :

Page 43: 04.Estructura de Los Documentos W3C Esquemas

TIPOS DE ELEMENTOSTIPOS DE ELEMENTOS 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

•.sólo contienen datos•estos son algunos de los tipos simples más 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>

Page 44: 04.Estructura de Los Documentos W3C Esquemas

Tipos Complejos vs Simples Tipos Complejos vs Simples

► Pueden declararse 2 tipos: Pueden declararse 2 tipos: Complejos: Pueden contener sub-elementos y atributos. Complejos: Pueden contener sub-elementos y atributos. Simples: No contienen sub-elementos ni atributos Simples: No contienen sub-elementos ni atributos

► Pueden aparecer dentro de elementos o en valores de Pueden aparecer dentro de elementos o en valores de atributos atributos

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

</alumno>

simplescomplejos

Page 45: 04.Estructura de Los Documentos W3C Esquemas

Elementos complejosElementos complejos

► Son elementos que contienen a otros elementos Son elementos que contienen a otros elementos hijos, o que tienen atributoshijos, o que tienen atributos

► Se suelen dividir en 4 tipos:Se suelen dividir en 4 tipos: Elementos vacíosElementos vacíos Elementos no vacíos con atributosElementos no vacíos con atributos Elementos con elementos hijosElementos con elementos hijos Elementos con elementos hijos y con “texto” o valor propio Elementos con elementos hijos y con “texto” o valor propio

(como el contenido mixto de las DTD)(como el contenido mixto de las DTD)

Page 46: 04.Estructura de Los Documentos W3C Esquemas

Elementos complejosElementos complejos

► Ejemplos:Ejemplos:

<product pid="1345"/><product pid="1345"/>

<food type="dessert">Ice cream</food><food type="dessert">Ice cream</food>

<description><description>Sucedió el Sucedió el <date>03.03.99</date> <date>03.03.99</date> .... ....

</description> </description>

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

</employee></employee>

Page 47: 04.Estructura de Los Documentos W3C Esquemas

Declarar elementos complejosDeclarar elementos complejos

► Para definir elementos complejos se utiliza la siguiente Para definir elementos complejos se utiliza la siguiente sintaxis:sintaxis:

<xsd:element name="empleado"> <xsd:element name="empleado"> <xsd:complexType> <xsd:complexType>

<xsd:sequence> <xsd:sequence> <xsd:element name=“nombre” <xsd:element name=“nombre”

type="xsd:string"/> type="xsd:string"/> <xsd:element name="apellidos" <xsd:element name="apellidos"

type="xsd:string"/> type="xsd:string"/> </xsd:sequence> </xsd:sequence>

</xsd:complexType> </xsd:complexType> </xsd:element></xsd:element>

Ejem0.xsdEjemplo que vemos la equivqlencias con la DTD:

Page 48: 04.Estructura de Los Documentos W3C Esquemas

Declarar elementos complejosDeclarar elementos complejos

► Podemos usar otra sintaxis Podemos usar otra sintaxis para reutilizar la “definición” de los para reutilizar la “definición” de los elementoselementos hijos en varios elementos: hijos en varios elementos:

<xsd:element name="empleado" <xsd:element name="empleado" type="personinfo"type="personinfo"/> /> <xsd:element name=“estudiante” <xsd:element name=“estudiante” type="personinfo"type="personinfo"/> />

<xsd:complexType name="personinfo"> <xsd:complexType name="personinfo"> <xsd:sequence> <xsd:sequence>

<xsd:element name=“nombre" <xsd:element name=“nombre" type="xsd:string"/> type="xsd:string"/>

<xsd:element name=“apellidos" <xsd:element name=“apellidos" type="xsd:string"/> type="xsd:string"/>

</xsd:sequence> </xsd:sequence> </xsd:complexType></xsd:complexType>

reutilizar.xsd

Page 49: 04.Estructura de Los Documentos W3C Esquemas

Declarar elementos complejosDeclarar elementos complejos

► Para declarar un Para declarar un elemento vacío con atributoselemento vacío con atributos, se utilizará la siguiente , se utilizará la siguiente sintáxis:sintáxis:

<xsd:element name="producto"> <xsd:element name="producto"> <xsd:complexType> <xsd:complexType> <xsd:attribute name=“fruta" <xsd:attribute name=“fruta"

type="xsd:positiveInteger"/>type="xsd:positiveInteger"/></xsd:complexType> </xsd:complexType>

</xsd:element> </xsd:element>

....................................................................................

<producto fruta="1345" /><producto fruta="1345" />

vacioconatr.xsd

Page 50: 04.Estructura de Los Documentos W3C Esquemas

Declarar elementos complejosDeclarar elementos complejos

► ¿Qué pasa si queremos que un elemento pueda tener atributos, pero no elementos hijo? Existe una ¿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”. forma de hacer esto, utilizando los elementos “xsd:simpleContent” y “xsd:extension”.

► Para declarar un elemento Para declarar un elemento no vacío con atributosno vacío con atributos, y sin elementos hijos, se utilizará la siguiente sintáxis:, y sin elementos hijos, se utilizará la siguiente sintáxis:

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

Vacioconatr0.xsd Vacioconatr0.xsd

Page 51: 04.Estructura de Los Documentos W3C Esquemas

Declarar elementos complejosDeclarar elementos complejos

► el elemento puede contener tanto datos carácter como elementos hijo.el elemento puede contener tanto datos carácter como elementos hijo.

► Para declarar Para declarar un elemento con contenido “mixto”,un elemento con contenido “mixto”, basta con añadir un atributo “ basta con añadir un atributo “mixedmixed” al elemento xsd:complexType:” al elemento xsd:complexType:

<xsd:element name=“persona"> <xsd:element name=“persona"> <xsd:complexType <xsd:complexType mixed="true">>

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

<xsd:element name=“hijos" type="xsd:positiveInteger"/> <xsd:element name=“hijos" type="xsd:positiveInteger"/> <xsd:element name=“fecha_nac" type="xsd:date"/> <xsd:element name=“fecha_nac" type="xsd:date"/> </xsd:sequence> </xsd:sequence>

</xsd:complexType> </xsd:complexType> </xsd:element></xsd:element>

Page 52: 04.Estructura de Los Documentos W3C Esquemas

Declarar elementos complejosDeclarar elementos complejos

► La declaración anterior permitiría un texto como el siguiente:La declaración anterior permitiría un texto como el siguiente:

<persona><persona>Nombre: Nombre: <nombre>Juan Perez</nombre><nombre>Juan Perez</nombre> Número de hijos: Número de hijos: <hijos>2</hijos> <hijos>2</hijos> Fecha nacimienrto: Fecha nacimienrto: < < fecha_nacfecha_nac >2001-07-13</ >2001-07-13</

fecha_nacfecha_nac> </persona></persona>

Elemmixto.xsd

Page 53: 04.Estructura de Los Documentos W3C Esquemas

Declarar elementos complejos: Declarar elementos complejos: IndicadoresIndicadores

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

► xsd:sequencexsd:sequence indica que los elementos anidados en él deben aparecer indica que los elementos anidados en él deben aparecer en un orden determinadoen un orden determinado

► Los esquemas XML nos ofrecen otras alternativas, además de Los esquemas XML nos ofrecen otras alternativas, además de xsd:sequence, para indicar cómo se deben tratar los elementos que xsd:sequence, para indicar cómo se deben tratar los elementos que aparecen anidados en un elemento complejoaparecen anidados en un elemento complejo

Las opciones o “indicadores” son: Las opciones o “indicadores” son: xsd:all xsd:all y y xsd:choicexsd:choice

Page 54: 04.Estructura de Los Documentos W3C Esquemas

Declarar elementos complejos: Declarar elementos complejos: Indicador xsd:allIndicador xsd:all

► El indicadorEl indicador xsd:all xsd:all indica que los elementos que contiene pueden indica que los elementos que contiene pueden aparecer en cualquier orden, pero como máximo sólo una vez.aparecer en cualquier orden, pero como máximo sólo una vez.

<xsd:element name="persona"> <xsd:element name="persona"> <xsd:complexType> <xsd:complexType>

<<xsd:allxsd:all> > <xsd:element name="nombre" type="xsd:string"/> <xsd:element name="nombre" type="xsd:string"/>

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

</xsd:complexType> </xsd:complexType> </xsd:element</xsd:element> >

Elemall.xsd

Page 55: 04.Estructura de Los Documentos W3C Esquemas

Declarar elementos complejos: Declarar elementos complejos: Indicador xsd:choiceIndicador xsd:choice

► El indicador El indicador xsd:choicexsd:choice Permite que uno y solo uno de los elementos Permite que uno y solo uno de los elementos contenidos en el grupo seleccionado esté presente en el elemento contenidos en el grupo seleccionado esté presente en el elemento contenedor.contenedor.

► El elemento El elemento xsd:choicexsd:choice puede incluir opcionalmente los atributos puede incluir opcionalmente los atributos minOccurs y maxOccurs, para especificar el mínimo y máximo número de minOccurs y maxOccurs, para especificar el mínimo y máximo número de

elementos hijos que pueden incluirse en el documento.elementos hijos que pueden incluirse en el documento.

<xsd:element name="persona"> <xsd:element name="persona"> <xsd:complexType> <xsd:complexType>

<<xsd:choicexsd:choice> > <xsd:element name=“nombre" <xsd:element name=“nombre"

type="xsd:string"/> type="xsd:string"/> <xsd:element name="lapellidos" <xsd:element name="lapellidos"

type="xsd:string"/> type="xsd:string"/> </xsd:choice> </xsd:choice>

</xsd:complexType> </xsd:complexType> </xsd:element></xsd:element>

Elemchoice.xsd

Page 56: 04.Estructura de Los Documentos W3C Esquemas

Declarar elementos complejos: Declarar elementos complejos: Indicadores maxOccurs y minOccursIndicadores maxOccurs y minOccurs

► Estos indicadores se utilizan para indicar el número máximo y mínimo de Estos indicadores se utilizan para indicar el número máximo y mínimo de veces que puede aparecer un elemento hijo de un elemento complejoveces que puede aparecer un elemento hijo de un elemento complejo

► El atributo El atributo maxOccursmaxOccurs puede tomar el valor “ puede tomar el valor “unboundedunbounded”, que indica ”, que indica que no existe ningún límiteque no existe ningún límite

<xsd:element name="persona"> <xsd:element name="persona"> <xsd:complexType> <xsd:complexType> <xsd:sequence> <xsd:sequence>

<xsd:element name=“nombre_completo" type="xsd:string"/> <xsd:element name=“nombre_completo" type="xsd:string"/> <xsd:element name=“nombre_hijo" type="xsd:string" <xsd:element name=“nombre_hijo" type="xsd:string"

maxOccurs="10"maxOccurs="10"/> /> </xsd:sequence> </xsd:sequence> </xsd:complexType> </xsd:complexType> </xsd:element></xsd:element>

Page 57: 04.Estructura de Los Documentos W3C Esquemas

El modelo de contenido ANYEl modelo de contenido ANY

► En esquemas XML también contamos con un modelo de contenido En esquemas XML también contamos con un modelo de contenido ANYANY, , que permite incluir elementos no declarados inicialmente en el esquema.que permite incluir elementos no declarados inicialmente en el esquema.

► A través de A través de <xsd:any><xsd:any> se puede indicar la presencia de cualquier tipo se puede indicar la presencia de cualquier tipo de elemento; el fragmento indica que dentro del elemento persona una de elemento; el fragmento indica que dentro del elemento persona una vez que se encuentre el elemento vez que se encuentre el elemento apellidoapellido puede existir cualquier puede existir cualquier elemento adicional.elemento adicional.

<xsd:element name="persona"> <xsd:element name="persona"> <xsd:complexType> <xsd:complexType>

<xsd:sequence> <xsd:sequence> <xsd:element name="nombre" <xsd:element name="nombre"

type="xsd:string"/> type="xsd:string"/> <xsd:element name="apellido" <xsd:element name="apellido"

type="xsd:string"/> type="xsd:string"/> <xsd:any minOccurs="0"/> <xsd:any minOccurs="0"/>

</xsd:sequence> </xsd:sequence> </xsd:complexType> </xsd:complexType>

</xsd:element></xsd:element>

Elemany.xsd

Page 58: 04.Estructura de Los Documentos W3C Esquemas

El modelo de contenido ANY - atributosEl modelo de contenido ANY - atributos

► También contamos con un elemento que permite extender el número de También contamos con un elemento que permite extender el número de atributos de un elemento:atributos de un elemento:

<xsd:element name="person"> <xsd:element name="person"> <xsd:complexType> <xsd:complexType>

<xsd:sequence> <xsd:sequence> <xsd:element name="firstname" <xsd:element name="firstname"

type="xsd:string"/>type="xsd:string"/><xsd:element name="lastname" <xsd:element name="lastname"

type="xsd:string"/> type="xsd:string"/> </xsd:sequence> </xsd:sequence> <xsd:anyAttribute/><xsd:anyAttribute/>

</xsd:complexType> </xsd:complexType> </xsd:element></xsd:element>

Page 59: 04.Estructura de Los Documentos W3C Esquemas

Tipos derivados por extensiónTipos derivados por extensión

► En la declaración de elementos complejos, es En la declaración de elementos complejos, es posible utilizar un posible utilizar un mecanismo de “herencia”mecanismo de “herencia” para reutilizar o extender elementos para reutilizar o extender elementos definidos con anterioridad (ver la siguiente definidos con anterioridad (ver la siguiente página)página)

Ejem4.xsd

Page 60: 04.Estructura de Los Documentos W3C Esquemas

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

<xsd:complexType name="personinfo"> <xsd:complexType name="personinfo"> <xsd:sequence> <xsd:sequence>

<xsd:element name="firstname" type="xsd:string"/> <xsd:element name="firstname" type="xsd:string"/> <xsd:element name="lastname" type="xsd:string"/> <xsd:element name="lastname" type="xsd:string"/>

</xsd:sequence> </xsd:sequence> </xsd:complexType></xsd:complexType>

<xsd:complexType name="fullpersoninfo"> <xsd:complexType name="fullpersoninfo"> <xsd:complexContent> <xsd:complexContent>

<xsd:extension base="personinfo"> <xsd:extension base="personinfo"> <xsd:sequence> <xsd:sequence>

<xsd:element name="address" type="xsd:string"/> <xsd:element name="address" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="country" type="xsd:string"/> <xsd:element name="country" type="xsd:string"/>

</xsd:sequence> </xsd:sequence> </xsd:extension> </xsd:extension>

</xsd:complexContent> </xsd:complexContent> </xsd:complexType></xsd:complexType>

Page 61: 04.Estructura de Los Documentos W3C Esquemas

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 número de ocurrencias que tiene que aparecer un elemento.

► Esta es la sintaxis de una declaración 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 declaración local, si queremos podemos indicar la cardinalidad del elemento global con los atributos (Indicadores de cantidad) minOccurs y maxOccurs

Page 62: 04.Estructura de Los Documentos W3C Esquemas

EJEMPLO CON REFERENCIAS A ELEMENTOS GLOBALES:

Ejem3.xsd

Page 63: 04.Estructura de Los Documentos W3C Esquemas

<?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>

ELEMENTOS GLOBALES EJEMPLO SIN REFERENCIAS A ELEMENTOS GLOBALES:

• 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

Page 64: 04.Estructura de Los Documentos W3C Esquemas

<?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>

EJEMPLO CON REFERENCIAS A ELEMENTOS GLOBALES:

Elem_globales.xsd

Page 65: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML : elementos Esquemas XML : elementos “simples”“simples”

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

► Para definir un elemento simple, utilizamos la sintáxis:Para definir un elemento simple, utilizamos la sintáxis:<xsd:element name="xxx" type="yyy"/><xsd:element name="xxx" type="yyy"/>

► Ejemplos:Ejemplos:<xsd:element name=“apellido” type="xs:string"/><xsd:element name=“apellido” type="xs:string"/><xsd:element name=“edad" type="xs:integer"/> <xsd:element name=“edad" type="xs:integer"/> <xsd:element name=“fecNac" type="xs:date"/> <xsd:element name=“fecNac" type="xs:date"/>

► Los tipos de datos más utilizados son:Los tipos de datos más utilizados son: xsd:string, xsd:decimal , xsd:integer , xsd:boolean , xsd:date , xsd:timexsd:string, xsd:decimal , xsd:integer , xsd:boolean , xsd:date , xsd:time

► Un elemento simple puede tener un valor por “defecto” y un valor “fijo”Un elemento simple puede tener un valor por “defecto” y un valor “fijo”

► Esto se indica mediante los atributos Esto se indica mediante los atributos defaultdefault y y fixedfixed <xsd:element name="color" type="xsd:string" default="red"/><xsd:element name="color" type="xsd:string" default="red"/>

Page 66: 04.Estructura de Los Documentos W3C Esquemas

Tipos de datos simples

Page 67: 04.Estructura de Los Documentos W3C Esquemas

Tipos de datos simples

Page 68: 04.Estructura de Los Documentos W3C Esquemas

Tipos de datos simples

Page 69: 04.Estructura de Los Documentos W3C Esquemas
Page 70: 04.Estructura de Los Documentos W3C Esquemas
Page 71: 04.Estructura de Los Documentos W3C Esquemas

Expresiones Regulares

Ejem2.xsd

Page 72: 04.Estructura de Los Documentos W3C Esquemas

Derivación de Tipos Simples

Existen tres mecanismos de derivación:

► Por enumeración (lista): el rango se describe explícitamente como la lista de valores válidos.

► Por unión : mediante unión de dos o más tipos de datos.

► Por restricción: se restringe el rango de valores del tipo de datos.

El mecanismo de extensión sólo se aplica a los tipos de datos complejos.

Page 73: 04.Estructura de Los Documentos W3C Esquemas

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 múltiples, 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.

► También se pueden aplicar otras facetas, como “length”, etc.

► Mediante <xsd:list> es posible definir que un tipo de dato simpleType que cumpla con la características de una lista; el fragmento siguiente demuestra la definición de dos tipos de datos (simpleType) uno para una lista de números decimales y otro para una lista de String's, ambas declaraciones les sigue la posible

definición del elemento en XML .

► Los valores de la lista se separan mediante “blancos”.

Page 74: 04.Estructura de Los Documentos W3C Esquemas

<xs:simpleType name=“listaFechas”>

<xs:list itemType =“xs:date”/></xs:simpleType>

<xs:element name=“listaCumpleaños” type=“listaFechas”>

------------------------------------------<listaCumpleaños>

1975-03-25 1999-05-03 2001-09-27</listaCumpleaños>

<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

Page 75: 04.Estructura de Los Documentos W3C Esquemas

Tipo Simple derivado “Unión”

► Mediante <xsd:union> es posible definir un nuevo tipo de datos (simpleType) a partir de la unión 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 unión 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>

Page 76: 04.Estructura de Los Documentos W3C Esquemas

Ejemplo de Unión

<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

Page 77: 04.Estructura de Los Documentos W3C Esquemas

ELEMENTOS Y ATRIBUTOS EN ESQUEMASELEMENTOS Y ATRIBUTOS EN ESQUEMAS ► A. EL ELEMENTO A. EL ELEMENTO ELEMENT ELEMENT

► Como se ha adelantado, los elementos que van a aparecer en un documento Como se ha adelantado, los elementos que van a aparecer en un documento instancia deben aparecer en el Esquema con un elemento element, cuyos instancia deben aparecer en el Esquema con un elemento element, cuyos atributos más significativos son : atributos más significativos son : maxOccurs maxOccurs y y minOccursminOccurs : determinan el número máximo ( mínimo ) de : determinan el número máximo ( mínimo ) de

veces que el elemento puede aparecer en un documento instancia; veces que el elemento puede aparecer en un documento instancia; obviamente, sólo se aplican a atributos de elementos de tipo real. obviamente, sólo se aplican a atributos de elementos de tipo real.

namename : especifica el nombre usado para referenciar un tipo de elemento : especifica el nombre usado para referenciar un tipo de elemento tanto en el resto del Esquema como en un documento instancia. tanto en el resto del Esquema como en un documento instancia.

refref : hace referencia a un elemento global ya declarado. Es mutuamente : hace referencia a un elemento global ya declarado. Es mutuamente excluyente con name. excluyente con name.

typetype : especifica el tipo de dato del elemento, con un valor nombre referido : especifica el tipo de dato del elemento, con un valor nombre referido a un tipo global, simple o complejo. a un tipo global, simple o complejo.

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

► La mayoría de elementos que se usan tienen elementos locales ( tanto La mayoría de elementos que se usan tienen elementos locales ( tanto simpleType como complexType ) o una referencia a un tipo global ( simple o simpleType como complexType ) o una referencia a un tipo global ( simple o complejo ) a través del atributo type.complejo ) a través del atributo type.

siendo las opciones de contenido para el elemento siendo las opciones de contenido para el elemento elementelement : : annotation, simpleType y complexTypeannotation, simpleType y complexType. .

Page 78: 04.Estructura de Los Documentos W3C Esquemas

► B. EL ELEMENTO B. EL ELEMENTO ATTRIBUTE ATTRIBUTE

► En un Esquema XML los atributos se declaran por medio del elemento En un Esquema XML los atributos se declaran por medio del elemento attributeattribute que a su vez tiene una serie de atributos que ponen restricciones a que a su vez tiene una serie de atributos que ponen restricciones a las propiedades de esta declaración, cuya panorámica depende de su las propiedades de esta declaración, cuya panorámica depende de su ubicación dentro del Esquema ( como se sabe un atributo global ubicación dentro del Esquema ( como se sabe un atributo global debe declararse como hijo del elemento schema ). debe declararse como hijo del elemento schema ).

► Dado el fragmento : Dado el fragmento : <xsd:schema> <xsd:schema>

<xsd:attribute name=”miAtributo”/> <xsd:attribute name=”miAtributo”/> <xsd:element name=”algunElemento” type=”xs:string”/> <xsd:element name=”algunElemento” type=”xs:string”/>

</xsd:schema> </xsd:schema>

► el atributo miAtributo es global, y puede referenciarse en cualquier elemento el atributo miAtributo es global, y puede referenciarse en cualquier elemento o grupo de atributos del documento.o grupo de atributos del documento.

► En el caso que se quiera declarar un atributo de forma local, éste se coloca En el caso que se quiera declarar un atributo de forma local, éste se coloca como hijo de la declaración del elemento correspondiente. como hijo de la declaración del elemento correspondiente.

ELEMENTOS Y ATRIBUTOS EN ESQUEMAS

Page 79: 04.Estructura de Los Documentos W3C Esquemas

EjemploEjemplo

► Los atributos de un elemento son muy parecidos a los vistos para Los atributos de un elemento son muy parecidos a los vistos para elementelement. La diferencia más importante es que los atributos son . La diferencia más importante es que los atributos son siempre de tipo simple. siempre de tipo simple.

► Un atributo específico del elemento Un atributo específico del elemento attributeattribute es es useuse, que da la , que da la posibilidad de limitar el uso del atributo en un documento instancia, posibilidad de limitar el uso del atributo en un documento instancia, pudiendo tomar los valores : pudiendo tomar los valores : optional, prohibited, y required.optional, prohibited, y required.

► Señalar que en los atributos como norma se aplica el valor por Señalar que en los atributos como norma se aplica el valor por defecto cuando los atributos no quedan determinados. defecto cuando los atributos no quedan determinados.

<xsd:schema> <xsd:schema> <xsd:element name=”algunElemento”> <xsd:element name=”algunElemento”>

<xsd:complexType> <xsd:complexType> <xsd:attribute name=”miAtributo”/> <xsd:attribute name=”miAtributo”/>

</xsd:complexType> </xsd:complexType> </xsd:element> </xsd:element>

</xsd:schema> </xsd:schema>

Page 80: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML :atributos (1)Esquemas XML :atributos (1)

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

► Si un elemento puede ir acompañado de atributos, el Si un elemento puede ir acompañado de atributos, el elemento se deberá declarar como un elemento elemento se deberá declarar como un elemento “complejo”.“complejo”.

► Un atributo se declara de la siguiente forma:Un atributo se declara de la siguiente forma:<xsd:attribute name="xxx" type="yyy"/><xsd:attribute name="xxx" type="yyy"/>

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

► Los atributos tienen un tipo de dato: Los atributos tienen un tipo de dato: xsd:string, xsd:decimal, xsd:integer, xsd:boolean, xsd:date, xsd:string, xsd:decimal, xsd:integer, xsd:boolean, xsd:date,

xsd:timexsd:time

Page 81: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML – atributos (2)Esquemas XML – atributos (2)

► Los atributos pueden tener valores por defecto y valores fijos:Los atributos pueden tener valores por defecto y valores fijos:<xsd:attribute name=“idioma" type="xsd:string" <xsd:attribute name=“idioma" type="xsd:string"

default=“ES"/>default=“ES"/>

► Por defecto, los atributos son opcionales. Por defecto, los atributos son opcionales.

► Para indicar que un atributo debe ser obligatorio, se debe Para indicar que un atributo debe ser obligatorio, se debe añadir a su declaración en el esquema es atributo añadir a su declaración en el esquema es atributo ““useuse””

<xsd:attribute name="lang" type="xsd:string" <xsd:attribute name="lang" type="xsd:string" use="required"/>use="required"/>

► El atributo El atributo useuse puede tomar el valor “puede tomar el valor “optionaloptional” si el atributo ” si el atributo no es obligatorio (opción por defecto)no es obligatorio (opción por defecto)

Ejem1.xsd

Page 82: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML : facetas o Esquemas XML : facetas o restriccionesrestricciones

► Las facetas o restricciones permiten restringir el valor que se Las facetas o restricciones permiten restringir el valor que se puede dar a un elemento o atributo XML.puede dar a un elemento o atributo XML.

► Mediante restricciones podemos indicar que un valor debe estar Mediante restricciones podemos indicar que un valor debe estar comprendido en un rango determinado, debe ser un valor de comprendido en un rango determinado, debe ser un valor de una lista de valores “cerrada”, o debe ser mayor o menor que una lista de valores “cerrada”, o debe ser mayor o menor que otro valor…otro valor…

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

► Longitud de los valores de los elementos…Longitud de los valores de los elementos…http://xml.osmosislatina.com/curso/validar/elementos_schema.htm

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

Page 83: 04.Estructura de Los Documentos W3C Esquemas

Derivación por restricción:mediante patrones

► . = cualquier carácter.► \d = un dígito► \D = un no-dígito► \s = cualquier carácter blanco (nueva-línea, tab, retorno de

carro).► \S = cualquier carácter no-blanco.► * = cardinalidad 0..N► ? = opcionalidad► + = cardinalidad 1..N► [abc] = sólo uno del grupo► [0-9] = rango de valores► (xy) = “y” conjunción► | = operador “or” lógico► X{5} = 5 ocurrencias de x► x{5,} = al menos 5 ocurrencias de x► X{5,8} = mínimo 5 y máximo 8 ocurrencias de x► (xyz){2} = dos ocurrencias de xyz

Page 84: 04.Estructura de Los Documentos W3C Esquemas

Derivación mediante patrones: Ejemplo

<xs:simpleType name=“TipoCódigoPostal”><xs:restriction base=“xs:string”>

<xs:pattern value=“\d{5}(-\d{4})?”/></xs:restriction>

</xs:simpleType>

<xs:element name=“códigoPostal”type=“TipoCódigoPostal”>

------------------------------------------<códigoPostal>12345-9876</códigoPostal><códigoPostal>31415</códigoPostal>

Page 85: 04.Estructura de Los Documentos W3C Esquemas

Ejemplo de Unión y restricciones

Page 86: 04.Estructura de Los Documentos W3C Esquemas

Tipos Simples Anónimos

► Pueden definirse tipos internamente sin nombre. No se pueden usar en la definición de otro elemento.

<xs:element name=“códigoPostal”><xs:simpleType><xs:restriction base=“xs:string”>

<xs:pattern value=“\d{5}(-\d{4})?”/></xs:restriction></xs:simpleType>

</xs:element>

Page 87: 04.Estructura de Los Documentos W3C Esquemas

Restricción por rangos

► xs:minExclusive► xs:maxInclusive► xs:maxExclusive

<xs:simpleType name=“fechaCreación”><xs:restriction base=“xs:date”>

<xs:nimInclusive value=“2001:09:27”/></xs:restriction>

</xs:simpleType>

Page 88: 04.Estructura de Los Documentos W3C Esquemas

Otros tipos de restricciones

► Limitar la longitud de una cadena:

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

► Limitar el número de dígitos de una cifra:

<xs:precision value=“n”> : máximo número de dígitos totales.

<xs:scale value=”m”> : máximo numero de dígitos a la derecha del

punto decimal.

Page 89: 04.Estructura de Los Documentos W3C Esquemas

Restricción por enumeración

<xs:simpleType name=“Paises”><xs:restriction base=“xs:string”>

<xs:enumeration value=“España”/><xs:enumeration

value=“Francia”/><xs:enumeration

value=“Portugal”/><xs:enumeration value=“Italia”/>

</xs:restriction></xs:simpleType>

<pais>España</pais>

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

Page 90: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML – restricciones (ej. 1)Esquemas XML – restricciones (ej. 1)

<xsd:element name="age"><xsd:element name="age">

<xsd:simpleType> <xsd:simpleType>

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

<xsd:minInclusive value="0"/> <xsd:minInclusive value="0"/>

<xsd:maxInclusive <xsd:maxInclusive value="100"/> value="100"/>

</xsd:restriction> </xsd:restriction>

</xsd:simpleType></xsd:simpleType>

</xsd:element></xsd:element>

Page 91: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML – restricciones (ej. 2)Esquemas XML – restricciones (ej. 2)

<xsd:element name="car"><xsd:element name="car">

<xsd:simpleType> <xsd:simpleType>

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

<xsd:enumeration value="Audi"/> <xsd:enumeration value="Audi"/>

<xsd:enumeration value="Golf"/> <xsd:enumeration value="Golf"/>

<xsd:enumeration value="BMW"/> <xsd:enumeration value="BMW"/>

</xsd:restriction> </xsd:restriction>

</xsd:simpleType></xsd:simpleType>

</xsd:element></xsd:element>

Page 92: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML – restricciones (ej. 2, Esquemas XML – restricciones (ej. 2, alt.)alt.)

<xsd:element name="car" type="carType"/><xsd:element name="car" type="carType"/>

<xsd:simpleType name="carType"> <xsd:simpleType name="carType">

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

<xsd:enumeration value="Audi"/> <xsd:enumeration value="Audi"/>

<xsd:enumeration value="Golf"/> <xsd:enumeration value="Golf"/>

<xsd:enumeration value="BMW"/> <xsd:enumeration value="BMW"/>

</xsd:restriction> </xsd:restriction>

</xsd:simpleType></xsd:simpleType>

Page 93: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML – restricciones (ej. 3)Esquemas XML – restricciones (ej. 3)

<xsd:element name="letter"><xsd:element name="letter">

<xsd:simpleType> <xsd:simpleType>

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

<xsd:pattern value="[a-z]"/> <xsd:pattern value="[a-z]"/>

</xsd:restriction> </xsd:restriction>

</xsd:simpleType></xsd:simpleType>

</xsd:element></xsd:element>

En este ejemplo, el elemento “letter” debe En este ejemplo, el elemento “letter” debe tomar como valor 1 letra minúscula (sólo 1)tomar como valor 1 letra minúscula (sólo 1)

Page 94: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML – restricciones (ej. 4)Esquemas XML – restricciones (ej. 4)

<xsd:element name="iniciales"><xsd:element name="iniciales">

<xsd:simpleType> <xsd:simpleType>

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

<xsd:pattern value="[a-zA-Z][a-zA-Z][a-zA-<xsd:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/> Z]"/>

</xsd:restriction> </xsd:restriction>

</xsd:simpleType></xsd:simpleType>

</xsd:element> </xsd:element>

En este ejemplo, el elemento “iniciales” debe tomar como En este ejemplo, el elemento “iniciales” debe tomar como valor tres letras mayúsculas o minúscula (sólo 3)valor tres letras mayúsculas o minúscula (sólo 3)

Page 95: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML – restricciones (ej. 5)Esquemas XML – restricciones (ej. 5)

<xsd:element name=“opcion"><xsd:element name=“opcion">

<xsd:simpleType> <xsd:simpleType>

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

<xsd:pattern value="[xyz]"/> <xsd:pattern value="[xyz]"/>

</xsd:restriction> </xsd:restriction>

</xsd:simpleType></xsd:simpleType>

</xsd:element> </xsd:element>

En este ejemplo, el elemento “opcion” debe tomar En este ejemplo, el elemento “opcion” debe tomar como valor una de estas letras: x, y o zcomo valor una de estas letras: x, y o z

Page 96: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML – restricciones (ej. 6)Esquemas XML – restricciones (ej. 6)

<xsd:element name=“digitos"><xsd:element name=“digitos">

<xsd:simpleType> <xsd:simpleType>

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

<xsd:pattern value="[0-9][0-9][0-9][0-9][0-<xsd:pattern value="[0-9][0-9][0-9][0-9][0-9]"/> 9]"/>

</xsd:restriction> </xsd:restriction>

</xsd:simpleType></xsd:simpleType>

</xsd:element></xsd:element>

Page 97: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML – restricciones (ej. 7)Esquemas XML – restricciones (ej. 7)

<xsd:element name="letras"><xsd:element name="letras">

<xsd:simpleType> <xsd:simpleType>

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

<xsd:pattern value="([a-z])*"/> <xsd:pattern value="([a-z])*"/>

</xsd:restriction> </xsd:restriction>

</xsd:simpleType></xsd:simpleType>

</xsd:element></xsd:element>

Page 98: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML – restricciones (ej. 8)Esquemas XML – restricciones (ej. 8)

<xsd:element name="password"><xsd:element name="password">

<xsd:simpleType> <xsd:simpleType>

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

<xsd:pattern value="[a-zA-Z0-9]{8}"/> <xsd:pattern value="[a-zA-Z0-9]{8}"/>

</xsd:restriction> </xsd:restriction>

</xsd:simpleType></xsd:simpleType>

</xsd:element> </xsd:element>

En este ejemplo, el valor del campo “password” debe En este ejemplo, el valor del campo “password” debe ser de 8 caracteresser de 8 caracteres

Page 99: 04.Estructura de Los Documentos W3C Esquemas

Esquemas XML – restricciones (ej. 9)Esquemas XML – restricciones (ej. 9)

<xsd:element name="password"><xsd:element name="password">

<xsd:simpleType> <xsd:simpleType>

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

<xsd:length value="8"/> <xsd:length value="8"/>

</xsd:restriction> </xsd:restriction>

</xsd:simpleType></xsd:simpleType>

</xsd:element></xsd:element>

Los elementos length, minLength y maxLength Los elementos length, minLength y maxLength permiten indicar el número exacto, mínimo y permiten indicar el número exacto, mínimo y máximo de caracteres que puede tener un valor de máximo de caracteres que puede tener un valor de un elemento.un elemento.

Page 100: 04.Estructura de Los Documentos W3C Esquemas

Elementos para restriccionesElementos para restricciones

enumerationenumeration Establece una lista de valores Establece una lista de valores “aceptados”“aceptados”

fractionDigits fractionDigits Número de cifras decimalesNúmero de cifras decimales

length length Número de caracteres Número de caracteres obligatoriosobligatorios

maxExclusive y maxInclusivemaxExclusive y maxInclusive Valor máximo de un rango Valor máximo de un rango

minExclusive y minInclusive minExclusive y minInclusive Valor mínimo en un rangoValor mínimo en un rango

maxLength y minLength maxLength y minLength Número máximo y mínimo de Número máximo y mínimo de caracteres permitidoscaracteres permitidos

pattern pattern Define una secuencia de Define una secuencia de caracteres permitidacaracteres permitida

totalDigits totalDigits Número exacto de dígitos Número exacto de dígitos permitidospermitidos

whiteSpace whiteSpace Indica cómo se deben de tratar Indica cómo se deben de tratar los espacios en blancolos espacios en blanco

Page 101: 04.Estructura de Los Documentos W3C Esquemas

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="avión"> ...</transporte>

► Tamaño de archivos XML Schema puede ser excesivo

► Legibilidad de las especificaciones...XML no siempre es legible

► Complejidad de la especificación: Muchas situaciones/combinaciones excepción

Page 102: 04.Estructura de Los Documentos W3C Esquemas

Práctica 1Práctica 1

► Diseñar un esquema XML para crear documentos para Diseñar un esquema XML para crear documentos para el préstamo.el préstamo.

► En cada documento se indicarán:En cada documento se indicarán:

El nombre y apellidos del bibliotecarioEl nombre y apellidos del bibliotecario Fecha del préstamo y de devoluciónFecha del préstamo y de devolución Datos del lector (id, nombre, apellidos, teléfono y Datos del lector (id, nombre, apellidos, teléfono y

dirección) La dirección se dividirá en tipo de calle dirección) La dirección se dividirá en tipo de calle (que puede ser calle, avenida o plaza), nombre calle, (que puede ser calle, avenida o plaza), nombre calle, número, piso y letra, c.p., localidad y provincianúmero, piso y letra, c.p., localidad y provincia

Un máximo de tres ejemplares en préstamo. Para Un máximo de tres ejemplares en préstamo. Para cada uno de ellos: el número de registro, título, cada uno de ellos: el número de registro, título, autor(es) autor(es)

El préstamo tendrá un atributo numérico que servirá El préstamo tendrá un atributo numérico que servirá como identificadorcomo identificador

Page 103: 04.Estructura de Los Documentos W3C Esquemas

Práctica 2Práctica 2

► Modificar un nuevo esquema, de forma que no todos Modificar un nuevo esquema, de forma que no todos los elementos estén anidados, utilizando las los elementos estén anidados, utilizando las referencias.referencias.

► Primero declaramos los elementos simples. Luego Primero declaramos los elementos simples. Luego declararemos los elementos complejos indicando su declararemos los elementos complejos indicando su “modelo de contenido” mediante atributos ref.“modelo de contenido” mediante atributos ref.

Page 104: 04.Estructura de Los Documentos W3C Esquemas

Práctica 3Práctica 3

► Crear un esquema xml para codificar datos de un Crear un esquema xml para codificar datos de un pedido a un proveedor. Se indicarán los datos del pedido a un proveedor. Se indicarán los datos del proveedor (nif, nombre, dirección, localidad, téléfono), proveedor (nif, nombre, dirección, localidad, téléfono), datos de la biblioteca, y el listado de items que se han datos de la biblioteca, y el listado de items que se han pedido.pedido.

► Para cada item se indicará el número de unidades, Para cada item se indicará el número de unidades, precio, y también el precio total del pedido y el precio, y también el precio total del pedido y el número de items.número de items.

Page 105: 04.Estructura de Los Documentos W3C Esquemas

► http://www.sidar.org/recur/desdi/traduc/es/xml/xmlschema/xmlschema-0es.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/referenci

a-de-xsds-xml-schema/7-definicion-de-tipos-de-datos-en-xml-schema-xsd