Está en la página 1de 22

Revisin: 4

XML Schema en dos patadas


Unai Estbanez
unai@unainet.net

Pgina 1 de 22

Revisin: 4

ndice de contenido
Licencia:..............................................................................................................3
Motivacin...........................................................................................................8
Audiencia.........................................................................................................8
Que es XML-Schema?........................................................................................9
Conceptos bsicos...............................................................................................9
Elementos simples...............................................................................................9
Restricciones sobre los datos.........................................................................10
Sobre los valores........................................................................................10
Sobre un conjunto de valores.....................................................................10
Sobre los espacios en blanco.....................................................................11
Sobre la longitud........................................................................................11
Sobre patrones...........................................................................................12
Atributos............................................................................................................12
Tipos de datos...................................................................................................12
Categoras de los tipos de datos....................................................................12
Atmicos listas y uniones...........................................................................12
Primitivos o derivados................................................................................13
Built-in o definidos por el usuario...............................................................13
Tipos String....................................................................................................13
Tipo string..................................................................................................13
Tipo NormalizedString................................................................................13
Tipo Token..................................................................................................14
Tipos Date y Time..........................................................................................14
Tipos Numricos.........................................................................................14
Tipos mixtos...............................................................................................15
Definicin de nuevos tipos de datos..................................................................15
Elementos complejos.........................................................................................15
Elementos que contienen solo otros elementos............................................16
Elementos vacios...........................................................................................16
Elementos que contienen solo texto..............................................................17
Elementos que contienen otros elementos y texto........................................18
Indicadores........................................................................................................18
All...................................................................................................................18
Choice............................................................................................................20
Sequence.......................................................................................................20
maxOccurs y minOccurs................................................................................20
Indicadores de grupo y de atributo................................................................20
Namespaces......................................................................................................21
Enlazar un esquema con un XML.......................................................................22
Reaprovechar definiciones usando includes......................................................22
Como testear tu schema en local......................................................................23

Pgina 2 de 22

Revisin: 4

Licencia:
Reconocimiento 3.0 Espaa

LA OBRA O LA PRESTACIN (SEGN SE DEFINEN MS ADELANTE) SE PROPORCIONA BAJO LOS


TRMINOS DE ESTA LICENCIA PBLICA DE CREATIVE COMMONS (CCPL O LICENCIA). LA OBRA O LA
PRESTACIN SE ENCUENTRA PROTEGIDA POR LA LEY ESPAOLA DE PROPIEDAD INTELECTUAL Y/O
CUALESQUIERA OTRAS NORMAS QUE RESULTEN DE APLICACIN. QUEDA PROHIBIDO CUALQUIER
USO DE LA OBRA O PRESTACIN DIFERENTE A LO AUTORIZADO BAJO ESTA LICENCIA O LO
DISPUESTO EN LA LEY DE PROPIEDAD INTELECTUAL.
MEDIANTE EL EJERCICIO DE CUALQUIER DERECHO SOBRE LA OBRA O LA PRESTACIN, USTED
ACEPTA Y CONSIENTE LAS LIMITACIONES Y OBLIGACIONES DE ESTA LICENCIA, SIN PERJUICIO DE LA
NECESIDAD DE CONSENTIMIENTO EXPRESO EN CASO DE VIOLACIN PREVIA DE LOS TRMINOS DE
LA MISMA. EL LICENCIADOR LE CONCEDE LOS DERECHOS CONTENIDOS EN ESTA LICENCIA,
SIEMPRE QUE USTED ACEPTE LOS PRESENTES TRMINOS Y CONDICIONES.
1. Definiciones

a.La obra es la creacin literaria, artstica o cientfica ofrecida bajo los trminos de esta licencia.
b.En esta licencia se considera una prestacin cualquier interpretacin, ejecucin, fonograma,
grabacin audiovisual, emisin o transmisin, mera fotografa u otros objetos protegidos por la
legislacin de propiedad intelectual vigente aplicable.

c.La aplicacin de esta licencia a una coleccin (definida ms adelante) afectar nicamente a su
estructura en cuanto forma de expresin de la seleccin o disposicin de sus contenidos, no siendo
extensiva a stos. En este caso la coleccin tendr la consideracin de obra a efectos de esta licencia.

d.El titular originario es:


i.En el caso de una obra literaria, artstica o cientfica, la persona natural o grupo de personas
que cre la obra.
ii.En el caso de una obra colectiva, la persona que la edite y divulgue bajo su nombre, salvo
pacto contrario.
iii.En el caso de una interpretacin o ejecucin, el actor, cantante, msico, o cualquier otra
persona que represente, cante, lea, recite, interprete o ejecute en cualquier forma una obra.
iv.En el caso de un fonograma, el productor fonogrfico, es decir, la persona natural o jurdica
bajo cuya iniciativa y responsabilidad se realiza por primera vez una fijacin exclusivamente
sonora de la ejecucin de una obra o de otros sonidos.
v.En el caso de una grabacin audiovisual, el productor de la grabacin, es decir, la persona
natural o jurdica que tenga la iniciativa y asuma la responsabilidad de las fijaciones de un
plano o secuencia de imgenes, con o sin sonido.
vi.En el caso de una emisin o una transmisin, la entidad de radiodifusin.
vii.En el caso de una mera fotografa, aquella persona que la haya realizado.
viii.En el caso de otros objetos protegidos por la legislacin de propiedad intelectual vigente, la
persona que sta seale.

