tema 4: estructura de documentos xml, w3c esquemas ricardo eíto brun sevilla, 23-25 de octubre 2002

44
Tema 4: Tema 4: Estructura de Estructura de documentos XML, W3C documentos XML, W3C Esquemas Esquemas Ricardo Eíto Brun Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002 Sevilla, 23-25 de octubre 2002

Upload: moises-cotta

Post on 02-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Tema 4: Tema 4: Estructura de Estructura de documentos XML, W3C documentos XML, W3C EsquemasEsquemas

Ricardo Eíto BrunRicardo Eíto Brun

Sevilla, 23-25 de octubre 2002Sevilla, 23-25 de octubre 2002

Page 2: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

XML Schemas XML Schemas

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

Utilizan la sintáxis propia de XMLUtilizan la sintáxis propia de XML Ventajas:Ventajas:

– Fáciles de aprender (se usa también XML)Fáciles de aprender (se usa también XML)– Soportan tipos de datos: numéricos, Soportan tipos de datos: numéricos,

fechas…fechas…– Procesables igual que los documentos XMLProcesables igual que los documentos XML

Page 3: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Qué encontramos en un Qué encontramos en un esquema XMLesquema XML Un esquema XML define la estructura válida Un esquema XML define la estructura válida

para un tipo de documento XML (al igual que las para un tipo de documento XML (al igual que las DTD), es decir:DTD), es decir:– Los elementos que pueden aparecer en el documentoLos elementos que pueden aparecer en el documento– Los atributos que pueden utilizarse junto a cada Los atributos que pueden utilizarse junto a cada

elementoelemento– Cómo se pueden anidar los elementos (padres e hijos)Cómo se pueden anidar los elementos (padres e hijos)– El orden en el que deben aparecer los elementos hijos El orden en el que deben aparecer los elementos hijos

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

Page 4: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

XML Schemas XML Schemas La propuesta inicial de Microsoft dio lugar a La propuesta inicial de Microsoft dio lugar a

los llamados “esquemas XDR”los llamados “esquemas XDR” Posteriormente, el W3C diseñó un modelo de Posteriormente, el W3C diseñó un modelo de

esquemas que es la propuesta oficial y la esquemas que es la propuesta oficial y la que debemos conocer (llamados “esquemas que debemos conocer (llamados “esquemas XSD”)XSD”)

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

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

Page 5: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Otras ventajas de XML Otras ventajas de XML Schemas Schemas

Mayor precisión en la definición de tipos de Mayor precisión en la definición de tipos de datos mediante formatos y facetasdatos mediante formatos y facetas

Por ejemplo, la fecha:Por ejemplo, la fecha:<date type="date">1999-03-11</date> <date type="date">1999-03-11</date>

¿es el 11 de marzo o el 3 de noviembre?¿es el 11 de marzo o el 3 de noviembre?

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

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

Page 6: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Asociar dtd a Asociar dtd a documentos XMLdocumentos XML<?xml version="1.0"?><?xml version="1.0"?>

<!DOCTYPE note SYSTEM <!DOCTYPE note SYSTEM

"http://www.us.com/dtd/note.dtd">"http://www.us.com/dtd/note.dtd"> <note><note>

<to>Tove</to> <to>Tove</to>

<from>Jani</from> <from>Jani</from>

<heading>Reminder</heading> <heading>Reminder</heading>

<body><body>

Don't forget me this weekend!Don't forget me this weekend!

</body> </body>

</note> </note>

Page 7: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Asociar esquemas a Asociar esquemas a documentos XMLdocumentos XML<?xml version="1.0"?><?xml version="1.0"?>

<note <note xmlns="http://www.us.com" xmlns="http://www.us.com"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= instance" xsi:schemaLocation= "http://www.us.com/schema/note.xsd"> "http://www.us.com/schema/note.xsd">

<to>Tove</to> <to>Tove</to>

<from>Jani</from> <from>Jani</from>

<heading>Reminder</heading> <heading>Reminder</heading>

<body><body>

Don't forget me this weekend!Don't forget me this weekend!

</body> </body>

</note> </note>

Page 8: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Ejemplo esquema W3CEjemplo esquema W3C<?xml version="1.0"?> <?xml version="1.0"?> <xsd:schema <xsd:schema

xmlns:xsd="http://www.w3.org/2001/XMLSchema”>xmlns:xsd="http://www.w3.org/2001/XMLSchema”><xsd:element name="note"> <xsd:element name="note">

<xsd:complexType> <xsd:complexType> <xsd:sequence> <xsd:sequence> <xsd:element name="to" type="xsd:string"/> <xsd:element name="to" type="xsd:string"/> <xsd:element name="from" <xsd:element name="from"

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

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

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

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

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

Page 9: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Esquemas XML – elemento Esquemas XML – elemento schemaschema

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

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

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

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

Page 10: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Esquemas XML – elementos Esquemas XML – elementos “simples”“simples”

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

