Documente Academic
Documente Profesional
Documente Cultură
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. un documento XML con un vocabulario especializado
Es
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
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>
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
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">.
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.
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
[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
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:
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)>
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.
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>
<!ELEMENT date (day, month, year, weekday?)> <!ELEMENT day (#PCDATA)> <!ELEMENT month (#PCDATA)> <!ELEMENT year (#PCDATA)> <!ELEMENT weekday (#PCDATA)>
XML Schemas
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
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
Ejemplo
Ejemplo
inicio1.xsd
Soportan namespaces.
Permiten definir nuevos tipos de datos y restricciones sobre los valores de un elemento. Ofrecen mayor precisin que los DTDs.
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
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:
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 :
TIPOS DE ELEMENTOS
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>
<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>
Ejem0.xsd
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
vacioconatr.xsd
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
<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>
Elemmixto.xsd
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
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
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
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>
<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
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>
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
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
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"/>
Expresiones Regulares
Ejem2.xsd
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.
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 .
<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
Mediante <xsd:union> es posible definir un nuevo tipo de datos (simpleType) a partir de la unin de otros dos tipo de datos (simpleType).
<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
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.
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.
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:
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
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
http://xml.osmosislatina.com/curso/validar/elementos_schema.htm
https://sites.google.com/site/todoxmldtd/home
= = = = = = = = = = = = = = = =
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
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>
<xs:scale value=m>
<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>
<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>
<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>
<xsd:element name="letras"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="([a-z])*"/> </xsd:restriction> </xsd:simpleType> </xsd:element>
<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
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
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.