Pgina 3 de 22

Revisin: 4
e.Se considerarn obras derivadas aquellas obras creadas a partir de la licenciada, como por ejemplo:
las traducciones y adaptaciones; las revisiones, actualizaciones y anotaciones; los compendios,
resmenes y extractos; los arreglos musicales y, en general, cualesquiera transformaciones de una
obra literaria, artstica o cientfica. Para evitar la duda, si la obra consiste en una composicin musical
o grabacin de sonidos, la sincronizacin temporal de la obra con una imagen en movimiento
(synching) ser considerada como una obra derivada a efectos de esta licencia.

f.Tendrn la consideracin de colecciones la recopilacin de obras ajenas, de datos o de otros


elementos independientes como las antologas y las bases de datos que por la seleccin o disposicin
de sus contenidos constituyan creaciones intelectuales. La mera incorporacin de una obra en una
coleccin no dar lugar a una derivada a efectos de esta licencia.

g.El licenciador es la persona o la entidad que ofrece la obra o prestacin bajo los trminos de esta
licencia y le concede los derechos de explotacin de la misma conforme a lo dispuesto en ella.

h.Usted es la persona o la entidad que ejercita los derechos concedidos mediante esta licencia y que
no ha violado previamente los trminos de la misma con respecto a la obra o la prestacin, o que ha
recibido el permiso expreso del licenciador de ejercitar los derechos concedidos mediante esta licencia
a pesar de una violacin anterior.

i.La transformacin de una obra comprende su traduccin, adaptacin y cualquier otra modificacin en
su forma de la que se derive una obra diferente. La creacin resultante de la transformacin de una
obra tendr la consideracin de obra derivada.

j.Se entiende por reproduccin la fijacin directa o indirecta, provisional o permanente, por cualquier
medio y en cualquier forma, de toda la obra o la prestacin o de parte de ella, que permita su
comunicacin o la obtencin de copias.

k.Se entiende por distribucin la puesta a disposicin del pblico del original o de las copias de la obra
o la prestacin, en un soporte tangible, mediante su venta, alquiler, prstamo o de cualquier otra
forma.

l.Se entiende por comunicacin pblica todo acto por el cual una pluralidad de personas, que no
pertenezcan al mbito domstico de quien la lleva a cabo, pueda tener acceso a la obra o la prestacin
sin previa distribucin de ejemplares a cada una de ellas. Se considera comunicacin pblica la puesta
a disposicin del pblico de obras o prestaciones por procedimientos almbricos o inalmbricos, de tal
forma que cualquier persona pueda acceder a ellas desde el lugar y en el momento que elija.

m.La explotacin de la obra o la prestacin comprende la reproduccin, la distribucin, la


comunicacin pblica y, en su caso, la transformacin.
2. Lmites de los derechos. Nada en esta licencia pretende reducir o restringir cualesquiera lmites legales de
los derechos exclusivos del titular de los derechos de propiedad intelectual de acuerdo con la Ley de propiedad
intelectual o cualesquiera otras leyes aplicables, ya sean derivados de usos legtimos, tales como la copia
privada o la cita, u otras limitaciones como la resultante de la primera venta de ejemplares (agotamiento).
3. Concesin de licencia. Conforme a los trminos y a las condiciones de esta licencia, el licenciador concede,
por el plazo de proteccin de los derechos de propiedad intelectual y a ttulo gratuito, una licencia de mbito
mundial no exclusiva que incluye los derechos siguientes:
a.Derecho de reproduccin, distribucin y comunicacin pblica de la obra o la prestacin.
b.Derecho a incorporar la obra o la prestacin en una o ms colecciones.
c.Derecho de reproduccin, distribucin y comunicacin pblica de la obra o la prestacin lcitamente
incorporada en una coleccin.
d.Derecho de transformacin de la obra para crear una obra derivada siempre y cuando se incluya en
sta una indicacin de la transformacin o modificacin efectuada.
e.Derecho de reproduccin, distribucin y comunicacin pblica de obras derivadas creadas a partir de
la obra licenciada.

Pgina 4 de 22

