Title: XML Schema (XSD)
1XML Schema (XSD)
2XML Schema Introducción
- Un archivo XML Schema
- Define los elementos que pueden aparecer en un
documento - Define los atributos que pueden aparecer en un
documento - Defines que elementos son elementos hijos en la
jerarquía - Define el orden de los elementos hijos
- Define la cantidad de elementos hijos
- Define si un elemento es vacío (empty) o puede
incluir texto - Define los tipos de datos para los elementos y
los atributos - Define los valores por default y fijos para los
elementos y los atributos
3XML Schema Introducción
- XML Schemas son extensibles a futuras adiciones
- XML Schemas son más ricos y poderosos que los
DTDs - XML Schemas están escritos de acuerdo a la
sintaxis XML - XML Schemas soportan tipos de datos
- XML Schemas soportan namespaces
4Esquema XML (XML Schema)
- Soportado por W3C (http//www.w3.org/XML/Schema)
- XML Schema was approved as a W3C Recommendation
on 2 May 2001 and a second edition incorporating
many errata was published on 28 October 2004
5XML Schema Introducción
- Con el soporte de tipos de datos
- Es fácil describir el contenido del documento que
es permisible - Es fácil validar si los datos son correctos
- Es fácil trabajar con datos provenientes de una
base de datos - Es fácil definir restricciones en los datos
(facetas) - Es fácil definir patrones de datos (formato de
los datos) - Es fácil convertir datos entre diferentes tipos
6XML Schema Introducción
- Beneficios de que XML Schema se escriba en XML
- No es necesario aprender un nuevo lenguaje
- Se puede usar el mismo editor de XML
- Se puede usar el mismo parser de XML para
verificar la sintaxis de los archivos XML Schema - Se puede manipular cada esquema usando XML DOM
- Se puede transformar el esquema con XSLT
7XML Schema Comunicación segura de datos
- Suponga la siguiente fecha "03-11-2004
- 3 de Noviembre del 2004 o 11de Marzo de 2004?
- Un elemento XML con el tipo de dato siguiente
- ltdate type"date"gt2004-03-11lt/dategt
- Asegura el entendimiento del contenido entre
aplicaciones, debido a que el tipo de dato XML
conocido como date requiere el formato
"YYYY-MM-DD".
8De DTD a XML Schema
- lt?xml version"1.0"?gtltnotegt lttogtTovelt/togt
ltfromgtJanilt/fromgt ltheadinggtReminderlt/headinggt
ltbodygtTo write Tove!lt/bodygtlt/notegt
- lt!ELEMENT note (to, from, heading,
body)gtlt!ELEMENT to (PCDATA)gtlt!ELEMENT from
(PCDATA)gtlt!ELEMENT heading (PCDATA)gtlt!ELEMENT
body (PCDATA)gt
lt?xml version"1.0"?gtltxsschema
xmlnsxs"http//www.w3.org/2001/XMLSchema"target
Namespace"http//www.mysite.com"xmlns"http//ww
w.mysite.com"elementFormDefault"qualified"gtltxs
element name"note"gt ltxscomplexTypegt
ltxssequencegt ltxselement name"to"
type"xsstring"/gt ltxselement name"from"
type"xsstring"/gt ltxselement
name"heading" type"xsstring"/gt
ltxselement name"body" type"xsstring"/gt
lt/xssequencegt lt/xscomplexTypegtlt/xselementgt
lt/xsschemagt
9Referencia al archivo de definición
- lt?xml version"1.0"?gtlt!DOCTYPE note
SYSTEM"http//www.mysite.com/dtd/note.dtd"gtltnot
egt lttogtTovelt/togt ltfromgtJanilt/fromgt
ltheadinggtReminderlt/headinggt ltbodygtDon't forget
me this weekend!lt/bodygtlt/notegt
- lt?xml version"1.0"?gtltnotexmlns"http//www.mys
ite.com"xmlnsxsi"http//www.w3.org/2001/XMLSche
ma-instance"xsischemaLocation"http//www.mysite
.com note.xsd"gt lttogtTovelt/togt
ltfromgtJanilt/fromgt ltheadinggtReminderlt/headinggt
ltbodygtDon't forget me this weekend!lt/bodygtlt/notegt
10Declaración en el esquema
Prefijo
Elementos y tipos del esquema vienen de
www.w3.org/...
Elementos definidos (to, from, ) vienen de
www.mysite.com
- lt?xml version"1.0"?gtltxsschema
xmlnsxs"http//www.w3.org/2001/XMLSchema"target
Namespace"http//www.mysite.com"xmlns"http//ww
w.mysite.com"elementFormDefault"qualified"gt...
...lt/xsschemagt
Elemento raíz
Namespace por default
Namespace qualified
11Referencia al XML Schema
Los elementos usados están declarados en este
namespace
- lt?xml version"1.0"?gtltnote
- xmlns"http//www.mysite.com"
- xmlnsxsi"http//www.w3.org/2001/XMLSchema-instan
ce" - xsischemaLocation"http//www.mysite.com
note.xsd"gt - lttogtTovelt/togt ltfromgtJanilt/fromgt
ltheadinggtReminderlt/headinggt ltbodygtDon't forget
me this weekend!lt/bodygt - lt/notegt
Namespace de la instancia del XML Schema
Namespace
Nombre y ubicación del XML Schema
12Elementos simples
- No puede contener otros elementos o atributos
- Puede contener únicamente texto
- Tipos incluidos en la definición XML Schema
(boolean, string, date, etc.), o - Un tipo personalizado que el usuario puede definir
13Sintaxis de los elementos simples
- ltxselement name"xxx" type"yyy"/gt
- Tipos más comunes
- xsstring
- xsdecimal
- xsinteger
- xsboolean
- xsdate
- xstime
14Elementos simples Ejemplo
- ltlastnamegtAguilarlt/lastnamegtltagegt36lt/agegtltdatebo
rngt1970-03-27lt/dateborngt
- ltxselement name"lastname" type"xsstring"/gtltxs
element name"age" type"xsinteger"/gtltxselemen
t name"dateborn" type"xsdate"/gt
Definición
15Valores default y fijo
- ltxselement name"color" type"xsstring"
default"red"/gt - ltxselement name"color" type"xsstring"
fixed"red"/gt
- ltxselement name"lastname" type"xsstring"/gtltxs
element name"age" type"xsinteger"/gtltxselemen
t name"dateborn" type"xsdate"/gt
Definición
16Sintaxis de los Atributos
- ltxsattribute name"xxx" type"yyy"/gt
- Tipos más comunes
- xsstring
- xsdecimal
- xsinteger
- xsboolean
- xsdate
- xstime
17Atributos Ejemplo
- Uso
- ltlastname lang"EN"gtSmithlt/lastnamegt
- Definición
- ltxsattribute name"lang" type"xsstring"/gt
- ltxsattribute name"lang" type"xsstring"
default"EN"/gt - ltxsattribute name"lang" type"xsstring"
fixed"EN"/gt - ltxsattribute name"lang" type"xsstring"
use"required"/gt
Default, fixed, optional/required
18XSD Restricciones o facetas
- Las restricciones son usadas para definir valores
aceptables para los elementos o atributos XML.
Estas restricciones se llaman facetas. - Restringiendo valores
- ltxselement name"age"gt ltxssimpleTypegt
ltxsrestriction base"xsinteger"gt
ltxsminInclusive value"0"/gt
ltxsmaxInclusive value"120"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselementgt
19XSD Restricciones en los tipos de datos
20XSD Restricciones en un conjunto de valores
- ltxselement name"car"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxsenumeration value"Audi"/gt
ltxsenumeration value"Golf"/gt
ltxsenumeration value"BMW"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselementgt
- ltxselement name"car" type"carType"/gtltxssimpl
eType name"carType"gt ltxsrestriction
base"xsstring"gt ltxsenumeration
value"Audi"/gt ltxsenumeration
value"Golf"/gt ltxsenumeration
value"BMW"/gt lt/xsrestrictiongtlt/xssimpleTypegt
21XSD Restricciones en una serie de valores
- ltxselement name"letter"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxspattern value"a-z"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselementgt
- ltxselement name"initials"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxspattern value"A-ZA-ZA-Z"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselementgt
22XSD Restricciones en una serie de valores
- ltxselement name"initials"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxspattern value"a-zA-Za-zA-Za-zA-Z"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselement
gt
- ltxselement name"choice"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxspattern value"xyz"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselementgt
23XSD Restricciones en una serie de valores
- ltxselement name"prodid"gt ltxssimpleTypegt
ltxsrestriction base"xsinteger"gt
ltxspattern value"0-90-90-90-90-9"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselemen
tgt
- ltxselement name"letter"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxspattern value"(a-z)"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselementgt
24XSD Restricciones en una serie de valores
- ltxselement name"letter"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxspattern value"(a-zA-Z)"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselementgt
- ltxselement name"gender"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxspattern value"malefemale"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselementgt
25XSD Restricciones en una serie de valores
- ltxselement name"password"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxspattern value"a-zA-Z8"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselementgt
- ltxselement name"password"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxspattern value"a-zA-Z0-98"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselementgt
26XSD Restricciones sobre los caracteres de espacio
- ltxselement name"address"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxswhiteSpace value"preserve"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselementgt
- ltxselement name"address"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxswhiteSpace value"replace"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselementgt
27XSD Restricciones sobre los caracteres de espacio
- ltxselement name"address"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxswhiteSpace value"collapse"/gt
lt/xsrestrictiongt lt/xssimpleTypegtlt/xselementgt
- El procesador XML removerá los espacios en blanco
redundantes (saltos de línea, tabuladores,
espacios son reemplazados con espacios espacios
en blanco antes y después de cada línea son
removidos múltiples espacios en blanco son
reducidos a un solo espacio en blanco)
28XSD Restricciones sobre la longitud
- ltxselement name"password"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxslength value"8"/gt lt/xsrestrictiongt
lt/xssimpleTypegtlt/xselementgt
- ltxselement name"password"gt ltxssimpleTypegt
ltxsrestriction base"xsstring"gt
ltxsminLength value"5"/gt ltxsmaxLength
value"8"/gt lt/xsrestrictiongt
lt/xssimpleTypegtlt/xselementgt
29XSD Elementos complejos
- Un elemento complejo es un elemento XML que
contiene otros elementos y/o atributos. - Existen cuatro tipos de elementos complejos
- Elementos vacíos
- Elementos que contienen solamente otros elementos
- Elementos que contienen solamente texto
- Elementos que contienen tanto otros elementos
como texto
30XSD Tipos de elementos complejos
ltproduct pid"1345"/gt
ltemployeegt ltfirstnamegtJohnlt/firstnamegt
ltlastnamegtSmithlt/lastnamegtlt/employeegt
ltfood type"dessert"gtIce creamlt/foodgt
ltdescriptiongtIt happened on ltdate
lang"norwegian"gt03.03.99lt/dategt
....lt/descriptiongt
31XSD Definición de un elemento complejo
- ltemployeegt ltfirstnamegtJohnlt/firstnamegt
ltlastnamegtSmithlt/lastnamegtlt/employeegt
- ltxselement name"employee"gt ltxscomplexTypegt
ltxssequencegt ltxselement
name"firstname" type"xsstring"/gt
ltxselement name"lastname" type"xsstring"/gt
lt/xssequencegt lt/xscomplexTypegtlt/xselementgt
Definición
32XSD Definición de un elemento complejo
- ltemployeegt ltfirstnamegtJohnlt/firstnamegt
ltlastnamegtSmithlt/lastnamegtlt/employeegt
- ltxselement name"employee" type"personinfo"/gtlt
xscomplexType name"personinfo"gt
ltxssequencegt ltxselement name"firstname"
type"xsstring"/gt ltxselement
name"lastname" type"xsstring"/gt
lt/xssequencegtlt/xscomplexTypegt
Definición
33XSD Definición de un elemento complejo
- ltxselement name"employee" type"fullpersoninfo"/
gtltxscomplexType name"personinfo"gt
ltxssequencegt ltxselement name"firstname"
type"xsstring"/gt ltxselement
name"lastname" type"xsstring"/gt
lt/xssequencegtlt/xscomplexTypegtltxscomplexType
name"fullpersoninfo"gt ltxscomplexContentgt
ltxsextension base"personinfo"gt
ltxssequencegt ltxselement name"address"
type"xsstring"/gt ltxselement
name"city" type"xsstring"/gt
ltxselement name"country" type"xsstring"/gt
lt/xssequencegt lt/xsextensiongt
lt/xscomplexContentgtlt/xscomplexTypegt
Definición
34XSD Definición de un elemento complejo
- ltemployeegt ltfirstnamegtJohnlt/firstnamegt
ltlastnamegtSmithlt/lastnamegtlt/employeegt
- ltxselement name"employee"gt ltxscomplexTypegt
ltxssequencegt ltxselement
name"firstname" type"xsstring"/gt
ltxselement name"lastname" type"xsstring"/gt
lt/xssequencegt lt/xscomplexTypegtlt/xselementgt
Definición
35XSD Elementos complejos vacíos
- ltproduct prodid"1345" /gt
- ltxselement name"product"gt ltxscomplexTypegt
ltxscomplexContentgt ltxsrestriction
base"xsinteger"gt ltxsattribute
name"prodid" type"xspositiveInteger"/gt
lt/xsrestrictiongt lt/xscomplexContentgt
lt/xscomplexTypegtlt/xselementgt
Definición
ltxselement name"product"gt ltxscomplexTypegt
ltxsattribute name"prodid" type"xspositiveInte
ger"/gt lt/xscomplexTypegtlt/xselementgt
ltxselement name"product" type"prodtype"/gtltxs
complexType name"prodtype"gt ltxsattribute
name"prodid" type"xspositiveInteger"/gtlt/xscom
plexTypegt
36XSD Elementos complejos que contienen solamente
elementos
- ltpersongt ltfirstnamegtJohnlt/firstnamegt
ltlastnamegtSmithlt/lastnamegtlt/persongt
- ltxselement name"person"gt ltxscomplexTypegt
ltxssequencegt ltxselement name"firstname"
type"xsstring"/gt ltxselement
name"lastname" type"xsstring"/gt
lt/xssequencegt lt/xscomplexTypegtlt/xselementgt
Definición
ltxselement name"person" type"persontype"/gtltxs
complexType name"persontype"gt
ltxssequencegt ltxselement name"firstname"
type"xsstring"/gt ltxselement
name"lastname" type"xsstring"/gt
lt/xssequencegtlt/xscomplexTypegt
37XSD Elementos complejos que contienen solamente
texto
- ltxselement name"somename"gt ltxscomplexTypegt
ltxssimpleContentgt ltxsextension
base"basetype"gt .... ....
lt/xsextensiongt lt/xssimpleContentgt
lt/xscomplexTypegtlt/xselementgtOltxselement
name"somename"gt ltxscomplexTypegt
ltxssimpleContentgt ltxsrestriction
base"basetype"gt .... ....
lt/xsrestrictiongt lt/xssimpleContentgt
lt/xscomplexTypegtlt/xselementgt
Expandir o limitar el tipo base simple
38XSD Elementos complejos que contienen solamente
texto
- ltshoesize country"france"gt35lt/shoesizegt
- ltxselement name"shoesize"gt ltxscomplexTypegt
ltxssimpleContentgt ltxsextension
base"xsinteger"gt ltxsattribute
name"country" type"xsstring" /gt
lt/xsextensiongt lt/xssimpleContentgt
lt/xscomplexTypegtlt/xselementgt
Definición
ltxselement name"shoesize" type"shoetype"/gtltxs
complexType name"shoetype"gt
ltxssimpleContentgt ltxsextension
base"xsinteger"gt ltxsattribute
name"country" type"xsstring" /gt
lt/xsextensiongt lt/xssimpleContentgtlt/xscomplex
Typegt
39XSD Elementos complejos mixtos
- ltlettergt Dear Mr.ltnamegtJohn Smithlt/namegt.
Your order ltorderidgt1032lt/orderidgt will be
shipped on ltshipdategt2001-07-13lt/shipdategt.lt/lett
ergt
Hace posible que los datos de tipo caracter
aparezcan entre los elementos hijo de letter
- ltxselement name"letter"gt ltxscomplexType
mixed"true"gt ltxssequencegt ltxselement
name"name" type"xsstring"/gt ltxselement
name"orderid" type"xspositiveInteger"/gt
ltxselement name"shipdate" type"xsdate"/gt
lt/xssequencegt lt/xscomplexTypegtlt/xselementgt
Definición
40XSD Elementos complejos mixtos
- ltlettergt Dear Mr.ltnamegtJohn Smithlt/namegt.
Your order ltorderidgt1032lt/orderidgt will be
shipped on ltshipdategt2001-07-13lt/shipdategt.lt/lett
ergt
- ltxselement name"letter" type"lettertype"/gtltxs
complexType name"lettertype" mixed"true"gt
ltxssequencegt ltxselement name"name"
type"xsstring"/gt ltxselement name"orderid"
type"xspositiveInteger"/gt ltxselement
name"shipdate" type"xsdate"/gt
lt/xssequencegtlt/xscomplexTypegt
Definición
41XSD Indicadores
- Existen siete tipos de indicadores
- Indicadores de orden
- All
- Choice
- Sequence
- Indicadores de occurrencia
- maxOccurs
- minOccurs
- Indicadores de grupo
- Group name
- attributeGroup name
42Indicadores de orden ALL
- Especifica que los elementos hijo pueden aparecer
en cualquier orden, y que cada elemento hijo
puede ocurrir solamente una vez. - ltxselement name"person"gt ltxscomplexTypegt
ltxsallgt ltxselement name"firstname"
type"xsstring"/gt ltxselement
name"lastname" type"xsstring"/gt
lt/xsallgt lt/xscomplexTypegtlt/xselementgt
43Indicadores de orden CHOICE
- Especifica que los elementos hijo puede aparecer
(uno o el otro). - ltxselement name"person"gt ltxscomplexTypegt
ltxschoicegt ltxselement name"employee"
type"employee"/gt ltxselement name"member"
type"member"/gt lt/xschoicegt
lt/xscomplexTypegtlt/xselementgt
44Indicadores de orden SEQUENCE
- Especifica que los elementos hijo deben aparecer
en estricta secuencia, tal y como se han
definido. - ltxselement name"person"gt ltxscomplexTypegt
ltxssequencegt ltxselement name"firstname"
type"xsstring"/gt ltxselement
name"lastname" type"xsstring"/gt
lt/xssequencegt lt/xscomplexTypegtlt/xselementgt
45Indicadores de ocurrencia
Indicadores maxOccurs y minOccurs (número de
veces que un elemento hijo puede ocurrir)
- ltxselement name"person"gt ltxscomplexTypegt
ltxssequencegt ltxselement name"full_name"
type"xsstring"/gt ltxselement
name"child_name" type"xsstring - maxOccurs"10"/gt lt/xssequencegt
lt/xscomplexTypegtlt/xselementgt
- ltxselement name"person"gt ltxscomplexTypegt
ltxssequencegt ltxselement name"full_name"
type"xsstring"/gt ltxselement
name"child_name" type"xsstring"
maxOccurs"10" minOccurs"0"/gt
lt/xssequencegt lt/xscomplexTypegtlt/xselementgt
maxOccurs"unbounded"
46XSD Práctica 8 (Escribir archivo XSD para
Familia.xml)
- lt?xml version"1.0" encoding"ISO-8859-1"?gtltpers
ons xmlnsxsi"http//www.w3.org/2001/XMLSchema-in
stance"xsinoNamespaceSchemaLocation"family.xsd"
gtltpersongt ltfull_namegtHege Refsneslt/full_namegt
ltchild_namegtCecilielt/child_namegtlt/persongtltper
songt ltfull_namegtTove Refsneslt/full_namegt
ltchild_namegtHegelt/child_namegt
ltchild_namegtStalelt/child_namegt
ltchild_namegtJimlt/child_namegt ltchild_namegtBorgelt/
child_namegtlt/persongtltpersongt
ltfull_namegtStale Refsneslt/full_namegtlt/persongtlt/
personsgt
47XSD Respuesta a Práctica 8 (Archivo Familia.xsd
para Familia.xml)
- lt?xml version"1.0" encoding"ISO-8859-1"?gtltxssc
hema xmlnsxs"http//www.w3.org/2001/XMLSchema"e
lementFormDefault"qualified"gtltxselement
name"persons"gt ltxscomplexTypegt
ltxssequencegt ltxselement name"person"
maxOccurs"unbounded"gt ltxscomplexTypegt
ltxssequencegt ltxselement
name"full_name" type"xsstring"/gt
ltxselement name"child_name" type"xsstring"
minOccurs"0" maxOccursunbounded"/gt
lt/xssequencegt lt/xscomplexTypegt
lt/xselementgt lt/xssequencegt
lt/xscomplexTypegtlt/xselementgtlt/xsschemagt
48XSD Indicadores de grupo Grupos de elementos
(Se debe usar ALL, CHOICE o SEQUENCE)
- ltxsgroup name"groupname"gt...lt/xsgroupgt
- ltxsgroup name"persongroup"gt ltxssequencegt
ltxselement name"firstname" type"xsstring"/gt
ltxselement name"lastname" type"xsstring"/gt
ltxselement name"birthday" type"xsdate"/gt
lt/xssequencegtlt/xsgroupgt - ltxselement name"person" type"personinfo"/gt
- ltxscomplexType name"personinfo"gt
ltxssequencegt ltxsgroup ref"persongroup"/gt
ltxselement name"country" type"xsstring"/gt
lt/xssequencegtlt/xscomplexTypegt
49XSD Definiciones extensibles Motivación
- ltxselement name"person"gt ltxscomplexTypegt
ltxssequencegt ltxselement name"firstname"
type"xsstring"/gt ltxselement
name"lastname" type"xsstring"/gt
lt/xssequencegt lt/xscomplexTypegtlt/xselementgt
- lt?xml version"1.0" encoding"ISO-8859-1"?gtltpers
ons xmlns"http//www.microsoft.com"xmlnsxsi"ht
tp//www.w3.org/2001/XMLSchema-instance"xsiSchem
aLocation"http//www.microsoft.com
family.xsd"gtltpersongt ltfirstnamegtHegelt/firstnam
egt ltlastnamegtRefsneslt/lastnamegt
ltchildrengt ltchildnamegtCecilielt/childnamegt
lt/childrengtlt/persongtltpersongt
ltfirstnamegtStalelt/firstnamegt ltlastnamegtRefsneslt/
lastnamegtlt/persongtlt/personsgt
50XSD Definiciones extensibles ltanygt
- ltxselement name"person"gt ltxscomplexTypegt
ltxssequencegt ltxselement name"firstname"
type"xsstring"/gt ltxselement
name"lastname" type"xsstring"/gt ltxsany
minOccurs"0"/gt lt/xssequencegt
lt/xscomplexTypegtlt/xselementgt
- lt?xml version"1.0" encoding"ISO-8859-1"?gtltxssc
hema xmlnsxs"http//www.w3.org/2001/XMLSchema"t
argetNamespace"http//www.mysite.com"xmlns"http
//www.mysite.com"elementFormDefault"qualified"gt
ltxselement name"children"gt
ltxscomplexTypegt ltxssequencegt
ltxselement name"childname" type"xsstring"
maxOccurs"unbounded"/gt lt/xssequencegt
lt/xscomplexTypegtlt/xselementgtlt/xsschemagt
51XSD Definiciones extensibles ltanygt
- lt?xml version"1.0" encoding"ISO-8859-1"?gtltpers
ons xmlns"http//www.microsoft.com"xmlnsxsi"ht
tp//www.w3.org/2001/XMLSchema-instance"xsiSchem
aLocation"http//www.microsoft.com
family.xsdhttp//www.mysite.com
children.xsd"gtltpersongt ltfirstnamegtHegelt/firstn
amegt ltlastnamegtRefsneslt/lastnamegt
ltchildrengt ltchildnamegtCecilielt/childnamegt
lt/childrengtlt/persongtltpersongt
ltfirstnamegtStalelt/firstnamegt ltlastnamegtRefsneslt/
lastnamegtlt/persongtlt/personsgt
52XSD Definiciones extensibles Motivación
- ltxselement name"person"gt ltxscomplexTypegt
ltxssequencegt ltxselement name"firstname"
type"xsstring"/gt ltxselement
name"lastname" type"xsstring"/gt
lt/xssequencegt lt/xscomplexTypegtlt/xselementgt
- lt?xml version"1.0" encoding"ISO-8859-1"?gtltpers
ons xmlns"http//www.microsoft.com"xmlnsxsi"ht
tp//www.w3.org/2001/XMLSchema-instance"xsiSchem
aLocation"http//www.microsoft.com
family.xsd"gtltperson gender"female"gt
ltfirstnamegtHegelt/firstnamegt ltlastnamegtRefsneslt/l
astnamegtlt/persongtltperson gender"male"gt
ltfirstnamegtStalelt/firstnamegt ltlastnamegtRefsneslt/
lastnamegtlt/persongtlt/personsgt
53XSD Definiciones extensibles ltanyAttributegt
- ltxselement name"person"gt ltxscomplexTypegt
ltxssequencegt ltxselement name"firstname"
type"xsstring"/gt ltxselement
name"lastname" type"xsstring"/gt
lt/xssequencegt ltxsanyAttribute/gt
lt/xscomplexTypegtlt/xselementgt
- lt?xml version"1.0" encoding"ISO-8859-1"?gtltxssc
hema xmlnsxs"http//www.w3.org/2001/XMLSchema"t
argetNamespace"http//www. mysite.com"xmlns"htt
p//www.mysite.com"elementFormDefault"qualified"
gtltxsattribute name"gender"gt
ltxssimpleTypegt ltxsrestriction
base"xsstring"gt ltxspattern
value"malefemale"/gt lt/xsrestrictiongt
lt/xssimpleTypegtlt/xsattributegtlt/xsschemagt
54XSD Definiciones extensibles ltanyAttributegt
- lt?xml version"1.0" encoding"ISO-8859-1"?gtltpers
ons xmlns"http//www.microsoft.com"xmlnsxsi"ht
tp//www.w3.org/2001/XMLSchema-instance"xsiSchem
aLocation"http//www.microsoft.com
family.xsdhttp//www.mysite.com
attribute.xsd"gtltperson gender"female"gt
ltfirstnamegtHegelt/firstnamegt ltlastnamegtRefsneslt/l
astnamegtlt/persongtltperson gender"male"gt
ltfirstnamegtStalelt/firstnamegt ltlastnamegtRefsneslt/
lastnamegtlt/persongtlt/personsgt
55XSD Manejando idiomas(Bloqueando la sustitución
de elementos)
ltxselement name"name" type"xsstring"
block"substitution"/gtltxselement name"nombre"
substitutionGroup"name"/gtltxscomplexType
name"custinfo"gt ltxssequencegt ltxselement
ref"name"/gt lt/xssequencegtlt/xscomplexTypegtlt
xselement name"customer" type"custinfo"
block"substitution"/gtltxselement namenombre"
substitutionGroup"customer"/gt
- ltcustomergt ltnamegtJohn Smithlt/namegtlt/customergt
- ltclientegt ltnombregtJohn Smithlt/nombregtlt/clientegt
56XSD Sustitución de elementos
- El uso correcto de substitutionGroup
- El tipo de los elementos sustituibles debe ser el
mismo o derivado del tipo del elemento principal.
Si el tipo del elemento sustituible es el mismo
que el tipo del elemento principal, entonces no
es necesario especificar el tipo del elemento
sustituible. - Todos los elementos en substitutionGroup (el
elemento principal y los elementos sustituibles)
debe ser declarados como elementos globales, de
otro modo no funcionara! - Que son los elementos globales?
- Los elementos globales son aquellos que son hijos
inmediatos del elemento del "schema"! - Los elementos locales son aquellos que se
encuentran anidados dentro de otros elementos.
57XSD Práctica 9(Despacho de órdenes)
- lt?xml version"1.0" encoding"ISO-8859-1"?gtltship
order orderid"889923"xmlnsxsi"http//www.w3.or
g/2001/XMLSchema-instance"xsinoNamespaceSchemaLo
cation"shiporder.xsd"gt ltorderpersongtJohn
Smithlt/orderpersongt ltshiptogt ltnamegtOla
Nordmannlt/namegt ltaddressgtLanggt
23lt/addressgt ltcitygt4000 Stavangerlt/citygt
ltcountrygtNorwaylt/countrygt lt/shiptogt
ltitemgt lttitlegtEmpire Burlesquelt/titlegt
ltnotegtSpecial Editionlt/notegt
ltquantitygt1lt/quantitygt ltpricegt10.90lt/pricegt
lt/itemgt ltitemgt lttitlegtHide your
heartlt/titlegt ltquantitygt1lt/quantitygt
ltpricegt9.90lt/pricegt lt/itemgtlt/shipordergt
58XSD Respuesta a Práctica 9
- lt?xml version"1.0" encoding"ISO-8859-1"
?gtltxsschema xmlnsxs"http//www.w3.org/2001/XML
Schema"gtltxselement name"shiporder"gt
ltxscomplexTypegt ltxssequencegt
ltxselement name"orderperson" type"xsstring"/gt
ltxselement name"shipto"gt
ltxscomplexTypegt ltxssequencegt
ltxselement name"name" type"xsstring"/gt
ltxselement name"address"
type"xsstring"/gt ltxselement
name"city" type"xsstring"/gt
ltxselement name"country" type"xsstring"/gt
lt/xssequencegt lt/xscomplexTypegt
lt/xselementgt ltxselement name"item"
maxOccurs"unbounded"gt ltxscomplexTypegt
ltxssequencegt ltxselement
name"title" type"xsstring"/gt
ltxselement name"note" type"xsstring"
minOccurs"0"/gt ltxselement
name"quantity" type"xspositiveInteger"/gt
ltxselement name"price" type"xsdecimal"/gt
lt/xssequencegt
lt/xscomplexTypegt lt/xselementgt
lt/xssequencegt ltxsattribute name"orderid"
type"xsstring" use"required"/gt
lt/xscomplexTypegtlt/xselementgtlt/xsschemagt
59XSD Respuesta alternativa a Práctica 9
- lt?xml version"1.0" encoding"ISO-8859-1"
?gtltxsschema xmlnsxs"http//www.w3.org/2001/XML
Schema"gtlt!-- definition of simple elements
--gtltxselement name"orderperson"
type"xsstring"/gtltxselement name"name"
type"xsstring"/gtltxselement name"address"
type"xsstring"/gtltxselement name"city"
type"xsstring"/gtltxselement name"country"
type"xsstring"/gtltxselement name"title"
type"xsstring"/gtltxselement name"note"
type"xsstring"/gtltxselement name"quantity"
type"xspositiveInteger"/gtltxselement
name"price" type"xsdecimal"/gtlt!-- definition
of attributes --gtltxsattribute name"orderid"
type"xsstring"/gtlt!-- definition of complex
elements --gtltxselement name"shipto"gt
ltxscomplexTypegt ltxssequencegt
ltxselement ref"name"/gt ltxselement
ref"address"/gt ltxselement
ref"city"/gt ltxselement ref"country"/gt
lt/xssequencegt lt/xscomplexTypegtlt/xselementgt
- ltxselement name"item"gt ltxscomplexTypegt
ltxssequencegt ltxselement
ref"title"/gt ltxselement ref"note"
minOccurs"0"/gt ltxselement
ref"quantity"/gt ltxselement
ref"price"/gt lt/xssequencegt
lt/xscomplexTypegtlt/xselementgtltxselement
name"shiporder"gt ltxscomplexTypegt
ltxssequencegt ltxselement
ref"orderperson"/gt ltxselement
ref"shipto"/gt ltxselement ref"item"
maxOccurs"unbounded"/gt lt/xssequencegt
ltxsattribute ref"orderid" use"required"/gt
lt/xscomplexTypegtlt/xselementgtlt/xsschemagt
60XSD Respuesta alternativa a Práctica 9
- lt?xml version"1.0" encoding"ISO-8859-1"
?gtltxsschema xmlnsxs"http//www.w3.org/2001/XML
Schema"gtltxssimpleType name"stringtype"gt
ltxsrestriction base"xsstring"/gtlt/xssimpleType
gtltxssimpleType name"inttype"gt
ltxsrestriction base"xspositiveInteger"/gtlt/xss
impleTypegtltxssimpleType name"dectype"gt
ltxsrestriction base"xsdecimal"/gtlt/xssimpleTyp
egtltxssimpleType name"orderidtype"gt
ltxsrestriction base"xsstring"gt ltxspattern
value"0-96"/gt lt/xsrestrictiongtlt/xssimple
Typegt - ltxscomplexType name"shiptotype"gt
ltxssequencegt ltxselement name"name"
type"stringtype"/gt ltxselement
name"address" type"stringtype"/gt
ltxselement name"city" type"stringtype"/gt
ltxselement name"country" type"stringtype"/gt
lt/xssequencegtlt/xscomplexTypegt
- ltxscomplexType name"itemtype"gt
ltxssequencegt ltxselement name"title"
type"stringtype"/gt ltxselement name"note"
type"stringtype" minOccurs"0"/gt ltxselement
name"quantity" type"inttype"/gt ltxselement
name"price" type"dectype"/gt
lt/xssequencegtlt/xscomplexTypegtltxscomplexType
name"shipordertype"gt ltxssequencegt
ltxselement name"orderperson" type"stringtype"/gt
ltxselement name"shipto" type"shiptotype"/gt
ltxselement name"item" maxOccurs"unbounded"
type"itemtype"/gt lt/xssequencegt
ltxsattribute name"orderid" type"orderidtype"
use"required"/gtlt/xscomplexTypegtltxselement
name"shiporder" type"shipordertype"/gtlt/xssche
magt
61XSD Tipos de datos(String)
- Tipos de datos usados para valores que contienen
cadenas de caracteres. - Definición
- ltxselement name"customer" type"xsstring"/gt
- Uso
- ltcustomergtJohn Smithlt/customergt
- ltcustomergt John Smith lt/customergt
62XSD Tipos de datos(Derivados de String)
63XSD Tipos de datos(NormalizedString)
- Contienes caracteres, pero el procesador XML
removerá los saltos de línea, avances de carro y
tabuladores (sustitución con espacios). - Definición
- ltxselement name"customer" type"xsnormalizedStr
ing"/gt - Uso
- ltcustomergtJohn Smithlt/customergt
- ltcustomergt John Smith lt/customergt
64XSD Tipos de datos(Token)
- Contienes caracteres, pero el procesador XML
removerá los saltos de línea, avances de carro,
tabuladores y múltiples espacios (sustitución con
espacios). Adicionalmente, remueve los espacios
al inicio y final de cada línea. - Definición
- ltxselement name"customer" type"xstoken"/gt
- Uso
- ltcustomergtJohn Smithlt/customergt
- ltcustomergt John Smith lt/customergt
65XSD Tipos de datos(Restricciones sobre String)
- Las restricciones que pueden ser usadas con los
tipos de datos String son las siguientes - enumeration
- length
- maxLength
- minLength
- pattern (NMTOKENS, IDREFS, and ENTITIES cannot
use this constraint) - whiteSpace
66XSD Tipos de datos(Date)
- El tipo de dato Date especifica una fecha y debe
ser especificado de la siguiente manera
YYYY-MM-DD, donde - YYYY indica el año
- MM indica el mes
- DD indica el día
- Definición
- ltxselement name"start" type"xsdate"/gt
- Uso
- ltstartgt2002-09-24lt/startgt
- Zona
- ltstartgt2002-09-24Zlt/startgt
- ltstartgt2002-09-24-0600lt/startgt
- ltstartgt2002-09-240600lt/startgt
67XSD Tipos de datos(Time)
- El tipo de dato Time especifica una hora y debe
ser especificado de la siguiente manera
hhmmss, donde - hh indica la hora
- mm indica el minuto
- ss indica el segundo
- Definición
- ltxselement name"start" type"xstime"/gt
- Uso
- ltstartgt090000lt/startgt
- ltstartgt093010.5lt/startgt
- Zona
- ltstartgt093010Zlt/startgt
- ltstartgt093010-0600lt/startgt
- ltstartgt0930100600lt/startgt
68XSD Tipos de datos(DateTime)
- El tipo de dato DateTime especifica una fecha con
una determinada hora y debe ser especificado de
la siguiente manera YYYY-DD-MMThhmmss, donde - YYYY indica el año
- MM indica el mes
- DD indica el día
- T indica el inicio de la sección hora requerida
- hh indica la hora
- mm indica el minuto
- ss indica el segundo
- Definición
- ltxselement name"startdate" type"xsdateTime"/gt
- Uso
- ltstartdategt2002-05-30T090000lt/startdategt
- ltstartdategt2002-05-30T093010.5lt/startdategt
- Zona
- ltstartdategt2002-05-30T093010Zlt/startdategt
- ltstartdategt2002-05-30T093010-0600lt/startdategt
69XSD Tipos de datos(Duration)
- El tipo de dato Duration es usado para
especificar un intervalo de tiempo y debe ser
especificado de la siguiente manera
PnYnMnDTnHnMnS, donde - P indica el periodo (requerido)
- nY indica el número de años
- nM indica el número de meses
- nD indica el número de días
- T indica el inicio de la sección hora (en caso de
usar horas) - nH indica el número de horas
- nM indica el número de minutos
- nS indica el número de segundos
- Definición
- ltxselement name"period" type"xsduration"/gt
- Uso
- ltperiodgtP5Ylt/periodgt
- ltperiodgtP5Y2M10Dlt/periodgt
- ltperiodgtP5Y2M10DT15Hlt/periodgt
- ltperiodgtPT15Hlt/periodgt
70XSD Tipos de datos(Date y Time)
71XSD Tipos de datos(Restricciones en Date y Time)
- Las restricciones que pueden ser usadas con los
tipos de datos Date/Time son las siguientes - enumeration
- maxExclusive
- maxInclusive
- minExclusive
- minInclusive
- pattern
- whiteSpace
72XSD Tipos de datos(Numeric Decimal o Integer)
- Valores Numéricos con Decimales
-
- Definición
- ltxselement name"prize" type"xsdecimal"/gt
- Uso
- ltprizegt999.50lt/prizegt
- ltprizegt999.5450lt/prizegt
- ltprizegt-999.5230lt/prizegt
- ltprizegt0lt/prizegt
- ltprizegt14lt/prizegt
- Valores Numéricos sin Decimales (Enteros)
- Definición
- ltxselement name"prize" type"xsinteger"/gt
- Uso
- ltprizegt999lt/prizegt
- ltprizegt999lt/prizegt
73XSD Tipos de datos(Restricciones en Numeric)
- Las restricciones que pueden ser usadas con los
tipos de datos Numeric son las siguientes - enumeration
- fractionDigits
- maxExclusive
- maxInclusive
- minExclusive
- minInclusive
- pattern
- totalDigits
- whiteSpace
74XSD Tipos de datos(Numeric)
75XSD Otros Tipos de Datos
- boolean, base64Binary, hexBinary, float, double,
anyURI, QName, and NOTATION. - boolean
- Definición
- ltxsattribute name"disabled" type"xsboolean"/gt
- Uso
- ltprize disabled"true"gt999lt/prizegt
76XSD Otros Tipos de Datos
- base64Binary (Base64-encoded binary data)
- hexBinary (hexadecimal-encoded binary data)
- Binary
- Definición
- ltxselement name"blobsrc" type"xshexBinary"/gt
77XSD Otros Tipos de Datos
- boolean, base64Binary, hexBinary, float, double,
anyURI, QName, and NOTATION. - anyURI
- Definición
- ltxsattribute name"src" type"xsanyURI"/gt
- Uso
- ltpic src"http//www.mysite.com/images/smiley.gif"
/gt
78XSD Tipos de datos(Otros tipos)
79XSD Tipos de datos(Restricciones en los otros
tipos)
- Las restricciones que pueden ser usadas son las
siguientes - enumeration (un tipo de dato Boolean no puede
usar esta restricción) - length (un tipo de dato Boolean no puede usar
esta restricción) - maxLength (un tipo de dato Boolean no puede usar
esta restricción) - minLength (un tipo de dato Boolean no puede usar
esta restricción) - pattern
- whiteSpace
80Esquema Un ejemplo
- ltSchema name "libreria4_esq.xml"
- xmlns"urnschemas-microsoft-comxml-data"
- xmlnsdt"urnschemas-microsoft-comdatatypes"gt
- ltElementType name "autor" content"textOnly
- dttype"string"gt
- ltdescriptiongt
- lttitlegtAutorlt/titlegt
- ltbodygtAutor o editorlt/bodygt
- lt/descriptiongt
- lt/ElementTypegt
- ltElementType name "titulo" content"textOnly"
- dttype"string"gt
- ltdescriptiongt
- lttitlegtTítulolt/titlegt
- ltbodygtTítulolt/bodygt
- lt/descriptiongt
- lt/ElementTypegt
- ltElementType name "libro" content"eltOnly"
model"closed"gt - ltdescriptiongt
- lttitlegtLibrolt/titlegt
- ltbodygtLibro de la libreríalt/bodygt
- lt/descriptiongt
- ltelement type"autor" minOccurs"1"
maxOccurs"" /gt - ltelement type"titulo" minOccurs"1"
maxOccurs"1" /gt - ltelement type"precio" minOccurs"1"
maxOccurs"1" /gt - lt/ElementTypegt
- ltElementType name "libreria4" content"eltOnly"
model"closed"gt - ltdescriptiongt
- lttitlegtLibreríalt/titlegt
- ltbodygtLa libreríalt/bodygt
- lt/descriptiongt
- ltelement type"libro" minOccurs"0"
maxOccurs"" /gt - lt/ElementTypegt
- lt/Schemagt
81XSD Práctica 10
- Escribir un esquema para archivos XML usando XML
Schema, en donde se consideren instancias XML que
cumplan las restricciones realizadas en la
práctica 5 (catálogo de libros). - Reescribir el archivo XML para que incluya en su
prólogo el correspondiente archivo .xsd.