Para definir un elemento simple, utilizamos la Para definir un elemento simple, utilizamos la sintáxis:sintáxis:

<xsd:element name="xxx" type="yyy"/> <xsd:element name="xxx" type="yyy"/> Ejemplos:Ejemplos:

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

<xsd:element name=“edad" type="xs:integer"/> <xsd:element name=“edad" type="xs:integer"/>

<xsd:element name=“fecNac" type="xs:date"/> <xsd:element name=“fecNac" type="xs:date"/>

Page 11: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Esquemas XML – elementos Esquemas XML – elementos “simples”, tipos de datos“simples”, tipos de datos

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

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

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

Page 12: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Esquemas XML – atributos (1)Esquemas XML – atributos (1)

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

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

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

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

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

Page 13: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

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

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

default=“ES"/>default=“ES"/> Por defecto, los atributos son opcionales. Por defecto, los atributos son opcionales. Para indicar que un atributo debe ser obligatorio, Para indicar que un atributo debe ser obligatorio,

se debe añadir a su declaración en el esquema se debe añadir a su declaración en el esquema es atributo “use”es atributo “use”

<xsd:attribute name="lang" type="xsd:string" <xsd:attribute name="lang" type="xsd:string"

use="required"/>use="required"/>

El atributo use puede tomar el valor “optional” si El atributo use puede tomar el valor “optional” si el atributo no es obligatorio (opción por defecto)el atributo no es obligatorio (opción por defecto)

Page 14: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Esquemas XML – facetasEsquemas XML – facetas

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

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

Tipos de facetas:Tipos de facetas:– Valor comprendido en un rangoValor comprendido en un rango– El valor está restringido a un conjunto de valores El valor está restringido a un conjunto de valores

posiblesposibles– Restringir el valor de un elemento a una serie de Restringir el valor de un elemento a una serie de

caracterescaracteres– Longitud de los valores de los elementos…Longitud de los valores de los elementos…

Page 15: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

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

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

<xsd:simpleType> <xsd:simpleType>

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

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

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

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

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

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

Page 16: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

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

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

<xsd:simpleType> <xsd:simpleType>

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

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

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

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

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

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

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

Page 17: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

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

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

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

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

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

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

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

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

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

Page 18: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

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

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

<xsd:simpleType> <xsd:simpleType>

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

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

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

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

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

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

Page 19: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

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

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

<xsd:simpleType> <xsd:simpleType>

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

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

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

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

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

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

Page 20: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

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

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

<xsd:simpleType> <xsd:simpleType>

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

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

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

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

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

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

Page 21: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

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

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

<xsd:simpleType> <xsd:simpleType>

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

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

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

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

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

Page 22: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

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

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

<xsd:simpleType> <xsd:simpleType>

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

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

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

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

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

Page 23: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

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

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

<xsd:simpleType> <xsd:simpleType>

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

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

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

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

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

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

Page 24: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

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

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

<xsd:simpleType> <xsd:simpleType>

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

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

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

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

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

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

Page 25: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Elementos para Elementos para restriccionesrestriccionesenumerationenumeration Establece una lista de valores Establece una lista de valores

“aceptados”“aceptados”

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

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

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

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

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

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

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

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

Page 26: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Elementos complejosElementos complejos

Son elementos que contienen a otros Son elementos que contienen a otros elementos hijos, o que tienen atributoselementos hijos, o que tienen atributos

Se suelen dividir en 4 tipos:Se suelen dividir en 4 tipos:– Elementos vacíosElementos vacíos– Elementos no vacíos con atributosElementos no vacíos con atributos– Elementos con elementos hijosElementos con elementos hijos– Elementos con elementos hijos y con Elementos con elementos hijos y con

“texto” o valor propio (como el contenido “texto” o valor propio (como el contenido mixto de las DTD)mixto de las DTD)

Page 27: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Elementos complejosElementos complejos Ejemplos:Ejemplos:

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

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

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

<employee> <employee>

<firstname>John</firstname> <firstname>John</firstname>

<lastname>Smith</lastname> <lastname>Smith</lastname>

</employee></employee>

Page 28: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Declarar elementos Declarar elementos complejoscomplejos Para definir elementos complejos se utiliza la Para definir elementos complejos se utiliza la

siguiente sintáxis:siguiente sintáxis:

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

<xsd:complexType> <xsd:complexType>

<xsd:sequence> <xsd:sequence>

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

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

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

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

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

Page 29: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Declarar elementos Declarar elementos complejoscomplejos Podemos usar otra sintáxis para reutilizar la Podemos usar otra sintáxis para reutilizar la

“definición” de los elementos hijos en varios “definición” de los elementos hijos en varios elementos:elementos:

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

<xsd:element name="student" type="personinfo"/> <xsd:element name="student" type="personinfo"/>

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

<xsd:sequence> <xsd:sequence>

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

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

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

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