Revisin: 4
f.Derecho a extraer y reutilizar la obra o la prestacin de una base de datos.
g.Para evitar cualquier duda, el titular originario:
i.Conserva el derecho a percibir las remuneraciones o compensaciones previstas por actos de
explotacin de la obra o prestacin, calificadas por la ley como irrenunciables e inalienables y
sujetas a gestin colectiva obligatoria.
ii.Renuncia al derecho exclusivo a percibir, tanto individualmente como mediante una entidad
de gestin colectiva de derechos, cualquier remuneracin derivada de actos de explotacin de
la obra o prestacin que usted realice.
Estos derechos se pueden ejercitar en todos los medios y formatos, tangibles o intangibles, conocidos en el
momento de la concesin de esta licencia. Los derechos mencionados incluyen el derecho a efectuar las
modificaciones que sean precisas tcnicamente para el ejercicio de los derechos en otros medios y formatos.
Todos los derechos no concedidos expresamente por el licenciador quedan reservados, incluyendo, a ttulo
enunciativo pero no limitativo, los derechos morales irrenunciables reconocidos por la ley aplicable. En la
medida en que el licenciador ostente derechos exclusivos previstos por la ley nacional vigente que implementa
la directiva europea en materia de derecho sui generis sobre bases de datos, renuncia expresamente a dichos
derechos exclusivos.
4. Restricciones. La concesin de derechos que supone esta licencia se encuentra sujeta y limitada a las
restricciones siguientes:
a.Usted puede reproducir, distribuir o comunicar pblicamente la obra o prestacin solamente bajo los
trminos de esta licencia y debe incluir una copia de la misma, o su Identificador Uniforme de Recurso
(URI). Usted no puede ofrecer o imponer ninguna condicin sobre la obra o prestacin que altere o
restrinja los trminos de esta licencia o el ejercicio de sus derechos por parte de los concesionarios de
la misma. Usted no puede sublicenciar la obra o prestacin. Usted debe mantener intactos todos los
avisos que se refieran a esta licencia y a la ausencia de garantas. Usted no puede reproducir,
distribuir o comunicar pblicamente la obra o prestacin con medidas tecnolgicas que controlen el
acceso o el uso de una manera contraria a los trminos de esta licencia. Esta seccin 4.a tambin
afecta a la obra o prestacin incorporada en una coleccin, pero ello no implica que sta en su
conjunto quede automticamente o deba quedar sujeta a los trminos de la misma. En el caso que le
sea requerido, previa comunicacin del licenciador, si usted incorpora la obra en una coleccin y/o
crea una obra derivada, deber quitar cualquier crdito requerido en el apartado 4.b, en la medida de
lo posible.
b.Si usted reproduce, distribuye o comunica pblicamente la obra o la prestacin, una coleccin que la
incorpore o cualquier obra derivada, debe mantener intactos todos los avisos sobre la propiedad
intelectual e indicar, de manera razonable conforme al medio o a los medios que usted est utilizando:
i.El nombre del autor original, o el seudnimo si es el caso, as como el del titular originario, si
le es facilitado.
ii.El nombre de aquellas partes (por ejemplo: institucin, publicacin, revista) que el titular
originario y/o el licenciador designen para ser reconocidos en el aviso legal, las condiciones de
uso, o de cualquier otra manera razonable.
iii.El ttulo de la obra o la prestacin si le es facilitado.
iv.El URI, si existe, que el licenciador especifique para ser vinculado a la obra o la prestacin,
a menos que tal URI no se refiera al aviso legal o a la informacin sobre la licencia de la obra
o la prestacin.
v.En el caso de una obra derivada, un aviso que identifique la transformacin de la obra en la
obra derivada (p. ej., "traduccin castellana de la obra de Autor Original," o "guin basado en
obra original de Autor Original").
Este reconocimiento debe hacerse de manera razonable. En el caso de una obra derivada o
incorporacin en una coleccin estos crditos debern aparecer como mnimo en el mismo lugar
donde se hallen los correspondientes a otros autores o titulares y de forma comparable a los mismos.

Pgina 5 de 22

Revisin: 4
Para evitar la duda, los crditos requeridos en esta seccin slo sern utilizados a efectos de
atribucin de la obra o la prestacin en la manera especificada anteriormente. Sin un permiso previo
por escrito, usted no puede afirmar ni dar a entender implcitamente ni explcitamente ninguna
conexin, patrocinio o aprobacin por parte del titular originario, el licenciador y/o las partes
reconocidas hacia usted o hacia el uso que hace de la obra o la prestacin.
c.Para evitar cualquier duda, debe hacerse notar que las restricciones anteriores (prrafos 4.a y 4.b)
no son de aplicacin a aquellas partes de la obra o la prestacin objeto de esta licencia que
nicamente puedan ser protegidas mediante el derecho sui generis sobre bases de datos recogido por
la ley nacional vigente implementando la directiva europea de bases de datos
5. Exoneracin de responsabilidad
A MENOS QUE SE ACUERDE MUTUAMENTE ENTRE LAS PARTES, EL LICENCIADOR OFRECE LA OBRA
O LA PRESTACIN TAL CUAL (ON AN "AS-IS" BASIS) Y NO CONFIERE NINGUNA GARANTA DE
CUALQUIER TIPO RESPECTO DE LA OBRA O LA PRESTACIN O DE LA PRESENCIA O AUSENCIA DE
ERRORES QUE PUEDAN O NO SER DESCUBIERTOS. ALGUNAS JURISDICCIONES NO PERMITEN LA
EXCLUSIN DE TALES GARANTAS, POR LO QUE TAL EXCLUSIN PUEDE NO SER DE APLICACIN A
USTED.
6. Limitacin de responsabilidad. SALVO QUE LO DISPONGA EXPRESA E IMPERATIVAMENTE LA LEY
APLICABLE, EN NINGN CASO EL LICENCIADOR SER RESPONSABLE ANTE USTED POR
CUALESQUIERA DAOS RESULTANTES, GENERALES O ESPECIALES (INCLUIDO EL DAO
EMERGENTE Y EL LUCRO CESANTE), FORTUITOS O CAUSALES, DIRECTOS O INDIRECTOS,
PRODUCIDOS EN CONEXIN CON ESTA LICENCIA O EL USO DE LA OBRA O LA PRESTACIN,
INCLUSO SI EL LICENCIADOR HUBIERA SIDO INFORMADO DE LA POSIBILIDAD DE TALES DAOS.
7. Finalizacin de la licencia
a.Esta licencia y la concesin de los derechos que contiene terminarn automticamente en caso de
cualquier incumplimiento de los trminos de la misma. Las personas o entidades que hayan recibido
de usted obras derivadas o colecciones bajo esta licencia, sin embargo, no vern sus licencias
finalizadas, siempre que tales personas o entidades se mantengan en el cumplimiento ntegro de esta
licencia. Las secciones 1, 2, 5, 6, 7 y 8 permanecern vigentes pese a cualquier finalizacin de esta
licencia.
b.Conforme a las condiciones y trminos anteriores, la concesin de derechos de esta licencia es
vigente por todo el plazo de proteccin de los derechos de propiedad intelectual segn la ley aplicable.
A pesar de lo anterior, el licenciador se reserva el derecho a divulgar o publicar la obra o la prestacin
en condiciones distintas a las presentes, o de retirar la obra o la prestacin en cualquier momento. No
obstante, ello no supondr dar por concluida esta licencia (o cualquier otra licencia que haya sido
concedida, o sea necesario ser concedida, bajo los trminos de esta licencia), que continuar vigente y
con efectos completos a no ser que haya finalizado conforme a lo establecido anteriormente, sin
perjuicio del derecho moral de arrepentimiento en los trminos reconocidos por la ley de propiedad
intelectual aplicable.
8. Miscelnea
a.Cada vez que usted realice cualquier tipo de explotacin de la obra o la prestacin, o de una
coleccin que la incorpore, el licenciador ofrece a los terceros y sucesivos licenciatarios la concesin
de derechos sobre la obra o la prestacin en las mismas condiciones y trminos que la licencia
concedida a usted.
b.Cada vez que usted realice cualquier tipo de explotacin de una obra derivada, el licenciador ofrece
a los terceros y sucesivos licenciatarios la concesin de derechos sobre la obra objeto de esta licencia
en las mismas condiciones y trminos que la licencia concedida a usted.
c.Si alguna disposicin de esta licencia resulta invlida o inaplicable segn la Ley vigente, ello no
afectar la validez o aplicabilidad del resto de los trminos de esta licencia y, sin ninguna accin
adicional por cualquiera las partes de este acuerdo, tal disposicin se entender reformada en lo
estrictamente necesario para hacer que tal disposicin sea vlida y ejecutiva.

Pgina 6 de 22

Revisin: 4
d.No se entender que existe renuncia respecto de algn trmino o disposicin de esta licencia, ni que
se consiente violacin alguna de la misma, a menos que tal renuncia o consentimiento figure por
escrito y lleve la firma de la parte que renuncie o consienta.

e.Esta licencia constituye el acuerdo pleno entre las partes con respecto a la obra o la prestacin
objeto de la licencia. No caben interpretaciones, acuerdos o condiciones con respecto a la obra o la
prestacin que no se encuentren expresamente especificados en la presente licencia. El licenciador no
estar obligado por ninguna disposicin complementaria que pueda aparecer en cualquier
comunicacin que le haga llegar usted. Esta licencia no se puede modificar sin el mutuo acuerdo por
escrito entre el licenciador y usted.

Pgina 7 de 22

Revisin: 4

Motivacin
Estos apuntes sobre Schema surgen de mi apremiante necesidad de validar una serie de documentos
XML.
Tuve que programar un exportador de datos que transformaba datos de una base de datos a XML,
estos XML deban mantenerse con un formato dado para que siguieran siendo compatibles con los
que utilizaba una aplacin ya existente.
El mayor problema con el que me encontr una vez finalizado el exportador fue el validar estos
documentos (que no tenan en su diseo original ni un DTD ni un Schema). Encontr una solucin
interesante en los XML-Schemas, ahora bien, al comenzar a mirar por Internet sent cierta
frustracin porque no me gustaban las explicaciones de la mayora de los artculos, o bien eran muy
serias, rodeadas de una parafernalia indescifrable o bien eran demasiado simplones y repetan una
y otra vez el mismo ejemplo estpido.
Es por esto que he realizado estos apuntes con los siguientes objetivos:
Explicar de forma sencilla que es Schema
Dar un repaso breve a la elaboracin de un Schema
Crear un ejemplo para aplicar lo visto

Audiencia
Este documento est dirigido a alguien que sabe lo que es un XML y que tiene un cierto bagaje en
informtica.
El perfil ideal es el de un programador que trabaja habitualmente con XML y nunca le han formado
en este rea o bien alguien que comienza a trabajar con XML por primera vez.

Pgina 8 de 22

Revisin: 4

Que es XML-Schema?
Un esquema XML no es ms que un documento XML que a su vez describe la estructura de un otro
documento XML que es el que se quiere validar.
Los motivos para validar un XML son variados, por ejemplo:

Asegurarnos de que la transmisin de datos entre dos puntos ha sido correcta en lineas con
alta tasa de fallos.

Asegurarnos de que una de las dos partes que se comunican mediante XML no tiene bugs y
transmite documentos errneos que pueden hacer fallar a la otra parte

Asegurarnos de que las dos partes transmiten la informacin en el mismo formato, como por
ejemplo las fechas.

En definitiva se trata de poder, dado un xml, decir si se sigue un acuerdo preestablecido(el


esquema) o no.
Una vez escrito el esquema que describe el xml que queremos tratar bastar con enlazar cada xml
que queramos validar al esquema y de esta forma se podr detectar si este est o no bien formado.

Conceptos bsicos
El esquema no es ms que un xml como otro cualquiera y por lo tanto debe estar formado como
tales. Tags, abiertos y cerrados, comentarios, elementos, atributos, etc.
El nodo padre del esquema se llamar <schema>.
Una vez abierto este tag <schema> dentro se especificar que es lo que debe contener todo
documento que siga este esquema.
<schema>
declaracin de elementos del documento Esto es lo que vamos a tener que picar
</schema>

En el esquema todo lo que vamos a hacer es definir los elementos que contiene el xml que sigue el
esquema.
Los elementos sern simples o complejos.

Elementos simples
Los elementos simples son los que solamente contienen texto, no contiene otros elementos hijos ni
tampoco atributos.
Eso si, el texto puede ser cualquier tipo de datos definido en schema (Integer,string, fechahora,booleano,etc) o cualquier tipo definido por nosotros, es posible incluso aadir restricciones
(llamadas facetas) u obligar a que se cumpla algn patrn mediante expresiones regulares.
Ejemplo:
<elemento> solo contengo texto </elemento>

Para definir un elemento usaremos un tag llamado, como no, element, por ejemplo:
<xs:element name="apellidos" type="xs:string"/>

Pgina 9 de 22

Revisin: 4
<xs:element name="edad" type="xs:integer"/>
<xs:element name="nacimiento" type="xs:date"/>

Hemos visto en el ejemplo como definir tres elementos simples y hemos comentado que se pueden
establecer restricciones sobre los datos, veamos como.

Restricciones sobre los datos


Podemos incluir los siguientes tipos de restricciones:

Sobre los valores

Sobre un conjunto de valores

Sobre los espacios en blanco

Sobre la longitud

Sobre patrones

Sobre los valores


Veamos como limitar la edad de un individuo para que valga de 0 a 100 aos.
<xs:element name="edad">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Sobre un conjunto de valores


Podemos obligar a que un valor se establezca dentro de unos lmites:
<xs:element name="color">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Rojo"/>
<xs:enumeration value="Verde"/>
<xs:enumeration value="Azul"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Si reescribimos lo anterior de la siguiente forma, podremos reaprovechar la definicin de color


RGB:
<xs:element name="color" type="colorRGB"/>
<xs:simpleType name="colorRGB">
<xs:restriction base="xs:string">
<xs:enumeration value="Rojo"/>
<xs:enumeration value="Verde"/>
<xs:enumeration value="Azul"/>
</xs:restriction>
</xs:simpleType>

Pgina 10 de 22

Revisin: 4

Sobre los espacios en blanco


Podemos jugar con los espacios en blanco para mantenerlos intocables,restringirlos o
eliminarlos.
El siguiente ejemplo los mantiene intocables, esto significa que retornos de carro, tabuladores y
espacios en blanco no sern alterados dentro del campo de tipo direccin:
<xs:element name="direccion">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Este otro ejemplo, haremos que se sustituyan todos los tabuladores,retornos de carro(CR) y fines de
linea (LF) por espacios en blanco:
<xs:element name="direccion">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="replace"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Colapsando es posible hacer que mltiples espacios en blancos, retornos de carro, tabuladores y
dems se colapsen a un solo espacio en blanco.
<xs:element name="direccion">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Sobre la longitud
Podemos especificar un mnimo o mximo de longitud, veamos dos ejemplos:
<xs:element name="apellido">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="apellido">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="8"/>
<xs:maxLength value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Vemos como es posible jugar con las anchuras de estos campos fijndolos a un tamao concreto o
indicando mrgenes.
Existen ms restricciones sobre tipos de datos en concreto como los numricos, en cualquier manual
de schema podris encontrarlos.

Pgina 11 de 22

Revisin: 4

Sobre patrones
Es posible tambin controlar mediante expresiones regulares los contenidos de un campo, esta es
una forma muy potente de asegurarnos el contenido deseado en cada campo:
<xs:element name="mayusculas">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([A-Z])*"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

En este ejemplo vemos como obligamos a que el elemento mayusculas tenga un contenido en
maysculas mediante una expresin regular.

Atributos
Hemos comentado que los tipos simples no pueden tener, entre otras cosas, atributos. Ahora bien,
los atributos, que sern utilizados en los tipos complejos, son declarados en si mismos como un
tipo simple.
La forma general de declarar un atributo es como sigue:
<xs:attribute name="xxx" type="yyy"/>

Donde xxx es el nombre del atributo y yyy ser un tipo de datos de los nativos de schema o de los
definidos por nosotros, veamos como definir un atributo Alias para usarlo dentro de un elemento
nombre:
<xs:attribute name="alias" type="xs:string"/>
<!-- Ahora podemos usarlo dentro de un elemento nombre -->
<nombre alias=El cadenas>Iker</nombre>

Tipos de datos
Antes de comezar a explicar los elementos complejos. Habreis notado que estamos usando tipos de
datos como por ejemplo el string. Vamos a comentar a continuacin los tipos de datos ms
bsicos de los que podemos disponer.

Categoras de los tipos de datos


Antes de comenzar con la enumeracin de los tipos de datos, debemos distinguir las categoras en
las que podemos agrupar los tipos de datos puesto que se usan en los manuales de referencia y es
til conocerlas. Bsicamente es posible agrupar los tipos de datos en:

Atmicos, listas, uniones

Primitivos o derivados

Built-in o definidos por el usuario

Atmicos listas y uniones


Atmicos son aquellos que no pueden ser divididos en tipos ms sencillos.
Pgina 12 de 22

Revisin: 4
Listas son aquellos tipos que tienen valores cada uno de los cuales consiste en una secuencia de
longitud finita (puede que vacia) de valores de tipo atmico
Las uniones consisten en tipos de datos formados por la union de otros tipos. Este nuevo tipo
puede ser cualquiera de esos tipos pero solo uno de ellos a la vez. Por ejemplo:
<element name="Currency">
<simpleType>
<union memberTypes="int float" />
</simpleType>
</element>

Esto define un tipo llamado moneda que puede ser de tipo int o de tipo float, cuando veamos
un dato de este tipo podr ser un int o un float. El validador xml primero mirar si viene un tipo int
y sino un tipo float antes de dar un error.

Primitivos o derivados
Los primitivos son aquellos que vienen definidos en la especificacin de schema, derivados por el
contrario son los que un usuario puede crear nuevos partiendo de los primitivos.

Built-in o definidos por el usuario


Los built-in son los incluidos en la especificacin de schema y pueden ser primitivos o derivados
puesto que la especificacin incluye tipos derivados que son muy comunes para que los
desarrolladores no tengan que derivar constantemente tipos habituales.
Los definidos por el usuario pues son, eso, nuevos tipos que no estaban disponibles.
Pasamos ahora a ver los tipos de datos propiamente dichos.

Tipos String
En esta categora caen varios tipos de datos que son los siguientes.

Tipo string
Cualquier cadena que contenga caracteres, retornos de carro, fin de linea, y caracteres de tabulacin.
Por ejemplo:
<xs:element name=nombre type=xs:String/>
<nombre>Unai Estbanez</nombre>

Tipo NormalizedString
Este tipo se deriva de String. Contiene caracteres pero el procesador XML eliminar fines de lnea,
retornos de carro y caracters de tabulacin.
Un Ejemplo de declaracin de este tipo es:
<xs:element name="nombre" type="xs:normalizedString"/>
<nombre>

Unai Estbanez

</nombre>

En este caso el procesador XML eliminar los tabuladores.


Pgina 13 de 22

Revisin: 4

Tipo Token
El tipo token tambin deriva de String.
Contendr caracteres pero el procesador XML eliminar line feeds,retornos de carro, tabuladores,
espacios en blanco de inicio y de fin y espacios mltiples se compactarn a simples.
Ejemplo:
<xs:element name="customer" type="xs:token"/>

Tipos Date y Time


Estos tipos servirn para manejar fechas y horas.
Tenemos, bsicamente, los siguientes:

Date (YYYY-MM-DD)

Time (hh:mm:ss)

DateTime (YYYY-MM-DDThh:mm:ss)

Duracin

De momento no dispongo de tiempo para comentar ms en profundidad estos


tipos de datos. Podeis encontrar en internet pginas de referencia que explican
mas en detalle estos tipos.

Tipos Numricos
Disponemos de:

byte

decimal

int

integer

long

negativeInteger

nonNegativeInteger

nonPositiveInteger

Pgina 14 de 22

Revisin: 4

positiveInteger

short

unsignedLong

unsignedInt

unsignedShort

unsignedByte

Tipos mixtos
En este apartado se engloban tipos variados como:

Boolean

Binary

anyURI

base64Binary

double

float

hexBinary

otros...

Definicin de nuevos tipos de datos


Es posible definir tus propios tipos de datos basndonos en uno ya existente, para ello usaremos
restricciones sobre un tipo simple.
Ejemplo: Definir el saldo mximo en un monedero
<simpleType name="maxSaldo">
<restriction base="integer">
<maxInclusive value="9000" />
</restriction>
</simpleType>

Elementos complejos
Un elemento complejo es aquel que contenga otro elemento y/o atributos.
Hay cuatro tipos de elementos complejos:

Elementos que contienen solo otros elementos

Elementos vacios

Pgina 15 de 22

Revisin: 4

Elementos que contienen solo texto

Elementos que contienen otros elementos y texto

En estas cuatro categoras adems se pueden incluir atributos en los elementos.

Elementos que contienen solo otros elementos


Veamos como definir un tipo complejo (elemento que contiene solo otros elementos):
<xs:element name="alumno" type="persona"/>
<xs:complexType name="persona">
<xs:sequence>
<xs:element name="apellido" type="xs:string"/>
<xs:element name="nombre" type="xs:string"/>
</xs:sequence>
</xs:complexType>

Esto se traduce en poder utilizar elementos como:


<persona>
<apellido>Estbanez</apellido>
<nombre>Unai</nombre>
</persona>

Hemos usado en esta definicin un indicador secuencia (sequence) que explicaremos ms adelante.
Se puede apreciar en el ejemplo como esto es similar a definir objetos en un lenguaje de
programacin. Adems es posible heredar, veamos como:
<xs:element name="destinatario" type="direcion"/>
<xs:complexType name="persona">
<xs:sequence>
<xs:element name="apellido" type="xs:string"/>
<xs:element name="nombre" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="direccion">
<xs:complexContent>
<xs:extension base="persona">
<xs:sequence>
<xs:element name="calle" type="xs:string"/>
<xs:element name="ciudad" type="xs:string"/>
<xs:element name="pais" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>

Elementos vacios
Veamos como definirlos:
<xs:element name="nombre" type="nombre_t"/>
<xs:complexType name="nombre_t">
<xs:attribute name="alias" type="xs:string"/>
</xs:complexType>

Esto nos permitira definir elementos como estos:


<nombre alias=Capitan Morgan/>
Pgina 16 de 22

Revisin: 4

Elementos que contienen solo texto


Es posible definir elemento que solo contengan texto, lo podemos hacer por ejemplo utilizando un
tipo base de schema y ampliandolo:
<xs:element name="Pie">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="pais" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<pie pais=Espaa>41</pie>

Pgina 17 de 22

Revisin: 4

Elementos que contienen otros elementos y texto


Supongamos que queremos validar XMLs con este formato:
<carta>
Querido Seor:<nombre>Alex Conceiro</nombre>.
Su pedido <pedido>1032</pedido>
ser entregado el <fechaEntrega>2001-07-13</fechaEntrega>.
</carta>

Definiriamos un schema como el siguiente,ojo al atributo mixed, es necesario:


<xs:element name="carta" type="tipoCarta"/>
<xs:complexType name="tipoCarta" mixed="true">
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="pedido" type="xs:positiveInteger"/>
<xs:element name="fechaEntrega" type="xs:date"/>
</xs:sequence>
</xs:complexType>

Indicadores
Sirven para controlar como utilizar los elementos en los documentos
Hay siete tipos:

Indicadores de orden
All
Choice
Sequence

Indicadores de frecuencia de aparicin


maxOccurs
minOccurs

Indicadores de grupo
Grupos de elementos
Grupos de atributos

All
El indicador all especifica que los elementos hijos pueden aparecer en cualquier orden y que
aparecen como mucho solo una vez
<xs:element name="persona">
<xs:complexType>
<xs:all>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="apellido" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>

Pgina 18 de 22

Revisin: 4

Choice
Indica que podran aparecer como elementos hijos uno u otro de los definidos, en este caso una
persona puede ser trabajadora o miembro de un club por ejemplo:
<xs:element name="persona">
<xs:complexType>
<xs:choice>
<xs:element name="empleado" type="empleado"/>
<xs:element name="miembro" type="miembro"/>
</xs:choice>
</xs:complexType>
</xs:element>

Sequence
Se indica as en que orden exacto deben aparecer los hijos y que deben aparecer todos una vez.
<xs:element name="persona">
<xs:complexType>
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="apellido" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

maxOccurs y minOccurs
Indica respectivamente el mximo y mnimo nmero de veces que aparecer un elemento, en este
caso una persona con un nombre dado puede tener desde 0 hasta 10 nombres de hijos asociados.
<xs:element name="persona">
<xs:complexType>
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="nombreHijos" type="xs:string"
maxOccurs="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>

Indicadores de grupo y de atributo


Sirven para agrupar elementos o atributos bajo una misma denominacin:
<xs:group name="grupoPersona">
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="apellido" type="xs:string"/>
<xs:element name="cumpleaos" type="xs:date"/>
</xs:sequence>
</xs:group>

Ahora es posible incluir este grupo dentro de otra definicin, observes el atributo href para hacer
referencia a una definicin dada:
<xs:element name="persona" type="infoPersona"/>
<xs:complexType name="infoPersona">
<xs:sequence>
<xs:group ref="grupoPersona"/>
<xs:element name="pais" type="xs:string"/>
</xs:sequence>
</xs:complexType>

Pgina 19 de 22

Revisin: 4
Podemos hacer algo similar pero agrupando atributos
<xs:attributeGroup name="grupoAttrPersona">
<xs:attribute name="nombre" type="xs:string"/>
<xs:attribute name="apellidos" type="xs:string"/>
<xs:attribute name="cumpleaos" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="persona">
<xs:complexType>
<xs:attributeGroup ref="grupoAttrPersona"/>
</xs:complexType>
</xs:element>

De esta forma se pueden reaprovechar muchas definiciones.

Namespaces
Los namespaces (espacios de nombres) son una forma de poder asociar los nombres de elementos
que definimos a un nombre (el namespace) nico para evitar duplicidad de nombres.
Me explicar mejor, supongamos que definimos un grupo de atributos para definir tipos de dia
(festivo,laboral,etc). Este grupo se define de la siguiente forma
<xs:attributeGroup name="DayType_attr">
<xs:attribute name="Name" type="xs:string" use="required"/>
<xs:attribute name="Abr" type="xs:string" use="required"/>
<xs:attribute name="Type" type="xs:integer" use="required"/>
</xs:attributeGroup>

De esta forma podemos usar esta definicin por ejemplo de la siguiente manera:
<DayType Name="Sabado" Abbr="SABA" Type="2"/>

Esto nos permitira definir que el Sbado es de tipo 2 y nosotros en otra parte definiremos que
significa que un dia sea de tipo 2.
El caso es que supongamos que otra persona define en otro esquema un grupo de atributos y
tambin le llama DayType_attr y nosotros incluimos ese esquema dentro del nuestro. Como
diferenciar cuando queremos usar uno u otro?, la solucin son los namespaces.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.unainet.net"
xmlns:tns="http://www.unainet.net"
elementFormDefault="qualified">
...
</xs:schema>

Esto significa lo siguiente:


xmlns:xs=http://www.w3.org/2001/XMLSchema"
Usamos un namespace xml (xmlsn), cuyo prefijo ser xs y cuya nombre es el sigueinte URI
http://www.w3.org/2001/XMLSchema.
Esto NO indica que haya un esquema en esa direccin ni nada por el estilo,simplemente se usan
URIs para definir namespaces para asegurar de que no colisionan nombres de namespaces.
Ahora podemos usar los elementos del w3 consortium prefijandolos con xs, tal y como se puede
ver en el ejemplo anterior.
Por otro lado tenemos el atributo targetNamespace que nos indica que los elementos definidos en
Pgina 20 de 22

Revisin: 4
este esquema pertenecern a un namespace llamado http://www.unainet.net y ademas mediante el
atributo xmlns:tns="http://www.unainet.net" indicamos que el namesapce http://www.unainet.net
se prefija con tns.
Por ltimo el atributo elementFormDefault="qualified" nos obliga a prefijar todos los elementos
que usemos en el esquema.

Enlazar un esquema con un XML


Fijmonos en el siguiente ejemplo:
<Download xmlns="http://www.unainet.net" Code="CAL" Format="01" Version="12" SourceVersion="0"
CreationDate="200911061644" ActivationDate="200911061644" Author=""
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.unainet.net
cal.xsd">

</Download>

El atributo xmlns=http://www.unainet.net indica que el namespace por defecto es


http://www.unainet.net.
El atributo xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance" incluye un namespace ms
en el documento xml y lo prefija con xsi.
Ahora que podemos hacer uso de las definiciones que se incluyan en xsi, podemos utilizar el
siguiente atributo:
xsi:schemaLocation="http://www.unainet.net cal.xsd", que indica donde reside el esquema que
vamos a utilizar.
Una vez ms, NO tiene porqu existir ningn documento cal.xsd en unainet.net aunque sera
interesante para poder acceder al esquema siempre que haya conexin. En caso de no existir habr
que asegurarse de que existe entonces en local.

Reaprovechar definiciones usando includes


Supongamos que queremos reaprovechar definiciones de elementos comunes a varios esquemas
para no reescribir una y otra vez estas.
Se puede hacer un esquema coumun y enlazar con este desde el resto de esquemas.
Esto se hace mediante un include.
Veamos un ejemplo en el que reaprovechamos un elemento que consiste en un tipo de datos carcter
maysucla. Metemos esta definicion en un fichero common.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tlv="http://www.telvent.com"
targetNamespace="http://www.telvent.com" elementFormDefault="qualified">
<xs:simpleType name="SingleUpperCaseChar">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

Pgina 21 de 22

Revisin: 4
Ahora queremos reaprovecharla desde otro esquema, pongamos uno que se llama lin.xsd,fijaos
como se utiliza el elemento include:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tlv="http://www.telvent.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://www.telvent.com"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:include schemaLocation="common.xsd"/>
</xs:schema>

Ahora es posible utilizar SingleUpperCaseChar y cualquier otra definicin que hayamos hecho en
common.xsd

Como testear tu schema en local


Una vez definido tu schema querrs probarlo con alguna herramienta para ver que actua como tu
deseas. Para esto podemos usar la siguiente utilidad de linea de comandos xmllint :
xmllint --noout --schema <nombre_schema.xsd> <xml_a_validar.xml>
Donde (los < y > no se escriben ):
--noout sirve para no sacar el rbol de resultados que por defecto esta activado.
--schema sirve para indicarle a la utilidad que vamos a usar schema para validar y le indicamos el
schema.
El ltimo parmetro se trata del xml que queremos validar.
Si todo ha ido bien, saldr un mensaje que indica que se ha validado correctamente.
Esta utilidad esta disponible tanto en sistemas Linux como en Windows, buscando un poco por
internet encontrareis como instalarla si es que no la tenis ya.

Pgina 22 de 22

También podría gustarte