Você está na página 1de 18

Diseño Basado en Componentes.

Curso 2008 / 09

Tabla de Contenidos
Diseño Basado en Componentes  Plantillas de validación de documentos XML
– DTD
 Declaración de tipos
 Elemento raíz
Elementos
DTD y 
 Atributos
XML Schema – XML Schema
 Elemento raíz
 Elementos simples
Ingeniería Informática  Elementos complejos
Universidad Carlos III de Madrid  Restricciones
Diseño Basado en Componentes.  Tipos de datos
Curso 2008 / 09

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

DTD DTD. Declaración de tipo (i)


<!ELEMENT Libros (Libro+)>
Libros1.dtd <!ELEMENT Libro (Titulo, Autor)>
 DTD - Document Type Definition. <!ELEMENT Titulo (#PCDATA)>
<!ELEMENT Autor (#PCDATA)>
 Define la gramática a seguir en el documento
<?xml version="1.0" encoding="utf-8" ?>
XML para que éste sea considerado como <!DOCTYPE Libros SYSTEM "Libros1.dtd">
válido. <Libros>
<Libro>
 Puede incluirse en un fichero externo al XML, <Titulo>Don Quijote de la Mancha</Titulo>
<Autor>Miguel de Cervantes</Autor>
y/o incluirse dentro del propio fichero XML. </Libro>
<Libro>
<Titulo>La vida es suenno</Titulo>
<Autor>Calderon de la Barca</Autor>
</Libro>
</Libros>

1
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

DTD. Declaración de tipo (ii) DTD. Elemento raíz


<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE Libros [
<!ELEMENT Libros (Libro+)>  Toda DTD debe tener uno y sólo un elemento
<!ELEMENT Libro (Titulo, Autor)>
<!ELEMENT Titulo (#PCDATA)>
raíz (también conocido como elemento
<!ELEMENT Autor (#PCDATA)> documento).
]>
<Libros>  Este elemento raíz debe coincidir con el nombre
<Libro>
<Titulo>Don Quijote de la Mancha</Titulo>
que aparece a continuación del DOCTYPE.
<Autor>Miguel de Cervantes</Autor>
</Libro>
<Libro>
<Titulo>La vida es suenno</Titulo>
<Autor>Calderon de la Barca</Autor>
</Libro>
</Libros>

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

DTD. Contenido DTD. Elementos (i)

 A partir del elemento raíz, pueden


 Un documento DTD puede contener:
opcionalmente colgar (de forma jerárquica) otros
– Declaraciones de elementos.
elementos.
– Declaraciones de atributos para un elemento.
– Declaraciones de entidades. <!ELEMENT Libros (Libro+)>
– Declaraciones de notaciones. <!ELEMENT Libro (Titulo, Autor)>
– Instrucciones de procesamiento. <!ELEMENT Titulo (#PCDATA)>
– Comentarios. <!ELEMENT Autor (#PCDATA)>
– Referencias a entidades de parámetro.

2
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

DTD. Elementos (ii) DTD. Elementos (iii)


 Contenido de un elemento:  Secuencias de hijos de un elemento:
– EMPTY: El elemento está vacío (puede contener – Secuencia:
atributos). Ej.: <!ELEMENT IMAGEN EMPTY>  Secuencia en orden: hijos separados por comas.
– ANY: El elemento puede almacenar cualquier tipo de  Opciones: hijos separados por | (barra)
contenido. Ej.: <!ELEMENT IMAGEN ANY>  Conjuntos de elementos pueden agruparse entre paréntesis.
– Otros elementos: Un elemento puede contener uno o
– Cardinalidad: un elemento, o un conjunto de ellos
más elementos hijos en una cierta secuencia. Ej.:
<!ELEMENT LIBRO (TITULO, AUTOR)> puede repetirse 0, 1 ó más veces:
– #PCDATA: Texto a procesar por el parser.  elemento Elemento repetido 1 única vez
Ej.: <!ELEMENT LIBRO (#PCDATA)>  ? Elemento repetido 0 ó 1 vez
– Mixto: el elemento puede incluir secuencias de  * Elemento repetido 0 ó más veces
caracteres opcionalmente mezcladas con elementos  + Elemento repetido 1 ó más veces
hijos. <!ELEMENT LIBRO (#PCDATA | AUTOR)*>

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

DTD. Elementos (iv) DTD. Atributos (i)

<!ELEMENT LIBRO (Autor, Editorial)>


 Un elemento puede opcionalmente declarar uno
<!ELEMENT Autor (#PCDATA)>
<!ELEMENT PELICULA (Actor|Actriz|Director)+>
o más atributos
<!ELEMENT PELICULA ((Actor | Actriz)*, Director, Maquillaje?)> – <!ATTLIST Elemento Atributo Tipo Modificador>
<!ELEMENT PELICULA (#PCDATA | Actor)*>  Los atributos de un elemento pueden incluirse
<!ELEMENT PELICULA (Titulo, Genero, (Actor | Actriz | Narrador)*)>
en una o más declaraciones <!ATTLIST ...>.
<!ELEMENT FICHA (Nombre+, Apellido+, Direccion*, foto?,
TelFijo*|TelMovil*)  Si se hace en la misma declaración, basta con
<!ELEMENT FICHA ((Sr | Sra | Srta)?, Nombre, Apellido*)> separar con un espacio (espacio, tabulador,
<!ELEMENT Sr EMPTY> retorno de carro).

3
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

DTD. Atributos (ii) DTD. Atributos (iii)


 Tipo de un atributo:  Modificadores:
– Tipo cadena: CDATA – #REQUIRED: Este atributo debe introducirse
<!ATTLIST Autor Nacionalidad CDATA> obligatoriamente.
– Tipo enumerado: Ej.: <!ATTLIST Pelicula Titulo CDATA #REQUIRED>
<!ATTLIST Pelicula Genero (Ficcion | Terror | Humor)>
– #IMPLIED: Indica que el atributo es opcional.
– Tipo simbólico:
 ID: valdrá como identificador en el resto del documento, sólo
– ValorPredeterminado: Si se omitiese el atributo, los
un atributo ID por cada elemento. procesadores recogerían este valor por omisión. Ej.:
 IDREF, IDREFS: su valor debe coincidir con algún otro <!ATTLIST Pelicula Genero (Ficcion | Terror | Humor) “Humor”>
atributo de tipo ID en el resto del documento XML. IDREFS <!ATTLIST Autor Nacionalidad CDATA “Espanola”>
separa las referencias por espacio. Ej.: “ID1 ID2 ID3”.
 ENTITY, ENTITIES: su valor debe coincidir con una o más – #FIXED: se incluya o no se incluya el atributo, los
entidades no analizadas. procesadores siempre obtendrán este mismo valor
 NMTOKEN, NMTOKENS: su valor ha de ser una cadena de <!ATTLIST Autor Nacionalidad CDATA #FIXED “Espanyola”>
tipo token. Ej.: <LIBRO ISBN=“9-34532-33-81”></LIBRO>

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

DTD. Problemas XML Schema


 Una DTD no sigue el formato de un documento
XML estándar.  XML Schema es una alternativa más potente a
 Esto representa un problema para los parsers. las DTDs.
 No se soportan distintos tipos de datos al estilo  XML Schema permite escribir esquemas
de los lenguajes de programación. detallados para documentos XML, utilizando la
 No se pueden crear tipos de datos sintaxis estándar de XML.
personalizados.  XML Schema describe la estructura de un
 No se soportan los espacios de nombres. documento XML.
 El número de ocurrencias no se puede controlar  El lenguaje XML Schema también se denomina
al 100%. XML Schema Definition (XSD).
 Por estas y otras razones, surgen los
Schemas (Esquemas) XML.

4
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

¿Para que sirve un XML Schema? XML Schema es el sucesor de DTD´s


 El objetivo de un XML Schema es definir los elementos  En un futuro, los XML Schema serán utilizados
que permiten construir un documento XML válido, igual en la mayoría de las aplicaciones Web y
que las DTDs. reemplazarán a las actuales DTDs:
 Un XML Schema define: – Los XML Schemas son extensibles.
– los elementos que pueden aparecer en un documentos
– Los XML Schemas son más ricos semánticamente que las
– atributos que pueden aparecer en un documento DTDs.
– qué elementos son elementos hijos
– Los XML Schemas están escritos siguiendo la sintaxis
– el orden de los elementos hijos
estándar de XML.
– el número de elementos hijos
– Los XML Schemas soportan tipos de datos.
– si un elemento está vacío o puede incluir texto
– Los XML Schemas soportan namespaces.
– los tipos de datos de sus elementos y atributos
– los valores por defecto y fijos para elementos y atributos
XML Schema es un estándar de W3C

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema soporta tipos de datos XML Schema utiliza sintaxis de XML

 La característica mas importante de los XML  Otra característica importante de los XML
Schemas es que soportan tipos de datos. Schemas es que están escritos en XML.
 Los tipos de datos permiten:  Beneficios:
– describir qué elementos están permitidos – No hay necesidad de aprender un lenguaje nuevo.
– Se puede utilizar un editor de XML para editar el XML
– validar si los datos son correctos
Schema.
– trabajar con los datos de una base de datos – Se puede utilizar un procesador de XML para procesar un
– definir Facets (restricciones) XML Schema.
– definir patrones de datos (formatos) – Se puede manipular un XML Schema utilizando XML
– convertir datos considerando diferentes tipos de datos DOM.
– Se puede transformar un XML Schema utilizando XSLT.

5
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

Transmisión de datos sin


ambigüedad Los XML Schema son extensibles
 Cuando se transmite información desde un emisor a un
receptor, es necesario que ambas partes conozcan el mismo  Los XML Schemas son extensibles porque están
protocolo de comunicación.
escritos en XML.
 Con XML Schemas, el emisor puede describir los datos de
manera que el receptor lo entienda.  Con una definición de XML Schemas extensible
 Una fecha como: "03-11-2006", dependiendo del país, puede se podrá:
ser interpretada como "3 de noviembre" y en otros países – reutilizar el Schema en otros Schemas
como "11 de marzo".
– crear tipos de datos propios derivados de los tipos
 Con lo cual, al definir un elemento de la siguiente manera:
estándar
– <fechaInicio type="date">2006-03-11</fechaInicio>
– referenciar varios Schemas en el mismo documento
se asegura un mutuo entendimiento sobre el contenido,
porque el tipo de dato “date” requiere el formato “YYYY-MM-
DD”.

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

No es suficiente que el XML Schema


esté bien formado Ejemplo XML
 Un documento XML bien formado es un documento que
cumple las reglas sintácticas de XML como:
– Empezar con la declaración XML.
<?xml version="1.0"?>
– Tener un único elemento raíz.
<nota>
– Las etiquetas de apertura deben tener su correspondientes
<a>Juan</a>
etiquetas de cierre.
<de>Susana</de>
– Los elementos son “case-sensitive”.
<cabecera>Recordatorio</cabecera>
– Todos los elementos deben cerrarse.
<cuerpo>¡Recuerda que tenemos reunión!</cuerpo>
– Todos los elementos tienen que estar adecuadamente anidados.
</nota>
– Los atributos deben estar entre comillas.
– Se deben utilizar las entidades para utilizar caracteres
especiales.
 A pesar de que los documentos estén bien formados
pueden seguir teniendo errores.

6
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

Ejemplo XML Schema Referencia a un XML Schema


<?xml version="1.0"?>  Cómo se referencia un archivo XML Schema
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com" desde un documento XML.
xmlns="http://www.w3schools.com"
elementFormDefault="qualified"> <?xml version="1.0"?>

<xs:element name="nota"> <nota


<xs:complexType> xmlns="http://www.w3schools.com"
<xs:sequence>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<xs:element name=“a” type="xs:string"/>
<xs:element name=“de” type="xs:string"/> xsi:schemaLocation="http://www.w3schools.com note.xsd">
<xs:element name=“cabecera” type="xs:string"/>
<xs:element name=“cuerpo” type="xs:string"/> <a>Juan</a>
</xs:sequence> <de>Susana</de>
</xs:complexType> <cabecera>Recordatorio</cabecera>
</xs:element> <cuerpo>¡Recuerda que tenemos reunión!</cuerpo>
</xs:schema> </nota>

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Elemento raíz XML Schema. Elementos simples (i)


 Un elemento simple es un elemento XML que sólo puede
 El elemento <schema> es el elemento raíz contener texto. No puede contener ni elementos ni
(elemento documento) de todo XML Schema: atributos.
<?xml version="1.0"?>  Sin embargo, la restricción "sólo texto" no es del todo
cierta. El texto puede contener muchos tipos de datos.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" Puede ser de uno de los tipos incluidos en la definición
targetNamespace="http://www.w3schools.com" de XML Schema (boolean, string, date, etc.), o puede ser
xmlns="http://www.w3schools.com"
de un tipo definido por el usuario.
elementFormDefault="qualified">
 Además, se pueden añadir restricciones (facets) a los
... tipos de datos, para limitar así su contenido, o para
... requerir que ciertos datos sean conformes a un patrón
específico.
</xs:schema>

7
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Elementos simples (ii) XML Schema. Elementos simples (iii)
 La sintaxis de un elemento simple es:  Ejemplo de XML:
<xs:element name="xxx" type="yyy"/> <nombre>Jana</nombre>
<edad>36</edad>
 donde xxx es el nombre del elemento e yyy es el tipo de <fechanacimiento>1970-03-27</fechanacimiento>
datos del elemento.
 Los tipos de datos más comunes en XML Schema son:  Ejemplo de XML Schema:
– xs:string
– xs:decimal
<xs:element name=“nombre” type="xs:string"/>
– xs:integer <xs:element name=“edad” type="xs:integer"/>
– xs:boolean <xs:element name=“fechanacimiento” type="xs:date"/>
– xs:date

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Elementos simples (iv) XML Schema. Atributos (i)


 Se pueden especificar valores por defecto o  Los elementos simples no pueden tener atributos.
valores fijos para los elementos simples.
 Un elemento con atributos será considerado un tipo
 Se asignará automáticamente el valor por defecto complejo (complex type).
si no se especifica otro valor para el elemento.  Sin embargo, los atributos se definen como un tipo
simple.
<xs:element name="color" type="xs:string" default=“rojo"/>
<xs:attribute name="xxx" type="yyy"/>
 Se asignará automáticamente un valor para el
elemento, pero en este caso, dicho valor no  donde xxx es el nombre del elemento e yyy es el tipo de
puede ser modificado. datos del atributo.

<xs:element name="color" type="xs:string" fixed=“rojo"/>

8
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Atributos (ii) XML Schema. Atributos (iii)


 Código en XML:  Se pueden especificar valores por defecto o valores fijos
para los atributos.
 Se asignará automáticamente el valor por defecto si no
<apellido idioma="EN">Smith</apellido> se especifica otro valor para el atributo.
<xs:attribute name=“idioma” type="xs:string" default="EN"/>

 Código en XML Schema:  Se asignará automáticamente un valor para el atributo,


pero en este caso, dicho valor no puede ser modificado.
<xs:attribute name=“idioma” type="xs:string" fixed="EN"/>
<xs:attribute name=“idioma” type="xs:string"/>
 Por defecto los atributos son opcionales, pero se puede
hacer que éstos sean requeridos.
<xs:attribute name=“idioma” type="xs:string" use="required"/>

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Restricciones (i) XML Schema. Restricciones (ii)


 Las restricciones en XML Schema se denominan  Para limitar el contenido de un elemento XML a
“FACETS” un conjunto de valores, se utilizará la restricción
<xs:element name=“edad”> enumeration.
<xs:element name=“coche”>
<xs:simpleType>
<xs:restriction base="xs:integer"> <xs:simpleType>
<xs:minInclusive value="0"/> <xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:maxInclusive value="120"/> <xs:enumeration value="Golf"/>
</xs:restriction> <xs:enumeration value="BMW"/>
</xs:simpleType> </xs:restriction>
</xs:simpleType>
</xs:element>
</xs:element>

9
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Restricciones (iii) XML Schema. Restricciones (iv)


 Para limitar que el contenido de un elemento
 Otra alternativa:
XML solo pueda tener una serie de números o
<xs:element name= "coche" type="TipoCoche"/> letras se deberá utilizar la restricción pattern.
<xs:element name=“letra">
<xs:simpleType name="TipoCoche">
<xs:restriction base="xs:string"> <xs:simpleType>
<xs:enumeration value="Audi"/> <xs:restriction base="xs:string">
<xs:enumeration value="Golf"/> <xs:pattern value="[a-z]"/>
<xs:enumeration value="BMW"/> </xs:restriction>
</xs:restriction> </xs:simpleType>
</xs:simpleType>
</xs:element>

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Restricciones (v) XML Schema. Restricciones (vi)


 Los únicos valores permitidos son tres letras de la ‘a’ a la ‘z’ escritas  Los únicos valores permitidos son cero o más ocurrencias de letras
en mayúscula. en minúscula desde la ‘a’ a la ‘z’:
<xs:pattern value="[A-Z][A-Z][A-Z]"/> <xs:pattern value="([a-z])*"/>

 Los únicos valores permitidos son tres letras de la ‘a’ a la ‘z’ escritas  Los únicos valores permitidos son una o más ocurrencias de dos
en mayúscula o en minúscula: letras. En cada par de letras, la primera irá en minúscula y la
<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/> segunda en mayúscula. Por ejemplo, "sToP" sería validado por el
patrón, pero no "Stop“, "STOP“ ó "stop":
 El único valor permitido es una de las siguientes letras: ‘x’, ‘y’, o ‘z’:
<xs:pattern value="([a-z][A-Z])+"/>
<xs:pattern value="[xyz]"/>
 Los únicos valores permitidos son exactamente ocho caracteres,
 Los únicos valores permitidos son cinco dígitos comprendidos entre donde esos caracteres pueden ser letras minúsculas, letras
‘0’ y ‘9’: mayúsculas o un dígito del 0 al 9:

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

10
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Restricciones (vii) XML Schema. Restricciones (viii)


 Para especificar como se van a tratar los <xs:element name=“direccion">
caracteres en blanco, se utilizará la restricción
<xs:simpleType>
whiteSpace. <xs:restriction base="xs:string">
<xs:whiteSpace value=“replace"/>
<xs:element name=“direccion"> </xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:string"> </xs:element>
<xs:whiteSpace value="preserve"/>  Si se desea que XML elimine todos los espacios en blanco; LF, CR,
</xs:restriction> tabulaciones, los espacios de principio y de final de cadena, y los
</xs:simpleType> espacios intermedios (dejando para este caso sólo uno):

<xs:whiteSpace value="collapse"/>
</xs:element>

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Restricciones (ix) XML Schema. Restricciones (x)


Restricción Descripción
<xs:element name="password"> enumeration Define una lista de valores permitidos.
<xs:simpleType> fractionDigits
Especifica el número máximo de decimales permitidos. Debe ser mayor o igual
que cero.
<xs:restriction base="xs:string">
Especifica el número exacto de caracteres o ítems permitidos. Debe ser mayor
<xs:length value="8"/> length
o igual que cero.
</xs:restriction> maxExclusive
Especifica el límite superior para un valor numérico (el valor debe ser inferior al
número especificado).
</xs:simpleType>
Especifica el límite superior para un valor numérico (el valor debe ser inferior o
</xs:element> maxInclusive
igual al número especificado).
Especifica el número máximo permitido de caracteres o de ítems. Debe ser
maxLength
<xs:element name="password"> mayor o igual que cero.
Especifica el límite inferior para un valor numérico (el valor debe ser superior al
<xs:simpleType> minExclusive
número especificado).
<xs:restriction base="xs:string"> Especifica el limite inferior para un valor numérico (el valor debe ser superior o
minInclusive
<xs:minLength value="5"/> igual al número especificado).
Especifica el numero mínimo permitido de caracteres o de ítems. Debe ser
<xs:maxLength value="8"/> minLength
mayor o igual que cero.
</xs:restriction> pattern Define la secuencia exacta de caracteres permitidos.
</xs:simpleType> totalDigits Especifica el número exacto de dígitos permitidos. Debe ser mayor que cero.
</xs:element> whiteSpace
Especifica como se manejan los espacios en blanco (LF, CR, tabulaciones,
espacios).

11
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Elementos complejos (I) XML Schema. Elementos complejos (ii)
 Elemento XML complejo vacío:
 Un elemento complejo es un elemento XML que
<producto pid="1345"/>
puede tener más elementos y/o atributos.
 Elemento XML complejo que contiene sólo otros elementos :
 .
Hay cuatro clases de elementos complejos:
<empleado>
- Elementos vacíos. <nombre>Juan</nombre>
<apellidos>García López</apellidos>
- Elementos que contienen otros elementos. </empleado>

- Elementos que contienen sólo texto.  Elemento XML complejo que contiene sólo texto:
- Elementos que contienen ambos: otros <comida tipoC=“postre”>Helado</comida>

elementos y texto.  Elemento XML complejo que contiene ambos (texto y otros
elementos): <carta>
Estimado Sr.<nombre>Juan García</nombre>.
 Nota: Cada uno de estos elementos pueden Su pedido <pedidoid>1032</pedidoid>
será enviado el <fechaenv>2007-03-25</fechaenv>.
contener atributos. </carta>

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Elementos complejos (iii) XML Schema. Elementos complejos (iv)
2. El elemento "empleado" puede tener un tipo de atributo
 Se puede definir un elemento complejo en XML que hace referencia al nombre del tipo complejo a usar.
Schema de dos formas distintas : <xs:element name=“empleado" type=“InfoPersona"/>
<xs:complexType name=“InfoPerson a">
1. El elemento “empleado" se puede declarar <xs:sequence>
directamente nombrando el elemento : <xs:element name=“nombre" type="xs:string"/>
<xs:element name=“apellidos" type="xs:string"/>
</xs:sequence>
<xs:element name=“empleado"> </xs:complexType>
<xs:complexType>
<xs:sequence> Usando este método, muchos elementos se pueden referir
<xs:element name=“nombre" type="xs:string"/> a la misma definición de tipo complejo :
<xs:element name=“apellidos" type="xs:string"/>
<xs:element name=“empleado" type=“InfoPersona"/>
</xs:sequence> <xs:element name=“alumno" type=“InfoPersona"/>
</xs:complexType> <xs:element name=“Socio" type=“InfoPersona"/>
</xs:element> <xs:complexType name="personinfo">
...
</xs:complexType>

12
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Elementos complejos


XML Schema. Elementos complejos (v) vacíos
 Además, se puede describir un elemento complejo basándose en
otro elemento complejo añadiendo más elementos:  Definición en XML Schema:
<xs:element name=“empleado" type=“InfoPersonaT"/>
<xs:complexType name=“InfoPersona"> <xs:element name="producto">
InfoPersona <xs:sequence> <xs:complexType>
nombre <xs:element name="nombre" type="xs:string"/>
apellidos <xs:element name=“apellidos" type="xs:string"/> <xs:attribute name=“pid" type="xs:positiveInteger"/>
</xs:sequence> </xs:complexType>
</xs:complexType>
<xs:complexType name=" InfoPersonaT"> </xs:element>
<xs:complexContent>
<xs:extension base=" InfoPersona">
<xs:sequence> <xs:element name="producto" type=“TipoProd"/>
InfoPersonaT <xs:element name=“direccion" type="xs:string"/>
<xs:element name="ciudad" type="xs:string"/>
direccion <xs:element name=“pais" type="xs:string"/> <xs:complexType name=“TipoProd">
ciudad </xs:sequence>
pais <xs:attribute name="pid" type="xs:positiveInteger"/>
</xs:extension>
</xs:complexContent> </xs:complexType>
</xs:complexType>

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Elementos complejos con XML Schema. Elementos complejos con
sólo elementos texto y otros elementos
 La etiqueta <xs:sequence> indica que los elementos  Para permitir que aparezcan caracteres entre los
definidos deben aparecer en el orden descrito dentro del elementos hijos, el atributo mixed debe estar a "true".
<xs:element name=“carta”>
elemento “persona”. <xs:complexType mixed="true">
<xs:element name="persona"> <xs:sequence>
<xs:complexType> <xs:element name=“nombre” type="xs:string"/>
<xs:sequence> <xs:element name=“pedidoid" type="xs:positiveInteger"/>
<xs:element name="nombre" type="xs:string"/> <xs:element name=“fechaenv" type="xs:date"/>
<xs:element name=“apellidos" type="xs:string"/> </xs:sequence>
</xs:sequence> </xs:complexType>
</xs:complexType> </xs:element>
</xs:element>
<xs:element name=“carta" type=“TipoCarta"/>
<xs:element name="persona" type=“TipoPersona"/> <xs:complexType name=“TipoCarta" mixed="true">
<xs:complexType name=“TipoPersona"> <xs:sequence>
<xs:sequence> <xs:element name=“nombre” type="xs:string"/>
<xs:element name=“nombre" type="xs:string"/> <xs:element name=“pedidoid" type="xs:positiveInteger"/>
<xs:element name=“apellidos" type="xs:string"/> <xs:element name=“fechaenv" type="xs:date"/>
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>

13
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Indicadores para


elementos complejos XML Schema. Indicadores de orden
<xs:element name=“persona">
 Permiten realizar el control de qué elementos  Indicador <xs:all> <xs:complexType>
Los hijos pueden <xs:all>
van a ser utilizados en un documento XML. –
<xs:element name=“nombre" type="xs:string"/>
aparecer en cualquier <xs:element name=“apellidos" type="xs:string"/>
 Hay siete tipos de indicadores: orden y una sola vez. </xs:all>
</xs:complexType>
– Indicadores de orden: </xs:element>

 All
 Indicador <xs:choice> <xs:element name="person">
 Choice <xs:complexType>
– Solo puede aparecer un <xs:choice>
 Sequence hijo de los descritos. <xs:element name=“empleado” type=“Empleado”/>
<xs:element name=“socio” type=“Socio”/>
– Indicadores de ocurrencia: </xs:choice>
 maxOccurs </xs:complexType>
</xs:element>
 minOccurs
– Indicadores de grupo:
 Indicador <xs:sequence>
 Group name
– Deben aparecer los hijos en la secuencia descrita y solo una vez.
 attributeGroup name

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Indicadores de grupo de


XML Schema. Indicadores de ocurrencia elementos
 Indicador <maxOccurs>: El número máximo de veces que se  Define grupos de elementos para poder
puede dar un elemento.
referenciarlos varias veces.
 Indicador <minOccurs>: El número mínimo de veces que un <xs:group name=“GrupoPersonas">
elemento puede aparecer <xs:sequence>
<xs:element name=“nombre" type="xs:string"/>
<xs:element name="person"> <xs:element name=“apellidos" type="xs:string"/>
<xs:complexType> <xs:element name=“fechanac" type="xs:date"/>
<xs:sequence> </xs:sequence>
</xs:group>
<xs:element name=“nombre_completo" type="xs:string"/>
<xs:element name=“nombre_hijo" type="xs:string" <xs:element name=“persona" type=“InfoPersona"/>
maxOccurs="10" minOccurs="0"/>
</xs:sequence> <xs:complexType name=“InfoPersona">
</xs:complexType> <xs:sequence>
</xs:element> <xs:group ref=“GrupoPersonas"/>
<xs:element name=“pais" type="xs:string"/>
</xs:sequence>
 Por defecto, <minOccurs> = “1” </xs:complexType>

14
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Indicadores de grupos de


atributos XML Schema. <any> (i)
 Define grupos de atributos para poder  El elemento <any> permite extender documentos con
referenciarlos varias veces. elementos que no han sido descritos en el Schema.
Familia.xsd
<xs:attributeGroup name=“GrupoAtrPersonas"> <xs:element name=“persona”>
<xs:attribute name=“nombre" type="xs:string"/> <xs:complexType>
<xs:attribute name=“apellidos" type="xs:string"/> <xs:sequence>
<xs:attribute name=“fechanac" type="xs:date"/> <xs:element name=“nombre” type="xs:string"/>
</xs:attributeGroup> <xs:element name=“apellidos” type="xs:string"/>
<xs:any minOccurs="0"/>
<xs:element name=“persona"> </xs:sequence>
<xs:complexType> </xs:complexType>
<xs:attributeGroup ref=“GrupoAtrPersonas"/> </xs:element>
</xs:complexType>
</xs:element>  Después del elemento <apellidos> se podrían poner
otros elementos que no están definidos en el Schema.

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. <any> (ii) XML Schema. <anyAttribute> (i)


<?xml version="1.0" encoding="ISO-8859-1"?>
 El elemento <anyAttribute> permite extender
<personas xmlns="http://www.microsoft.com" documentos con atributos que no han sido descritos en
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:SchemaLocation="http://www.microsoft.com familia.xsd el Schema.
http://www.w3schools.com hijos.xsd">
<xs:element name="persona">
<persona> <xs:complexType>
<nombre>Jana</nombre> <xs:sequence>
<apellidos>Martínez Sanz</apellidos> <xs:element name=“nombre” type="xs:string"/>
<hijos> <xs:element name=“apellido” type="xs:string"/>
<nombrehijo>Cecilia</nombrehijo> </xs:sequence>
</hijos> <xs:anyAttribute/>
</persona> </xs:complexType>
</xs:element>
<persona>
<nombre>Miguel</nombre>
<apellidos>Campos Pérez</apellidos>  Cuando se describa una persona en el documento XML
</persona> se podrá extender con atributos de otro Schema.
</personas>

15
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. < anyAttribute > (ii) XML Schema. String


<?xml version="1.0" encoding="ISO-8859-1"?>
 El tipo de dato String permite contener cualquier
<personas xmlns="http://www.microsoft.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" tipo de caracteres, LF (line feeds), CR (carriage
xsi:SchemaLocation="http://www.microsoft.com familia.xsd returns), y tabulaciones.
http://www.w3schools.com attributo.xsd">

<persona sexo=“femenino"> <xs:element name=“cliente" type="xs:string"/>


<nombre>Jana</nombre>
<apellidos>Martínez Sanz</apellidos>
</persona> <cliente>Juan García</cliente>

<persona sexo=“masculino">
<nombre>Miguel</nombre>
<cliente> Juan García </cliente>
<apellidos>Campos Pérez</apellidos>
</persona>

</personas>

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. normalizedString XML Schema. token


 El tipo de datos normalizedString permite contener  El tipo de datos token permite contener cualquier carácter,
cualquier carácter pero el procesador de XML sustituye pero el procesador de XML eliminará los LF, CR,
los LF, CR y caracteres de tabulación por espacios. caracteres de tabulación, espacios al principio, espacios al
final, y espacios entre medias
<xs:element name=“cliente" type="xs:normalizedString"/> <xs:element name=“cliente" type="xs:token"/>

<cliente>Juan García</cliente> <cliente>Juan García</cliente>

<cliente> Juan García </cliente>


<cliente> Juan García </customer>

El procesador de XML sustituye


las tabulaciones por espacios El procesador de XML elimina las tabulaciones, espacios
del principio, final, entre medias (dejando solo uno)

16
Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Cadenas de caracteres XML Schema. Fechas

Nombre Descripción Nombre Descripción


ID Cadena de caracteres que representa un date Define un valor para una fecha.
atributo ID en XML (sólo se usa con atributos dateTime Define valores de fecha y hora.
de esquema).
duration Define intervalos de tiempo.
IDREF Cadena de caracteres que representa el
atributo IDREF en XML (sólo se usa con gDay Define una parte de una fecha: el día (DD).
atributos de esquema). gMonth Define una parte de una fecha: el mes (MM).
language Cadena de caracteres que contiene un ID de gMonthDay Define una parte de una fecha: el mes y el
lenguaje válido. día (MM-DD).
Name Cadena de caracteres que contiene un gYear Define una parte de una fecha: el año
nombre XML válido. (YYYY).
NMTOKEN Cadena de caracteres que representa el gYearMonth Define una parte de una fecha: el año y el
atributo NMTOKEN en XML (sólo se usa con mes (YYYY-MM).
atributos de esquema).
time Define un valor de hora.

Diseño Basado en Componentes. Curso 2008 / 09 Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. decimal XML Schema. integer


 El tipo de dato decimal se utiliza para  El tipo de dato integer sirve para poder describir
especificar valores numéricos decimales. números sin la parte fraccional.
<xs:element name=“rendimiento” type="xs:decimal"/> <xs:element name=“coste" type="xs:integer"/>

<rendimiento>999.50</rendimiento>
<coste>999</coste>
<rendimiento>+999.5450</rendimiento>
<coste>+999</coste>
<rendimiento>-999.5230</rendimiento>
<coste>-999</coste>
<rendimiento>0</rendimiento>
<coste>0</coste>
<rendimiento>14</rendimiento>

17
Diseño Basado en Componentes. Curso 2008 / 09

XML Schema. Datos numéricos

Nombre Descripcion Diseño Basado en Componentes


byte Entero de 8 bits con signo.
int Entero de 32 bits con signo.
long Entero de 64 bits con signo.
negativeInteger Entero que contiene sólo valores negativos ( ..., -2, -1.). XML: eXtensible
nonNegativeInteger Entero que contiene sólo valores positivos (0, 1, 2, ...).
nonPositiveInteger Entero que contiene sólo valores no positivos (..., -2, -1, 0).
Markup Language
positiveInteger
short
Entero que contienen sólo valores positivos (1, 2, ...).
Entero de 16 bits con signo.
(Parte II)
unsignedLong Entero de 64 bits sin signo.
unsignedInt Entero de 32 bits sin signo.
unsignedShort Entero de 16 bits sin signo. Ingeniería Informática
unsignedByte Entero de 8 bits sin signo. Universidad Carlos III de Madrid
Diseño Basado en Componentes.
Curso 2008 / 09

18

Você também pode gostar