Title: XML Schemas
1XML Schemas
- LENGUAJES PARA INTERNET
- 2006
- MarÃa RodrÃguez Fernández
2XML Schemas
- Schemas permiten
- Describir estructura
- Anidación
- Multiplicidad
- Ordenamiento
- Describir tipos
- Para velocidad operatoria
- Para mejor almacenamiento
- Para búsquedas
- Para ingreso de datos
- Para detectar errores
- Representados en archivos .XSD
3Ejemplo 1 XML Schema
lt?XML version"1.0"gt ltlibro isbn"123456"gt lttÃt
ulogtEl Alephlt/tÃtulogt ltautorgtJ. L.
Borgeslt/autorgt ltañogt1946lt/añogt ltpreciogt1560lt/p
reciogt lt/librogt
- El DTD correspondiente es
-
lt!ELEMENT libro (tÃtulo, autor, año?,
precio)gtlt!ELEMENT tÃtulo (PCDATA)gtlt!ELEMENT
autor (PCDATA)gtlt!ELEMENT año (PCDATA)gt (entero
positivo, mayor de 1900)lt!ELEMENT precio
(PCDATA)gt (non-negative integer)lt!ATTLIST libro
isbn ID REQUIREDgt
4ltschema targetNamespace'http//www.ac.upc.es/aad/
libro' xmlns'http//www.w3.org/2001/XMLSchema'gt
ltsimpleType name'linea'gt ltrestriction
base'string'gt ltmaxLength value'50'/gt
lt/restrictiongt lt/simpleTypegt ltsimpleType
name'sigloXX'gt ltrestriction base'integer'gt
ltminInclusive value'1900'/gt ltmaxInclusive
value'1999'/gt lt/restrictiongt lt/simpleTypegt ltel
ement name'libro' type'TipoLibro'/gt ltcomplexTyp
e name'TipoLibro'gt ltsequencegt ltelement
name'titulo' type'linea'/gt ltelement
name'autor' type'linea'/gt ltelement
name'anyo' type'sigloXX'/gt ltelement
name'precio' type'decimal'gt
ltcomplexTypegt ltattribute name'divisa'
type'string'/gt lt/complexTypegt
lt/elementgt lt/sequencegt ltattribute name'isbn'
type'ID'/gt lt/complexTypegt lt/schemagt
Espacio de nombres
Raiz
5Ventajas de los Schemas
- Utilizan una cantidad mayor de tipos de dato
- Son extensibles
- Están escritos en XML
- Resulta más largo que un DTD pero a cambio
- Mayor precisión en la definición de tipos de
datos - ltdate typedategt1999-03-11lt/dategt
- 11 de marzo o 3 de noviembre?
- La exportación e importación de datos en formato
xml más sencilla para cualquiera que use un
procesador de documentos xml que previamente
valide el documento contra un esquema
6De DTD a Schema
lt!ELEMENT address (company?,
name, street, city, state, zip,
phone)gt lt!ELEMENT company
(PCDATA)gt lt!ELEMENT name (PCDATA)gt lt!ELEMENT
street (PCDATA)gt lt!ELEMENT city (PCDATA)gt lt!ELEM
ENT state (PCDATA)gt lt!ELEMENT zip (PCDATA)gt lt!EL
EMENT phone (PCDATA)gt
schema en XML
ltelementType name"address" gt ltsequencegt
ltelementType name"company" minOccur"0"
maxOccur "1"/gt ltelementType name"name"
minOccur"1" maxOccur "1"/gt
ltelementType name"street" minOccur"1"
maxOccur "1"/gt ltelementType name"city"
minOccur"1" maxOccur "1"/gt
ltelementType name"state" minOccur"1"
maxOccur "1"/gt ltelementType name"zip"
minOccur"1" maxOccur "1"/gt
ltelementType name"phone" minOccur"1"
maxOccur "5"/gt ltsequencegt lt/elementTypegt
7Reglas
minOccurrs0 maxOcurrsunbounded
minOccurrs1 maxOcurrsunbounded ? minOccurrs0
maxOcurrs1 , xsdsequence xsdchoice X
xsdelement
8Vincular un Schema a un documento XML
- ltdoc
- xmlns"http//www.w3schools.com"
- xmlnsxsi"http//www.w3.org/2001/XMLSchema-instan
ce" - xsischemaLocation"http//www.w3schools.com
note.xsdgt
9Contenido básico del schema
- El espacio de nombres del XMLSchema es usualmente
xsd - ltxsdschema xmlnsxsd"http//www.w3.org/2001/XM
LSchema"gt - Schema es el elemento raÃz del documento
10Definir un elemento simple
- Sólo puede contener texto (cualquier tipo de
dato) pero no otros elementos ni atributos - Se define como
- ltxselement name"name" type"type"
/gtdonde - name es el nombre del elemento
- Los valores más comunes de tipos de datos (type)
son xsboolean xsinteger
xsdate xsstring xsdecimal xstime - Otros atributos
- default"default value" si no se especifica
otro valor - fixed"value" no se puede especificar otro valor
- Ejemplo ltxsdelement name"apellido"
type"xsdstring"/gt
11Definir un atributo
- Los atributos se declaran
- ltxsattribute name"name" type"type"
/gtDonde - name y type es igual que en xselement
- Otros atributos
- default"default value" si no se especifica
otro valor - fixed"value" no se puede especificar otro
valor - use"optional" el atributo no es
obligatorio (por defecto) - use"required" el atributo debe estar
presente - Ejemplo ltxsdattribute nameidioma"
type"xsdstring"/gt
12Guión de prácticas
- http//petra.euitio.uniovi.es/mariarf
13Definición de tipos
- De los tipos básicos pueden derivarse nuevos
tipos, simples o complejos. - Los tipos simples contienen texto y se definen
mediante xsdsimpleType - ltxsdelement namenombre typexsdstring/gt
- ltxsdattribute nameidentificacion
typexsdID/gt - y los complejos Pueden contener cualquier
combinación de contenido de elementos ,
información de caracteres y atributos y se
definen con xsdcomplexType
14(No Transcript)
15Restricciones
- Permiten restringir el valor que se le puede dar
a un elemento o atributo XML. - Tipos
- Sobre valores
- Sobre un conjunto de valores
- Sobre series de valores
- Sobre espacios en blanco
16Restricciones sobre valores
- La forma general de establecer una restricción
sobre un valor es - ltxselement name"name"gt (o xsattribute)
ltxsrestriction base"type"gt ... Las
restricciones ... lt/xsrestrictiongtlt/xselem
entgt - Por ejemplo
- ltxselement nameedad"gt ltxsrestriction
base"xsinteger"gt ltxsminInclusive
value"0"gt ltxsmaxInclusive
value"140"gt lt/xsrestrictiongtlt/xselementgt
17Restricciones sobre un conjunto de valores
Enumeration
- Restringe el valor a un conjunto de valores
- Ejemplo
- ltxselement nameestacion"gt
ltxssimpleTypegt ltxsrestriction
base"xsstring"gt ltxsenumeration
valueprimavera"/gt
ltxsenumeration valueverano"/gt
ltxsenumeration valueotoño"/gt
ltxsenumeration valueinvierno"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xseleme
ntgt
18Restricciones sobre series de valores
- Para limitar el contenido del elemento xml
definiendo las series de números y letras que se
pueden usar usaremos patrones
ltxselement name"letra"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt ltxspattern
value"a-z"/gt lt/xsrestrictiongt lt/xssimpleTyp
egt lt/xselementgt
19Restricciones sobre espacios en blanco
- whiteSpace dice lo que hay que hacer con los
espacios en blanco - value"preserve" Mantiene los espacios en
blanco como están - value"replace" Campia los espacios en
blanco (saltos, tab)por espacios - value"collapse" Reemplaza todas las
secuencias de espacios en blanco por un sólo
espacio en blanco
20Restricciones en números
- minInclusive número debe ser value
- minExclusive -- número debe ser gt value
- maxInclusive -- número debe ser value
- maxExclusive -- número debe ser lt value
- totalDigits -- número debe tener exactamente
value dÃgitos - fractionDigits número no debe tener más de
value dÃgitos después del punto decimal.
21Restricciones en strings
- length el string debe contener exactamente
value caracteres - minLength el string debe contener al menos
value caracteres - maxLength el string no debe contener más de
value caracteres - pattern el value es una expresión regular que
el string debe cumplir
22Elementos complejos
- Elementos que contienen otros elementos hijo o
que tienen atributos. - Se suelen dividir en 4 tipos
- Elementos vacÃos
- Elementos no vacÃos con atributos
- Elementos con elementos hijos
- Elementos con elementos hijos y con texto o
valor propio
23Ejemplos de elementos complejos
ltproduct pid"1345"/gt
ltcomida tipopostregtheladolt/comidagt
ltdescripciongtSucedió el ltdategt03.03.99lt/dategtlt/des
cripciongt
ltempleadogt ltnombregtManuellt/nombregt ltapellidosgtSuar
ezlt/apellidosgt lt/empleadogt
24Sintaxis
- Se definen como ltxselement name"name"gt
ltxscomplexTypegt ...
lt/xscomplexTypegt lt/xselementgt - Ejemplo
ltxsdelement name"empleado"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement name"nombre" type"xsdstring"/gt
ltxsdelement name"apellidos"
type"xsdstring"/gt lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt
25Segunda versión
- También podremos usar la siguiente sintaxis si
queremos usar el tipo en más de un elemento
ltxsdelement name"empleado" type"personainfo"/gt
ltxsdelement name"estudiante" type"personainfo"/
gt ltxsdelement name"miembro" type"personainfo"/gt
ltxsdcomplexType name"personainfo"gt
ltxsdsequencegt ltxsdelement
name"nombre" type"xsdstring"/gt
ltxsdelement name"apellido" type"xsdstring"/gt
lt/xsdsequencegt lt/xsdcomplexTypegt
26Extensión y derivación
- Un tipo complejo puede estar basado en otro tipo
complejo - ltxscomplexType name"newType"gt
ltxscomplexContentgt ltxsextension
base"otherType"gt ...cosas
nuevas... lt/xsextensiongt
lt/xscomplexContentgtlt/xscomplexTypegt
27Ejemplo de extensión
- Definir un tipo complejo que se adapte a la
dirección postal para Estados Unidos, asumiendo
que ya hay definido un tipo Dirección - ltxscomplexType nameUSADireccion"gtltxscomplexC
ontentgt ltxsextension basetipoDireccion"gt
ltsequencegt - ltelement nameestado
typeUSAEstado/gt ltelement
namecodigopostal typepositiveInteger/gt - lt/sequencegt lt/xsextensiongtlt/xscom
plexContentgt - lt/xscomplexTypegt
28Herencia
ltxsdelement name"empleado" type"fullpersonainfo
"/gt ltxsdcomplexType name"personainfo"gt
ltxsdsequencegt ltxsdelement name"nombre"
type"xsdstring"/gt ltxsdelement
name"apellido" type"xsdstring"/gt
lt/xsdsequencegt lt/xsdcomplexTypegt ltxsdcomplexTyp
e name"fullpersonainfo"gt ltxsdcomplexContentgt
ltxsdextension base"personainfo"gt
ltxsdsequencegt ltxsdelement
name"direccion" type"xsdstring"/gt
ltxsdelement name"ciudad" type"xsdstring"/gt
ltxsdelement name"pais" type"xsdstring"/gt
lt/xsdsequencegt lt/xsdextensiongt
lt/xsdcomplexContentgt lt/xsdcomplexTypegt
29Elementos vacÃos con atributos
- Los elementos vacÃos son complejos
ltxsdelement name"producto"gt
ltxsdcomplexTypegt ltxsdattribute
name"prodid" type"xsdpositiveInteger"/gt
lt/xsdcomplexTypegt lt/xsdelementgt
30Elementos de texto con atributos
- ltxsdelement name"shoesize"gt
- ltxsdcomplexTypegt
- ltxsdsimpleContentgt
- ltxsdextension base"xsdinteger"gt
- ltxsdattribute name"country"
type"xsdstring" /gt lt/xsdextensiongt
- lt/xsdsimpleContentgt
- lt/xsdcomplexTypegt
- lt/xsdelementgt
31Elementos mixtos
- Pueden contener texto y elementos
- Se añade mixed"true" al elemento xscomplexType
- El texto no se menciona en el elemento y puede ir
en cualquier sitio (básicamente se ignora) - ltxscomplexType name"paragraph" mixed"true"gt
ltxssequencegt ltxselement
name"someName
type"xsanyType"/gt lt/xssequencegtlt/xscomple
xTypegt
32Indicadores
- De Orden
- En un determinado orden o secuencia sequence
- Pudiendo el autor del documento escoger alguno de
los elementos del grupo choice - Dar al autor total libertad tanto respecto al
orden como a la selección de elementos all - De ocurrencias cardinalidades
33xssequence
- Elementos que contienen elementos
- ltxsdelement name"persona"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement name " nombre" type"xsdstring"
/gt ltxsdelement name " apellido"
type"xsdstring" /gt lt/xsdsequencegt
lt/xsdcomplexTypegtlt/xsdelementgt
34xschoice
- Elementos que contienen alternativa de elementos
- ltxselement nametransporte"gt
- ltxscomplexTypegt ltxschoicegt
ltxselement name " tren" type"xsstring" /gt
ltxselement name " avion" type"xsstring"
/gt - ltxselement name " coche"
type"xsstring" /gt lt/xschoicegtlt/xscomplexTypegt
- lt/xselementgt
35xsall
- xsall permite a los elementos aparecer en
cualquier orden - ltxsdelement name"person"gt ltxsdcomplexTypegt
ltxsdallgt ltxsdelement name "nombre"
type"xsdstring" /gt ltxsdelement name
"apellidos" type"xsdstring" /gt
lt/xsdallgt lt/xsdcomplexTypegtlt/xsdelementgt
36Cardinalidades
- minOccurs y maxOccurs
- Se utilizan para indicar el número máximo y
mÃnimo de veces que puede aparecer un elemento
hijo de un elemento complejo - minOccurs0 Opcionalidad
- maxOccurs unbounded no existe valor lÃmite
37Ejercicio
- Transforma el modelo de contenido
- (a(b, c?))
- en una definición mediante XMLSchema
38Solución
- ltcomplexTypegt
- ltchoice minOccurs0 maxOccursunboundedgt
- ltelement refa/gt
- ltsequencegt
- ltelement refb/gt
- ltelement refc minOccurs0
maxOccurs1/gt - lt/sequencegt
- lt/choicegt
- lt/complexTypegt
39Completar el documento Esquema
- Generalización de comentarios
- annotation mecanismo para documentar los
componentes de un esquema, haciendo una función
similar a los comentarios - appinfo proporciona información a otras
aplicaciones, lo que supone un procesamiento
externo al propio documento - documentation texto o referencia a texto dentro
del elemento annotation
40Ejemplo
- ltxsdcomplexType nombreelementogt
- ltxsdannotationgt
- ltxsddocumentationgteste elemento es ..
lt/xsddocumentationgt - lt/xsdannotationgt
- lt/xsdcomplexTypegt
41Primitivas de un Schema
- schema es el elemento root.
- annotation pone comentarios al complexType.
Primitivas appinfo y documentation. - complexType equivalente a una combinación de
atributos y la lista de elementos que están entre
paréntesis en una declaración de una DTD. - elementdefine un elemento y utiliza ciertos
atributos adicionales. - Type attribute asocia un tipo simple o complejo
a un elemento. - minOcurrs y maxOcurrs especifica la cantidad
máxima y mÃnima que un elemento ocurre.
42Primitivas de un Schema (2)
- attribute elemento hijo de un complexType o de
un attributeGroup. Tienen un scope local. - group Element permite agrupar elementos de la
misma forma que se hacia con paréntesis en los
DTDs. - choice, sequence all Elements
43Ya no necesitamos DTDs?
- Schemas no proporcionan la funcionalidad ENTITY
- Incluidos en la especificación XML (otras
sintaxis requieren ir en fichero aparte)
44Referencias
- Recomendación XML Schemas
- Introducción a los conceptos http//www.w3.org/TR
/xmlschema-0/ - Estructuras http//www.w3.org/TR/xmlschema-1/
- Tipos de datos http//www.w3.org/TR/xmlschema-2/.
- Validador de XML Schemas
- http//www.w3.org/2001/03/webdata/xsv
45Alguna pregunta?