Page 30: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Declarar elementos Declarar elementos complejoscomplejos En la declaración de elementos complejos, es En la declaración de elementos complejos, es

posible utilizar un mecanismo de “herencia” posible utilizar un mecanismo de “herencia” para reutilizar o extender elementos para reutilizar o extender elementos definidos con anterioridad (ver la siguiente definidos con anterioridad (ver la siguiente página)página)

Page 31: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

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

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

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

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

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

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

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

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

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

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

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

Page 32: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Declarar elementos Declarar elementos complejoscomplejos

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

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

<xsd:complexType> <xsd:complexType>

<xsd:attribute name="prodid" <xsd:attribute name="prodid" type="xsd:positiveInteger"/>type="xsd:positiveInteger"/>

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

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

<product prodid="1345" /><product prodid="1345" />

Page 33: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Declarar elementos Declarar elementos complejoscomplejos

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

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

<xsd:simpleContent> <xsd:simpleContent> <xsd:extension base="xsd:integer"> <xsd:extension base="xsd:integer">

<xsd:attribute name="country" <xsd:attribute name="country" type="xsd:string" />type="xsd:string" />

</xsd:extension> </xsd:extension> </xsd:simpleContent> </xsd:simpleContent>

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

Page 34: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Declarar elementos Declarar elementos complejoscomplejos

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

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

<xsd:complexType <xsd:complexType mixed="true">mixed="true">

<xsd:sequence> <xsd:sequence>

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

<xsd:element name="orderid" <xsd:element name="orderid" type="xsd:positiveInteger"/> type="xsd:positiveInteger"/>

<xsd:element name="shipdate" type="xsd:date"/> <xsd:element name="shipdate" type="xsd:date"/>

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

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

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

Page 35: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Declarar elementos Declarar elementos complejoscomplejos

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

<letter>Estimado cliente: <name>Juan Perez</name>. Su pedido <letter>Estimado cliente: <name>Juan Perez</name>. Su pedido número <orderid>1032</orderid> se enviará el día número <orderid>1032</orderid> se enviará el día <shipdate>2001-07-13</shipdate>. </letter><shipdate>2001-07-13</shipdate>. </letter>

Page 36: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Declarar elementos Declarar elementos complejos: Indicadorescomplejos: Indicadores

En los ejemplos anteriores hemos utilizado el En los ejemplos anteriores hemos utilizado el elemento xsd:sequence como elemento hijo del elemento xsd:sequence como elemento hijo del elemento xsd:complexTypeelemento xsd:complexType

Xsd:sequence indica que los elementos anidados en Xsd:sequence indica que los elementos anidados en él deben aparecer en un orden determinadoél deben aparecer en un orden determinado

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

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

Page 37: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Declarar elementos Declarar elementos complejos: Indicador xsd:allcomplejos: Indicador xsd:all

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

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

<xsd:complexType> <xsd:complexType>

<xsd:all> <xsd:all>

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

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

</xsd:all> </xsd:all>

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

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

Page 38: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Declarar elementos Declarar elementos complejos: Indicador complejos: Indicador xsd:choicexsd:choice

El indicador xsd:choice indica que puede aparecer El indicador xsd:choice indica que puede aparecer sólo uno de los elementos que contienesólo uno de los elementos que contiene

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

<xsd:complexType> <xsd:complexType>

<xsd:choice> <xsd:choice>

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

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

</xsd:choice> </xsd:choice>

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

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

Page 39: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

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

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

El atributo maxOccurs puede tomar el valor “unbounded”, que El atributo maxOccurs puede tomar el valor “unbounded”, que indica que no existe ningún límiteindica que no existe ningún límite

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

<xsd:complexType> <xsd:complexType>

<xsd:sequence> <xsd:sequence>

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

<xsd:element name="child_name" type="xsd:string" <xsd:element name="child_name" type="xsd:string" maxOccurs="10"/> maxOccurs="10"/>

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

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

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

Page 40: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

El modelo de contenido ANYEl modelo de contenido ANY

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

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

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

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

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

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

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

Page 41: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

El modelo de contenido ANYEl modelo de contenido ANY

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

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

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

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

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

Page 42: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Práctica 1Práctica 1 Diseñar un esquema XML para crear Diseñar un esquema XML para crear

documentos para el préstamo.documentos para el préstamo. En cada documento se indicarán:En cada documento se indicarán:

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

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

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

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

Page 43: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Práctica 2Práctica 2 Modificar un nuevo esquema, de forma Modificar un nuevo esquema, de forma

que no todos los elementos estén que no todos los elementos estén anidados, utilizando las referencias.anidados, utilizando las referencias.

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

Page 44: Tema 4: Estructura de documentos XML, W3C Esquemas Ricardo Eíto Brun Sevilla, 23-25 de octubre 2002

Práctica 3Práctica 3 Crear un esquema xml para codificar Crear un esquema xml para codificar

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

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