Tema1.ppt [Modo de compatibilidad] · ... los tipos de datos que se pueden transmitir por correo...

96
1 Servicios de Información y Servicios de Información y formatos de intercambio de datos. Mario Muñoz Organero Mario Muñoz Organero Departamento de Ingeniería Telemática http://www.it.uc3m.es/mario/si Panorámica de la asignatura RED Comunicaciones Servidores información Intercambio de Servidores de información 2 Mario Muñoz Organero. Intercambio de datos Clientes

Transcript of Tema1.ppt [Modo de compatibilidad] · ... los tipos de datos que se pueden transmitir por correo...

1

Servicios de Información yServicios de Información y formatos de intercambio

de datos.

Mario Muñoz OrganeroMario Muñoz OrganeroDepartamento de Ingeniería Telemáticahttp://www.it.uc3m.es/mario/si

Panorámica de la asignatura

RED Comunicaciones

Servidores información

Intercambio de

Servidores de información 2Mario Muñoz Organero.

Intercambio de datos

Clientes

2

¿Qué veremos en este tema?

Algunos formatos de intercambio de datos: XML, XDR.Algunos formatos de intercambio de datos: XML, XDR.Protocolos para el acceso a la información: ServiciosWeb.Arquitectura de un S.I.:

Distribución: CORBA, RMI.Plataforma de desarrollo: J2EE ( JSP, Servlets, EJBs)

Servidores de información 3Mario Muñoz Organero.

Formatos de intercambio de datos

3

Los datos…

Diferentes tipos de información:Diferentes tipos de información:Texto.Datos numéricosMultimedia: Imágenes, Audio y Video.Datos compuestos

Servidores de información 5Mario Muñoz Organero.

…y su codificación

Algunos formatos de codificación para la transmisión de los datosdpueden ser:Texto plano en ASCII, ISO 646, ISO 8859 (ISO Latin, Latin 1) oWindows character setTexto plano en UNICODE (ISO 10646) codificado en UTF-8.MIMEASN.1XDR (usado por RPC)Common Data Representation (CDR) (Usado por CORBA)XML

Servidores de información 6Mario Muñoz Organero.

XMLEn general cada protocolo de intercambio de información tiene sutipo de datos y su forma de codificarlos.

Ej DNS.

4

MIME

Multipurpose Internet Mail ExtensionsMultipurpose Internet Mail Extensions

MIME

La veis en detalle en RROO-2 (no la veremos aquí).( q )La especificación de MIME surge como extensión para los tipos de datosque se pueden transmitir por correo electrónico.Se añaden nuevos tipos a la cabecera de los mensajes (todos compatiblescon la RFC822):

Versión de MIMEContent-Type: ex: Content Type: Image/JPEGContent-Transfer-Encoding: ex: Content-Transfer-Encoding: base64Content-ID

Servidores de información 8Mario Muñoz Organero.

Content-IDContent-Description

Se definen un conjunto de formatos para soportar multimedia en el correoelectrónico

5

Tipos de contenido MIMEType Subtype Description

Text Plain Unformatted text, may be ASCII or ISO 8859

Enriched Provides greater format flexibility

Multipart Mixed The different parts are independent but are to betransmitted together. They should be presented to thereceiver in the order that they appear in the mailmessage.

Parallel Differs from Mixed only in that no order is defined fordelivering the parts to the receiver.

Servidores de información 9Mario Muñoz Organero.

g pAlternative The different parts are alternative versions of the same

information. They are ordered in increasing faithfulness tothe original, and the recipient’s mail system should displaythe “best” version to the user.

Digest Similar to Mixed, but the default type/subtype of each partis message/rfc822.

Tipos de contenido MIMEType Subtype Description

Message rfc822 The body is itself an encapsulated message thatf t RFC 822conforms to RFC 822.

Partial Used to allow fragmentation of large mail items in away that is transparent to the recipient.

External-body Contains a pointer to an object that exists elsewhere

Image jpeg The image is in JPEG format, JFIF encoding

gif The image is in GIF format

Video mpeg MPEG format

Servidores de información 10Mario Muñoz Organero.

Video mpeg MPEG format

Audio Basic Single-channel 8-bit ISDN µ-law encoding at asample rate of 8 kHz.

Application Postscript Adobe Postscript

octet-stream General binary data consisting of 8-bit bytes.

6

Codificaciones MIME7 bit The data are all represented by short lines of ASCII

characters

8 bi Th li h b h b ASCII8 bit The lines are short, but there may be non-ASCIIcharacters (octets with the high-order bit set).

binary Not only may non-ASCII characters be present but thelines are not necessarily short enough for SMTP transport

quoted-printable

Encodes the data in such a way that if the data beingencoded are mostly ASCII text, the encoded form of thedata remains largely recognizable by humans.

Servidores de información 11Mario Muñoz Organero.

base64 Encodes data by mapping 6-bit blocks of input to 8-bitblocks of output, all of which are printable ASCIIcharacters.

x-token A named nonstandard encoding

Ejemplo MIMEMIME-Version: 1.0From: Nathaniel Borenstein <[email protected]>To: Ned Freed <ned@innosoft com>To: Ned Freed <[email protected]>Subject: A multipart exampleContent-Type: multipart/mixed;boundary=unique-boundary-1

This is the preamble area of a multipart message. Mail readers that understand multipart format should ignore this preamble.

If you are reading this text, you might want to consider changing to a mail reader that understands how to properly display multipart messages.

--unique-boundary-1

Servidores de información 12Mario Muñoz Organero.

...Some text appears here...

--unique-boundary-1Content-type: text/plain; charset=US-ASCII

This could have been part of the previous part, but illustrates explicit versus implicit typing of body parts.

7

Donde ampliar información

En la asignatura de RROO-2 y también:En la asignatura de RROO 2 y también:RFC 2045: MIME Part One: Format of Internet MessageBodiesRFC 2046: MIME Part Two: Media TypesRFC 2047: MIME Part Three: Message HeaderExtensions for Non-ASCII Text

Servidores de información 13Mario Muñoz Organero.

RFC 2048: MIME Part Four: Registration ProceduresRFC 2049: MIME Part Five: Conformance Criteria andExamples

Donde ampliar informaciónRFC 1524: The formal description of mailcap files. Mailcap files describe how tohandle media typeshandle media types.RFC 2015: MIME Security with Pretty Good Privacy (PGP).RFC 2110: MIME E-mail Encapsulation of Aggregate Documents, such as HTML(MHTML).RFC 2111: Content-ID and Message-ID Uniform Resource Locators.RFC 2112: The MIME Multipart/Related Content-type.RFC 2183: Defines the syntax and sematics of the "Content-Disposition" header toconvey presentational information.RFC 2231: MIME Parameter Value and Encoded Word Extensions: Character Sets,Languages, and ContinuationsRFC 2440: OpenPGP Message Format

Servidores de información 14Mario Muñoz Organero.

RFC 2440: OpenPGP Message FormatRFC 2633: S/MIME Version 3 Message SpecificationRFC 2821: Simple Mail Transfer ProtocolRFC 2822: Internet Message FormatRFC 3156: MIME Security with OpenPGP

8

XDR

External Data RepresentationExternal Data Representation

INTRODUCCIÓN

Usado por NFS y por NIS.p y pTambién lo veis en detalle en RROO-2Permite el intercambio de datos entre diferentes arquitecturas como:

Sun WorkStation.VAX.IBM-PCCray...

XDR tiene 2 partes:D fi l j l d i ió d d t

Servidores de información 16Mario Muñoz Organero.

Define un lenguaje para la descripción de datos.Define como transportar los tipos de datos por la red

XDR hace las siguientes suposiciones:Bytes portables entre arquitecturas (protocolo orientado a byte).Todo HW ha de codificar estructuras de varios bytes de forma que el resto deHW pueda decodificarlo de forma única y uniforme.

9

ESPECIFICACIÓN DE LA SINTAXIS DEL LENGUAJE

Se utiliza la notación BNF (Back-Naur Form) para la descripción del( ) p plenguaje de XDR:

Los caracteres '|', '(', ')', '[', ']', '"', y '*' son caracteres especiales.Expresiones o símbolos finales del lenguaje serán cadenas entre comillas dobles(ej: “double”).Expresiones o símbolos intermedios serán cadenas igualmente sin entrecomillar.Estos símbolos pueden estar ampliados.Símbolos alternativos se separan mediante '|’.Los elementos opcionales se notan entre corchetes.

Servidores de información 17Mario Muñoz Organero.

Los elementos se agrupan mediante paréntesis.Un '*' después de un elemento indica la presencia de 0 más apariciones de dichoelemento.

Ejemplo: Un lenguaje podría especificar la siguiente sintaxis:

ESPECIFICACIÓN DE LA SINTAXIS DEL LENGUAJE

j p g j p p g"a " "very" (", " "very")* [" cold " "and "] " rainy ” ("day" | "night")

A continuación enunciamos algunos ejemplos de expresiones escritas en elanterior lenguaje:

"a very rainy day""a very, very rainy day""a very cold and rainy day""a very, very, very cold and rainy night"

Servidores de información 18Mario Muñoz Organero.

10

También necesitamos algunas otras características complementarias:

ESPECIFICACIÓN DE LA SINTAXIS DEL LENGUAJE

Los comentarios se inician con el par /*Los comentarios acaban con el par */Los espacios sirven para separar ítems y carecen de otra interpretación.Los identificadores son cadenas alfanuméricas ( letras, números y ‘_’ ) que hande estar comenzados por letra.Los identificadores son case-sensitive.Una constante es una secuencia de uno o más dígitos decimales que puedenestar precedidos del signo ‘-’.

Servidores de información 19Mario Muñoz Organero.

type specifier:

ESPECIFICACIÓN DE LA SINTAXIS DEL LENGUAJE

declaration:type-specifier identifier

| type-specifier identifier "[" value "]"| type-specifier identifier "<" [ value ] ">"| "opaque" identifier "[" value "]"| "opaque" identifier "<" [ value ] ">"| "string" identifier "<" [ value ] ">"| type-specifier "*" identifier| "void"

type-specifier:[ "unsigned" ] "int"

| [ "unsigned" ] "hyper"| "float"| "double"| "quadruple"| "bool"| enum-type-spec| struct-type-spec| union-type-spec

Servidores de información 20Mario Muñoz Organero.

value:constant

| identifier

| u o ype spec| identifier

enum-type-spec:"enum" enum-body

11

i t

ESPECIFICACIÓN DE LA SINTAXIS DEL LENGUAJE

enum-body:"{"

( identifier "=" value )( "," identifier "=" value )*

"}"

struct-type-spec:"struct" struct-body

t t b d

union-type-spec:"union" union-body

union-body:"switch" "(" declaration ")" "{"

( "case" value ":" declaration ";" )( "case" value ":" declaration ";" )*[ "default" ":" declaration ";" ]

"}"

Servidores de información 21Mario Muñoz Organero.

struct-body:"{"

( declaration ";" )( declaration ";" )*

"}"

constant-def:"const" identifier "=" constant ";"

t d f

ESPECIFICACIÓN DE LA SINTAXIS DEL LENGUAJE

type-def:"typedef" declaration ";"

| "enum" identifier enum-body ";"| "struct" identifier struct-body ";"| "union" identifier union-body ";"

definition:type-def

| constant-def

Servidores de información 22Mario Muñoz Organero.

| constant def

specification:definition *

12

Se muestra a continuación un ejemplo de la definición del tipo file que puede ser usado para la transmisión de ficheros entre máquinas.

EJEMPLO.

ser usado para la transmisión de ficheros entre máquinas.

const MAXUSERNAME = 32; /* max length of a user name */const MAXFILELEN = 65535; /* max length of a file */const MAXNAMELEN = 255; /* max length of a file name */

/** Types of files:*/

Servidores de información 23Mario Muñoz Organero.

enum filekind {TEXT = 0, /* ascii data */DATA = 1, /* raw data */EXEC = 2 /* executable */

};

/* File information, per kind of file: */union filetype switch (filekind kind) {

EJEMPLO.

case TEXT:void; /* no extra information */

case DATA:string creator<MAXNAMELEN>; /* data creator */

case EXEC:string interpretor<MAXNAMELEN>; /* program interpretor */

};

/* A l t fil */

Servidores de información 24Mario Muñoz Organero.

/* A complete file:*/struct file {

string filename<MAXNAMELEN>; /* name of file */filetype type; /* info about file */string owner<MAXUSERNAME>; /* owner of file */opaque data<MAXFILELEN>; /* file data */

};

13

Se soportan los siguientes tipos:

TIPOS DE DATOS.

p g pIntegerUnsigned IntegerEnumerationBooleanHyper Integer and Unsigned Hyper IntegerFloating-pointDouble-precision Floating-pointQuadruple-precision Floating-pointFixed-length Opaque Data

Variable-length ArrayStructureDiscriminated UnionVoidConstantTypedefOptional-data

Servidores de información 25Mario Muñoz Organero.

g p qVariable-length Opaque DataStringFixed-length Array

Veamos alguno de ellos.

CODIFICACIÓN DE LOS TD.

La representación de todos los ítems requiere un múltiplo de 4 bytes (32bit ) d d tbits) de datos.Los bytes de numeran de 0 a n-1.Los bytes se inyectan a la red de forma que m siempre precede a m+1 y vainmediatamente detrás de m-1.Si los n bytes necesarios para contener los datos no son múltiplo de 4 serellenan con “ceros” hasta completar el múltiplo más cercano.

Usaremos una notación como la que aparece en el gráfico:

Servidores de información 26Mario Muñoz Organero.

Usaremos una notación como la que aparece en el gráfico:

+--------+--------+...+--------+--------+...+--------+| byte 0 | byte 1 |...|byte n-1| 0 |...| 0 |+--------+--------+...+--------+--------+...+--------+|<-----------n bytes---------->|<------r bytes------>||<-----------n+r (donde (n+r) mod 4 = 0)>------>|

14

Integer:

CODIFICACIÓN DE LOS TD.

gDato de 32 bits en el rango: [-2147483648,2147483647].Notación en complemento a 2.El byte más significativo es el 0 y el menos el 3.Los enteros se declaran como sigue:

int identificador;

(MSB) (LSB)

Servidores de información 27Mario Muñoz Organero.

( ) ( )+---------+---------+---------+---------+| byte 0 | byte 1 | byte 2 | byte 3 |+---------+---------+---------+---------+<----------------32 bits----------------->

Hyper Integer:

CODIFICACIÓN DE LOS TD.

Dato de 64 bitsExtensión del rango de los enteros.Los hyper enteros se declaran como sigue:

hyper identificador;

(MSB) (LSB)+--------+--------+--------+--------+--------+--------+--------+--------+

Servidores de información 28Mario Muñoz Organero.

+ + + + + + + + +| byte 0 | byte 1 | byte 2 | byte 3 | byte 4 | byte 5 | byte 6 | byte 7 |+--------+--------+--------+--------+--------+--------+--------+--------+<---------------------------------64 bits----------------------------------->

15

Reales en coma flotante de simple precisión:

CODIFICACIÓN DE LOS TD.

Dato de 32 bitsSe definen los siguiente tres campos en el número:

S: signo.E: exponente.M: mantisa.

El número real se puede expresar como:(-1)^S * 2^(E-127) * M

Los reales de coma flotante en simple prec. se declaran como sigue:float identificador;

Servidores de información 29Mario Muñoz Organero.

float identificador;

+---------+---------+---------+---------+| byte 0 | byte 1 | byte 2 | byte 3 | |S| E | M |+---------+---------+---------+---------+|1|<-- 8 -->|<----------23 bits-------->|

Array de longitud variable:

CODIFICACIÓN DE LOS TD.

Permiten codificar un número variable de datos homogéneos.Se transmite primero un unsigned integer con el número de elementos y acontinuación los elementos en cuestión.El número máximo de elementos a transmitir son (2**32) - 1.Los Arrays de longitud variable se declaran como sigue:

type-name identificador<m>;type-name identificador<>;

Servidores de información 30Mario Muñoz Organero.

0 1 2 3+--+--+--+--+--+--+--+--+--+--+--+--+...+--+--+--+--+| n | element 0 | element 1 |... | element n-1|+--+--+--+--+--+--+--+--+--+--+--+--+...+--+--+--+--+|<-4 bytes ->|<----------------n elements--------------->|

16

Uniones discriminadas:

CODIFICACIÓN DE LOS TD.

Constan de un discriminante seguido de un dato del tipo seleccionado por eldiscriminante.El discriminante puede ser de tipo entero, entero sin signo, enumeración obooleano.Las uniones discriminadas se declaran como sigue:

union switch (discriminant-declaration) {case discriminant-value-A:

arm-declaration-A;case discriminant-value-B:

Servidores de información 31Mario Muñoz Organero.

arm-declaration-B;...default: default-declaration;

} identifier;

Mensajes DNS

17

Intercambia registros de recursos

[Nombre dominio] [TTL] [Clase] Tipo Dato Registro(Valor)[Nombre_dominio] [TTL] [Clase] Tipo Dato_Registro(Valor)

Nombre_dominio: puede haber más de un registro por dominio, también conocidocomo recurso. Este campo a veces puede omitirse, tomando por defecto el últimonombre de domino indicado con anterioridad.TTL: tiempo de vida para almacenarse, indicando la estabilidad del registro.Información altamente estable tiene un valor grande (86400 seg. o un día), mientrasque la volátil recibe un valor pequeño (60 seg.).Clase : Actualmente sólo se utiliza IN, para información de Internet. Este campo si se

Servidores de información 33Mario Muñoz Organero.

omite, se toma el último valor indicado con anterioridadTipo: A, MX, NS, PTR…Dato_Registro(valor) es un número o texto ascii dependiendo del tipo de registro.

Formato de los mensajes

Dominio (A, MX, NS...)(IN…)

Servidores de información 34Mario Muñoz Organero.

18

Panorámica introductoria a XML

Agradecimiento a Ricardo Eíto BrunAgradecimiento a Ricardo Eíto Brunpor su material.

Material de referencia

La biblia de XML segunda ediciónLa biblia de XML segunda ediciónCapítulos on-line:

http://www.cafeconleche.org/books/bible2/chapters/

Código fuente on-line:http://www cafeconleche org/books/bihttp://www.cafeconleche.org/books/bible2/source/

19

XML: Idea

XML:XML:Representación de datos “etiquetados” (las etiquetasdan estructura a los datos) sin preocuparnos de lavisualización de los mismos y codificadosnormalmente en forma de texto.

Igual que hemos visto para otros formatos de

Servidores de información 37Mario Muñoz Organero.

representación de datos tiene 2 partes:Definición de tipo de documentoInstancias de documentos XML según un tipo

Tipo e instancia de documento<!ELEMENT autor ( #PCDATA ) >

<!ELEMENT libro ( titulo | disponible | autor | <?xml version="1.0"?>

<libro>b o ( u o | d spo b e | au o |formato | publicacion | precio | descuento | enlacelibro )* ><!ELEMENT descuento EMPTY ><!ATTLIST descuento cantidad CDATA #REQUIRED ><!ELEMENT disponible EMPTY ><!ATTLIST disponible tiempo CDATA #REQUIRED ><!ATTLIST disponible unidad CDATA #REQUIRED ><!ELEMENT enlacelibro EMPTY ><!ATTLIST enlacelibro href CDATA #REQUIRED ><!ELEMENT formato ( #PCDATA ) ><!ELEMENT precio EMPTY ><!ATTLIST precio cantidad CDATA #REQUIRED ><!ATTLIST i d CDATA #REQUIRED >

<libro><titulo> Cien años de soledad </titulo><disponible tiempo="24" unidad="horas"/><autor> Gabriel García Márquez </autor><formato> Rústica </formato><publicacion>1967 </publicacion><precio cantidad="9.99" moneda="euro"/><descuento cantidad="5"/><enlacelibro href="/exec/ISBN/84-473-0619 4"/

Servidores de información 38Mario Muñoz Organero.

<!ATTLIST precio moneda CDATA #REQUIRED ><!ELEMENT publicacion ( #PCDATA ) ><!ELEMENT titulo ( #PCDATA ) >

0619-4"/></libro>

20

Historia

1969 - SGML1969 - SGML1993 - HTML1998 - XML

Servidores de información 39Mario Muñoz Organero.

Historia

Su desarrollo comienza en septiembre de 1996 dirigidoSu desarrollo comienza en septiembre de 1996 dirigidopor el W3C y con la participación de importantesempresas:

Microsoft, IBM, Sun, Novell, ArborText, H-P etc.

El propósito es:diseñar un lenguaje de marcas optimizado para el WWWunir la simplicidad de HTML con la capacidad expresiva de

Servidores de información 40Mario Muñoz Organero.

unir la simplicidad de HTML con la capacidad expresiva deSGML

Versión 1.0 ratificada en diciembre de 1997

21

XML: Aplicación

Áreas de aplicación:Áreas de aplicación:Representación y distribución de documentos e

información textualIntercambio de datos e información estructurada através de Internet y el WWWIntegración de datos procedentes de fuentes

Servidores de información 41Mario Muñoz Organero.

heterogéneasElimina la ‘barrera’ entre informaciónestructurada e información textual

XML: Aplicación

XML - ÁplicacionesXML ÁplicacionesRDF - Resource Description FrameWork

Catalogación de recursos InternetCDF - Channel Description Format

Envío de información a través de pushOSD - Open Software Description

Descripción de packs de actualización de software

Servidores de información 42Mario Muñoz Organero.

p pOFX - Open Financial Exchange

Intercambio de datos financieros para aplicacionescontabilidad doméstica

22

XML: Aplicación

XML - ÁplicacionesXML ÁplicacionesXER - XML Encoding Rules

Codificar mensajes ASN.1 para Z39.50, ILL, etc.MARTIF - Machine Readable Terminology Interchange Format

Codificar registros terminológicosTMX - Translation Memory eXchange

Codificar memorias de traducción

Servidores de información 43Mario Muñoz Organero.

DOCBOOKDTD para manuales y guías técnicas documentación de software

El lenguaje XML

23

Índice

Características de un documento XMLCaracterísticas de un documento XMLDescripción de tipos de documentos:

DTDsXML Schemas

Transformación de documentos:XSLT

Servidores de información 45Mario Muñoz Organero.

Características de un documento XMLXML persigue los siguientes objetivos:XML persigue los siguientes objetivos:

Distinguir el contenido y la estructura de losdocumentos de su presentación en papel o enpantallaHacer explícita su estructura y sus contenidosinformativos

Servidores de información 46Mario Muñoz Organero.

Crear documentos portables, que puedanintercambiarse y procesarse con facilidad ensistemas informáticos heterogéneos.

24

Características de un documento XMLXML propone:XML propone:

un formato de documentos en texto plano (evitandolas complejidades de los documentos binarios),En el que se intercalan marcas con el objetivo dedistinguir las distintas partes o elementosestructurales que conforman cada tipo de documento.Las marcas que se intercalan en un documento XML

Servidores de información 47Mario Muñoz Organero.

qno contienen ninguna instrucción a partir de la cual sepueda deducir cómo imprimir o mostrar en pantalla eldocumento

XML: marcado generalizado o descriptivolas marcas se pueden diferenciar fácilmente del texto: todas laspmarcas se escriben precedidas del carácter < (menor que), yseguidas del carácter > (mayor que).

<?xml version="1.0" encoding="ISO-8859-1" ?><note><to>Tove</to><from>Jani</from>

Servidores de información 48Mario Muñoz Organero.

<heading>Reminder</heading><body>Don't forget me this weekend!</body></note>

25

XML: Conjunto de marcas abiertasXML ofrece la posibilidad de definir conjuntos de marcasXML ofrece la posibilidad de definir conjuntos de marcaspara identificar los elementos estructurales y elcontenido informativo de los documentosEsto permite modelar la información librementeatendiendo a las necesidades que exige cada problemaEn este contexto surge la necesidad de:

Establecer acuerdos a priori sobre el conjunto de marcas a

Servidores de información 49Mario Muñoz Organero.

Establecer acuerdos a priori sobre el conjunto de marcas autilizar,Establecer equivalencias que faciliten el intercambio dedocumentos

Definición de tipos de documentos en XMLLa definición de las marcas o elementos que seLa definición de las marcas o elementos que sepueden utilizar, sus reglas estructurales y susatributos puede hacerse según dosposibilidades:

DTDsXML schemas

Servidores de información 50Mario Muñoz Organero.

XML Schema presenta ventajas

26

DTDs

Document Type DefinitionsDocument Type Definitions

¿Qué son?

Definen la estructura válida para un tipo de documentosDefinen la estructura válida para un tipo de documentosXML

Distinguir entretipo de documentoInstancia de documento

Otras opciones para definir la estructura de documentosXML:XML:

XML SchemaRELAX NGISO DSDL …

27

Estructura definida en DTDs

Definición de elementos atributosDefinición de elementos, atributos.Orden y número de hijos.Contenidos de los elementos.Tipos de datos para elementos y atributos.Valores obligatorios, opcionales y por omisión.

Ejemplo - DTD

<!ELEMENT pelicula (director titulo actores*<!ELEMENT pelicula (director, titulo, actores ,anyo)>

<!ELEMENT director (#PCDATA)><!ELEMENT titulo (#PCDATA)><!ELEMENT actores (actor+)><!ELEMENT actor (#PCDATA)><!ELEMENT anyo (#PCDATA)>

28

Ejemplo instancia documento XML válido

<?xml version=”1 0”?><?xml version= 1.0 ?><!DOCTYPE pelicula SYSTEM …><pelicula><director>Fernando Colomo</director><titulo>Bajarse al moro</titulo><anyo>1987</anyo></pelicula>

Declaración de tipo de documento

Identifica la DTD (Document Type Definition) delIdentifica la DTD (Document Type Definition) deldocumentoPuede haber una parte interna y/o externa.DTD interna:• <!DOCTYPE nombre_elemento_raíz [...]>• En los corchetes hay declaraciones de DTD

56

29

DTDs internas - Ejemplo<?xml version=”1.0”?>

!DOCTYPE li l [<!DOCTYPE pelicula [<!ELEMENT pelicula (director, titulo, actores*,

anyo)><!ELEMENT director (#PCDATA)><!ELEMENT titulo (#PCDATA)><!ELEMENT actores (actor+)><!ELEMENT actor (#PCDATA)><!ELEMENT anyo (#PCDATA)>

]><pelicula>

57Mario Muñoz Organero.

<pelicula><director>Fernando Colomo</director><titulo>Bajarse al moro</titulo><anyo>1987</anyo></pelicula>

DTD externa

La declaración de tipo de documento puede asociar unLa declaración de tipo de documento puede asociar undocumento con una DTD que se ha escrito en unarchivo diferente: DTD externa.Las DTD externas se pueden incluir de dos formasdistintas en la declaración de tipo de documento,dependiendo de si:

la DTD es una DTD privada (disponible en un archivo localla DTD es una DTD privada (disponible en un archivo localo remoto),o una DTD ‘publica’.

30

DTD externa

DTD externa:DTD externa:• <!DOCTYPE nombre_elemento_raíz SYSTEM

“identificador_sistema”• <!DOCTYPE nombre_elemento_raíz PUBLIC

”identificador_público” “identificador_sistema”Los identificadores son URI (Uniform ResourceIdentifiers)

59

DTDs externas privadas

<!DOCTYPE nombre SYSTEM “c:\dtds\docbook dtd”><!DOCTYPE nombre SYSTEM c:\dtds\docbook.dtd >El archivo que contiene la DTD suele tener:

la extensión dtd ycomo nombre el nombre del tipo de documento (que a suvez coincidirá con el del elemento documento o raíz). Sinembargo, esto no es obligatorio y el archivo con la DTDpodría tener un nombre

60Mario Muñoz Organero.

podría tener un nombre

31

DTDs externas privadas

<?xml version="1.0"?><!DOCTYPE pelicula SYSTEM"c:\xml\dtds\pelicula.dtd"><pelicula><director>Fernando Colomo</director><titulo>Bajarse al moro</titulo><actores><actor>Juan Echanove</actor><actor>Aitana Sanchez Gijon</actor>

Servidores de información 61Mario Muñoz Organero.

<actor>Aitana Sanchez-Gijon</actor></actores><anyo>1987</anyo></pelicula>

DTDs externas públicas

El concepto de DTD pública se utiliza con DTDs ampliamente difundidas ytili d di ti t id d d iutilizadas por distintas comunidades de usuarios.

Podemos decir que se trata de DTDs de “dominio público”En la declaración de un tipo de documento se puede indicar que el tipo dedocumento se define a partir de una DTD pública. Escribiendo la palabraPUBLIC tras el nombre del tipo de documentoA continuación de PUBLIC se escribe un identificador para la DTD.El identificador único tiene la siguiente forma:

<!DOCTYPE nombre_elemento_raíz PUBLIC ”identificador_público”“identificador sistema”

Servidores de información 62Mario Muñoz Organero.

identificador_sistema<!DOCTYPE docbook PUBLIC “-//oasis//DTD articles to publish//EN”>

32

DTDs “mixtas”

XML nos ofrece la posibilidad de distribuir las declaraciones de lapDTD en la declaración de tipo de documento y en un archivoexterno. De esta forma la DTD se encuentra en dos archivos físicosdiferentes.Se utiliza el término subconjunto interno de la DTD para llamar a lasdeclaraciones que se incluyen dentro de la declaración de tipo dedocumento.El término subconjunto externo de la DTD se refiere a lasdeclaraciones que se incluyen en un archivo independiente en el

Servidores de información 63Mario Muñoz Organero.

q y pque sólo se incluyen declaraciones de la DTD.

DTDs mixtas<?xml version="1.0"?><!DOCTYPE pelicula SYSTEM<!DOCTYPE pelicula SYSTEM

“http://www.server.com/dtds/pelicula.dtd” [<!ENTITY cartel SYSTEM “c:\img\bmoro.gif”><!ENTITY aitana-sanchez SYSTEM

“c:\img\aitana.gif”>]>

<pelicula><director>Fernando Colomo</director><titulo>Bajarse al moro</titulo><reparto>

<actor>Juan Echanove</actor>

Servidores de información 64Mario Muñoz Organero.

<actor>Aitana Sanchez-Gijon</actor></reparto><anyo>1987</anyo>

</pelicula>

33

Ejemplo de DTD<!ELEMENT Libro

(Titulo, Catalogo:Seccion, Catalogo:SubSeccion,Contenido, Compra, Copyright)><!ATTLIST Libro

xmlns CDATA #REQUIREDQxmlns:Catalogo CDATA #REQUIRED

><!ELEMENT Titulo (#PCDATA)><!ELEMENT Catalogo:Seccion (#PCDATA)><!ELEMENT Catalogo:SubSeccion (#PCDATA)><!ELEMENT Contenido ((Capitulo+)|(Capitulo+, Separacion?)+)><!ELEMENT Capitulo (Tema, Seccion+)><!ATTLIST Capitulo

materia (XML|Java) "Java"><!ELEMENT Tema (#PCDATA)><!ELEMENT Tema (#PCDATA)><!ELEMENT Seccion (#PCDATA)><!ATTLIST Seccion

apartados CDATA #REQUIREDdificil (si|no) "no"

><!ELEMENT Separacion EMPTY><!ELEMENT Compra (#PCDATA)><!ELEMENT Copyright (#PCDATA)><!ENTITY OReillyCopyright SYSTEM "copyright.txt"> 65

El contenido de las DTDs

ElementosElementosAtributosEntidadesNotaciones

34

Declaraciones de la DTD

Definidas en EBNFDefinidas en EBNFELEMENT: Tipo de los elementosATTLIST: Atributos que puede tener un elemento yvalores permitidosENTITY: Contenido reutilizableNOTATION: Contenido externo no procesable (datosbinarios)binarios)

Con las dos primeras se define la estructura

67

Declaración de elementos

<!ELEMENT nombre modelo contenido><!ELEMENT nombre modelo_contenido>Modelo de contenido:• EMPTY: Sólo admite atributos• ANY: Cualquier cosa. A evitar• Texto: (#PCDATA)• Elementos hijos• mezcla: Texto y contenido

<!ELEMENT e (#PCDATA | elemento1 | elemento2 | ...)*>

68

35

Ejemplo 1

<?xml version="1 0"?><?xml version 1.0 ?><!DOCTYPE BOOK [

<!ELEMENT BOOK (P*)><!ELEMENT P (#PCDATA)>

]><BOOK><BOOK>

<P>chapter 1 - Intro</P> <P>chapter 2 -Conclusion</P> <P>Index</P>

</BOOK>

Ejemplo 2

<!ELEMENT CestaFrutas (fresa? manzana+<!ELEMENT CestaFrutas (fresa?, manzana+,(limon | naranja)*)>

<CestaFrutas><manzana> … </manzana><manzana> </manzana><manzana> … </manzana><limon> … </limon><naranja> … </naranja><limon> … </limon>

</CestaFrutas> 70

36

Modelo de contenido

Estructuras compuestas de nombres yEstructuras compuestas de nombres yoperadores:• (): para agrupar subestructuras• , : secuencia (importa el orden)• | : selección• ?: opcional

* 0 ó á• *: 0 ó más• +: 1 ó más• nada: una vez y sólo una

71

Secuencias

<!ELEMENT Name (Last Name First Name)<!ELEMENT Name (Last_Name, First_Name)

<Name> <Last_Name>Punin</Last_Name><First_Name>John</First_Name>

</Name>

37

Choices

<!ELEMENT ITEM (PRODUCT, NUMBER, (PRICE |( , , ( |CHARGEACCT | SAMPLE))>

<ITEM> <PRODUCT>Tomatoes</PRODUCT><NUMBER>8</NUMBER> <PRICE>$1.25</PRICE>

</ITEM><ITEM> <PRODUCT>Oranges</PRODUCT>

<NUMBER>24</NUMBER><SAMPLE>$4.98</SAMPLE>

</ITEM>

Contenido mixto

<!ELEMENT PRODUCT (#PCDATA |<!ELEMENT PRODUCT (#PCDATA |PRODUCT_ID)*>

<PRODUCT>Tomatoes</PRODUCT><PRODUCT>

<PRODUCT_ID>124829548702121</PRODUCT ID>T_ID>

</PRODUCT>

38

Contenido mixto

<!ELEMENT p (#PCDATA | b)*><!ELEMENT p (#PCDATA | b) ><!ELEMENT b (#PCDATA)>

<p>This is <b>bold</b> text</p>

Elementos vacíos

<!ELEMENT CREDIT WARNING EMPTY><!ELEMENT CREDIT_WARNING EMPTY>

<CREDIT_WARNING></CREDIT_WARNING>o<CREDIT_WARNING/>

39

Declaración de atributos

<!ATTLIST elemento atributo tipo porOmisión>p pAtributo del elemento. Se pueden encadenar los atributos.Se pueden utilizar varias declaraciones para un elemento.

<!ELEMENT greeting (#PCDATA)><!ATTLIST greeting language CDATA "English">

<greeting language="Spanish"> ¡Hola! </greeting>greeting language Spanish ¡Hola! /greeting

77

Tipo de los atributos

CDATA: Cadena de caracteresID: Nombre único en el documento (máximo 1 por elemento)IDREF: El ID de otro elementoIDREFS: Serie de IDREFENTITY: Entidad externa predeclaradaENTITIES: Serie de ENTITYNMTOKEN: Un nombre válido en xml (puede empezar por número)NMTOKENS: Serie de NMTOKENNMTOKENS: Serie de NMTOKENNOTATION: Notación predeclaradaValores enumerados: (valor1 | valor2 | ...)xml: Atributo predefinido para xml

78

40

CDATA - Character Data

<!ELEMENT Rectangle EMPTY><!ELEMENT Rectangle EMPTY><!ATTLIST Rectangle

length CDATA "0px"width CDATA "0px">

<Rectangle width="80px" length="40px"/>

Enumerados

<!ELEMENT TITLE (#PCDATA)><!ELEMENT TITLE (#PCDATA)><!ATTLIST TITLE ALIGN (LEFT | CENTER | RIGHT)

"LEFT">

<TITLE>Programming XML in Java</TITLE>

<TITLE ALIGN="CENTER">Programming XML inJava</TITLE>

41

NMTOKEN

Los caracteres válidos para un NMTOKEN son: letraLos caracteres válidos para un NMTOKEN son: letra,digito, '.', '-', '_', o ':'

<!ELEMENT student_name (#PCDATA)><!ATTLIST student_name student_no NMTOKEN

#REQUIRED>

<student_name student_no="9216735">JoSmith</student_name>

ID

El valor del atributo debe ser único entre los de tipo IDEl valor del atributo debe ser único entre los de tipo ID

<!ELEMENT student_name (#PCDATA)><!ATTLIST student_name student_id ID #REQUIRED>

<student_name student_id="S9216735">Jo_ _Smith</student_name>

42

IDREF

<?xml version="1.0" standalone="yes"?><!DOCTYPE lab_group [

<!ELEMENT lab_group (student_name)*><!ELEMENT student_name (#PCDATA)><!ATTLIST student_name

student_id ID #REQUIREDtutor IDREF #IMPLIED> ]>

<lab_group><student_name student_id="S8904885">Alex Foo</student_name><student name student id="S9011133">Sarah Bar</student name><student_name student_id= S9011133 >Sarah Bar</student_name><student_name student_id="S9216735" tutor="S8904885">JoSmith</student_name>

</lab_group>

Atributos predefinidos

Siguen teniendo que ser declarados en los DTDsg q… pero su uso está “estandarizado”

xml:space indica que los espacios en blanco deberíanser preservados por las aplicaciones.

<!ATTLIST poema xml:space (default|preserve) ‘preserve’ >xml:lang especifica el lenguaje en el que están escritos

los contenidos y los valores de atributos.En ISO639Code | IanaCode | UserCode

l l " " H l b /<p xml:lang="es">Hola, una prueba</p>

43

Campo porOmisión

4 posibilidades4 posibilidades• valor: Por omisión• #FIXED valor: Sólo ese valor (constante)• #REQUIRED: atributo obligatorio• #IMPLIED: atributo opcional

85

#REQUIRED

<!ELEMENT img EMPTY><!ELEMENT img EMPTY><!ATTLIST img

alt CDATA #REQUIREDsrc CDATA #REQUIRED>

<img src="xmlj.jpg" alt="XMLJ Image"/>

44

#IMPLIED

<!ELEMENT img EMPTY><!ELEMENT img EMPTY><!ATTLIST img

alt CDATA #REQUIREDsrc CDATA #REQUIREDwidth CDATA #IMPLIEDheight CDATA #IMPLIED>g

<img src="xmlj.jpg" alt="XMLJ Image" width="300"/>

#FIXED

<!ELEMENT ADDRESS (#PCDATA)><!ELEMENT ADDRESS (#PCDATA)><!ATTLIST ADDRESS country CDATA #FIXED

"USA">

<ADDRESS country="USA">123 15th St. Troy NY12180</ADDRESS>12180</ADDRESS>

45

Propósitos de las entidades

Sirven para:Sirven para:Definir variables cuyo valor puede ser usado en

DTDs o instancias de documentos XMLInsertar contenido (parseable o no) en DTDs oinstancias de documentos XML modularidad dedocumentosInsertar caracteres reservados dentro de elementos“parseables”

Tipos de entidades

Entidades generales:Entidades generales:internasexternas

Entidades de parámetroInternasExternasExternas

Entidades no parseables

46

Entidades generales internas

Se declaran:<!ENTITY name "entity_value">

Se usan en instancias:&name;

Ej:<?xml version="1.0" standalone="yes" ?><!DOCTYPE author [<!ELEMENT author (#PCDATA)><!ELEMENT author (#PCDATA)><!ENTITY mm “Mario Munoz">]><author>&mm;</author>

Entidades generales externas

Dos posibilidades:Dos posibilidades:<!ENTITY name SYSTEM "URI"><!ENTITY name PUBLIC "public_ID" "URI">

Donde:URI: normalmente es la URL donde poder encontrar elcontenido a insertar.public ID: identificador “universalmente conocido” Si elpublic_ID: identificador “universalmente conocido”. Si elprocesador XML no lo conoce se usa la URI.

47

Ejemplo 1

<?xml version="1 0" standalone="no" ?><?xml version 1.0 standalone no ?><!DOCTYPE copyright [<!ELEMENT copyright (#PCDATA)><!ENTITY c SYSTEM

"http://www.xmlwriter.net/copyright.xml">]>]<copyright>&c;</copyright>

Ejemplo 2

<?xml version="1 0" standalone="no" ?><?xml version 1.0 standalone no ?><!DOCTYPE copyright [<!ELEMENT copyright (#PCDATA)><!ENTITY c PUBLIC "-//W3C//TEXT copyright//EN"

"http://www.w3.org/xmlspec/copyright.xml">]><copyright>&c;</copyright>

48

Entidades generales predefinidas

Un pequeño acercamiento a la internacionalización

En la declaración XML:<?xml version="1.0" encoding="UTF-8"?>

UTF-8 es la codificación por defectoCodifica con un byte los 128 caracteres US-ASCII (RangoUnicode 0000 a 007F).Dos bytes para codificar caracteres latinos con diacríticos,griegos, cirílicos, armenios, hebreos, arábicos y sirios (RangoUnicode 0080 a 07FF).3 b t l t d t l l 0 d l3 bytes para el resto de caracteres en el plano 0 o de lenguasbásicas en Unicode4 bytes para el resto de planos Unicode.

49

Entidades parámetro internas

Sintaxis:Sintaxis:<!ENTITY % name "entity_value">

Uso dentro del propio DTD:%Name;

Ej:<!ENTITY % info "(id,surname,firstname)"><!ELEMENT lab_group_A %info;><!ELEMENT lab_group_B %info;><!ELEMENT lab_group_C %info;>

Entidades parámetro externas

Modularidad de DTDsModularidad de DTDsDos tipos:

<!ENTITY % name SYSTEM "URI">%name;

<!ENTITY % name PUBLIC "public_ID" "URI">%name;

50

Ejemplo

<?xml version="1 0" standalone="no"?><?xml version= 1.0 standalone= no ?><!DOCTYPE student [<!ENTITY % student SYSTEM

"http://www.university.com/student.dtd">%student;]>

Entidades para contenido no “parseable”Necesitamos apoyarnos en las notaciones:Necesitamos apoyarnos en las notaciones:<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg><!NOTATION jpg SYSTEM "image/jpeg">

51

Declaración de notaciones

Para tratar entidades no analizadas por el parserPara tratar entidades no analizadas por el parser(binarios o caracteres arbitrarios).Pueden declararse como SYSTEM ó PUBLIC<!NOTATION nombre-notacion SYSTEM identificador><!ENTITY nombre SYSTEM URL NDATA nombre-notacion>Ejemplo:j p• <!NOTATION jpg SYSTEM “jpgviewer.exe”>• <!ENTITY foto SYSTEM “foto.jpg” NDATA jpg>

El parser no hace nada, sólo pasa los valores a laaplicación.

101

Ejemplo más completo

Veamos como usar modularidad en DTDs yVeamos como usar modularidad en DTDs ydocumentos XML con un ejemplo que combinalos ficheros:

longtext.xmldtd_chunk.dtdsample.dtdpsample.xml

52

longtext.xml

<definition><definition>Esta es una cadena larga de escribir</definition>

dtd_chunk.dtd

<!ELEMENT desc EMPTY ><!ELEMENT desc EMPTY ><!ATTLIST desc text CDATA “Ejemplo”>

53

sample.dtd<!ELEMENT document (heading, definition, file_info)>

!ELEMENT h di (#PCDATA)<!ELEMENT heading (#PCDATA)><!ELEMENT definition (#PCDATA)><!ELEMENT file_info (icon, desc)><!ATTLIST file_info name CDATA #REQUIRED><!ENTITY xml "eXtensible Markup Language"><!ENTITY longtext SYSTEM "longtext.xml"><!ENTITY % icon_types "(i1 | i2)"><!ENTITY % dtd_chunk SYSTEM "dtd_chunk.dtd">%dtd_chunk;<!ENTITY file pic SYSTEM "file jpg" NDATA jpg><!ENTITY file_pic SYSTEM file.jpg NDATA jpg><!NOTATION jpg SYSTEM "image/jpeg"><!ELEMENT icon EMPTY><!ATTLIST icon source ENTITY #REQUIRED><!ATTLIST icon type %icon_types; "i1">

sample.xml

<?xml version="1.0" encoding="UTF-8" ?>g<!DOCTYPE document SYSTEM "sample.dtd"><document><heading>Acerca de los ficheros en &xml;</heading>&longtext;<file info name="ficheros XML">file_info name ficheros XML

<icon source="file_pic" type="i2"/><desc text="blah blah"/>

</file_info></document>

54

XML Schema

Mario Muñoz Organero. Servidores de información 107

XML Schemas

Son una sintáxis alternativa para las DTDsSon una sintáxis alternativa para las DTDs,propuesta inicialmente por Microsoft, ArborText,Inso, etc.Utilizan la sintáxis propia de XMLVentajas:

Fáciles de aprender (se usa también XML)

Servidores de información 108Mario Muñoz Organero.

Fáciles de aprender (se usa también XML)Soportan tipos de datos: numéricos, fechas…Procesables igual que los documentos XML

55

XML Schemas

No es necesario que miréis más detalles de losNo es necesario que miréis más detalles de loscomentados en clase pero por si alguno sentísla curiosidad podéis mirar:

http://www.w3.org/TR/xmlschema-0/http://www.w3.org/TR/xmlschema-1/http://www.w3.org/TR/xmlschema-2/

Servidores de información 109Mario Muñoz Organero.

p g

Qué encontramos en un esquemaXMLUn esquema XML define la estructura válida para un tipoUn esquema XML define la estructura válida para un tipode documento XML (al igual que las DTD), es decir:

Los elementos que pueden aparecer en el documentoLos atributos que pueden utilizarse junto a cada elementoCómo se pueden anidar los elementos (padres e hijos)El orden en el que deben aparecer los elementos hijos de unmismo padreEl número permitido de elementos hijos

Servidores de información 110Mario Muñoz Organero.

El número permitido de elementos hijosSi un elemento puede ser vacío o noTipos de datos para elementos y atributosValores por defecto y fijos para elementos y atributos

56

Ventajas de XML Schemas

Mayor precisión en la definición de tipos de datosMayor precisión en la definición de tipos de datosPor ejemplo: Facilidades de extensión y restricción de tipos

Por ejemplo, la fecha:<date type="date">1999-03-11</date>¿es el 11 de marzo o el 3 de noviembre?

Los esquemas se definen como documentos XML, en undocumento aparte con extensión XSD

Servidores de información 111Mario Muñoz Organero.

documento aparte con extensión .XSDEn los documentos XML que se basen en ese esquema,incluiremos una referencia al archivo .XSD

Asociar esquemas adocumentos XML

<?xml version="1.0"?><note xmlns="http://www.us.com"

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

http://www.us.com/schema/note.xsd"><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>

Servidores de información 112Mario Muñoz Organero.

bodyDon't forget me this weekend!

</body></note>

57

Namespaces

Resuelven los problemas que puede surgir cuando enp q p gun documento XML se combinan elementosprocedentes de esquemas diferentes, y/o los esquemascontienen elementos o atributos con idéntico nombre.La recomendación fue aprobada por el World Wide WebConsortium

W3C - el catorce de enero de 1999.un namespace es el conjunto de identificadores del t t ib t tili i

Servidores de información 113Mario Muñoz Organero.

elementos y atributos que se utilizan en un mismoesquema.En un documento que combine dos o más esquemas, seutilizarán tantos namespaces como esquemas

Namespaces

Para utilizar los namespaces en un documento es necesariopdeclararlos.Los namespaces se declaran en la marca de inicio del elementoraíz del documento.La declaración consiste en las letras xmlns: seguidas de unidentificador para el namespace.El identificador del namespace será uno o más caracteres fáciles derecordar.A continuación se indica un URI único para el namespace

Servidores de información 114Mario Muñoz Organero.

A continuación se indica un URI único para el namespace.<v:vuelo-aereo xmlns:v =“http://www.myserver.com/schemes/vuelo”xmlns:people =“http://www.myserver.com/schemes/people”></v:vuelo-aereo>

58

Ejemplo: Namespaces

<a:book xmlns:a =“http://www.myserver.com/schemes/book”xmlns:b =“http://www.myserver.com/schemes/author”>

<a:title>Programación en C++</a:title><a:subtitle>Guía avanzada</a:subtitle><a:autor>

<b:nombre>Juan</b:nombre>

Servidores de información 115Mario Muñoz Organero.

<b:apellidos>De Frutos</b:apellidos></a:autor>

</a:book>

Ejemplo de Schema

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/ XMLSchema”>

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

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

</xsd:sequence>

Servidores de información 116Mario Muñoz Organero.

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

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

59

Instancia de doc XML valido según el Schema anterior

<?xml version="1.0"?><note xmlns="http://www.us.com"

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

http://www.us.com/schema/note.xsd"><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>

Servidores de información 117Mario Muñoz Organero.

bodyDon't forget me this weekend!

</body></note>

Componentes en un XML SchemaSimple type definitionsComplex type definitionsElement declarationsAttribute Group definitionsIdentity constraint definitionsModel Group definitionsNotation declarationsAnnotationsAttribute declarations

Servidores de información 118Mario Muñoz Organero.

Attribute declarationsModel groupsParticlesWildcards

60

Esquemas XML – elemento schemaLos elementos utilizados en la creación de unLos elementos utilizados en la creación de unesquema “proceden” del espacio de nombres:

http://www.w3.org/2001/ XMLSchemaEl elemento schema es el elemento raíz deldocumento en el que se define el esquema:

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

Servidores de información 119Mario Muñoz Organero.

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

Esquemas XML – Contenido

declaraciones – las cosas a usar en las instancias dedeclaraciones las cosas a usar en las instancias dedocumentos XML.

declaraciones de elementosdeclaraciones de atributos

definiciones – las cosas que se usan dentro del schemacomo por ejemplo

definiciones de tipos de datos simples

Servidores de información 120Mario Muñoz Organero.

definiciones de tipos de datos simplesdefiniciones de tipos de datos complejosdefiniciones de grupos de atributos

61

Esquemas XML – elementos y tiposTodos los elementos definidos en un XMLTodos los elementos definidos en un XMLSchema tienen un tipo asociado.Los tipos pueden ser:

SimplesComplejos

Un schema contendrá (o podrá contener)

Servidores de información 121Mario Muñoz Organero.

Un schema contendrá (o podrá contener)definiciones de tipos y de elementos que usendichos tipos.

Esquemas XML – elementos “simples”Un elemento simple es un elemento que sólo puedeUn elemento simple es un elemento que sólo puedecontener texto (cualquier tipo de dato), pero no a otroselementos ni atributosPara definir un elemento simple, utilizamos la sintáxis:

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

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

Servidores de información 122Mario Muñoz Organero.

<xsd:element name= apellido type= xsd:string /><xsd:element name=“edad" type="xsd:integer"/><xsd:element name=“fecNac" type="xsd:date"/>

62

Esquemas XML – elementos “simples”, tipos de datosLos tipos de datos más utilizados son:p

xsd:stringxsd:decimalxsd:integerxsd:booleanxsd:datexsd:time

Un elemento simple puede tener un valor por defecto yl “fij ”

Servidores de información 123Mario Muñoz Organero.

un valor “fijo”Esto se indica mediante los atributos default y fixed

<xsd:element name="color" type="xsd:string" default="red"/>

Esquemas XML – atributos

Los atributos se deben declarar de forma similar a los “elementossimples”Si un elemento puede ir acompañado de atributos, el elemento sedeberá declarar como un elemento “complejo”Un atributo se declara de la siguiente forma:

<xsd:attribute name="xxx" type="yyy"/>Ejemplo:

<xsd:attribute name=“idioma" type="xs:string"/>L t ib t ti ti d d t

Servidores de información 124Mario Muñoz Organero.

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

63

Esquemas XML – atributos

Los atributos pueden tener valores por defecto y valoresLos atributos pueden tener valores por defecto y valoresfijos:

<xsd:attribute name=“idioma" type="xsd:string“ default=“ES"/>Por defecto, los atributos son opcionales.Para indicar que un atributo debe ser obligatorio, sedebe añadir a su declaración en el esquema es atributo“use”

Servidores de información 125Mario Muñoz Organero.

<xsd:attribute name="lang" type="xsd:string" use="required"/>El atributo use puede tomar el valor “optional” si elatributo no es obligatorio (opción por defecto)

Tipos derivados

Se pueden crear tipos nuevos derivando deSe pueden crear tipos nuevos derivando deotros tipos de varias formas:

mediante extension: añadir elementos a un tipo(complejo) existentemediante restriction: restringiendo al tipo padremediante los rangos de valores o número de

i i

Servidores de información 126Mario Muñoz Organero.

apariciones.mediante reproduction – copia de tipo padre

64

Restringiendo tipos simples

Se pueden crear elementos a partir de los tipos simples,p p p p ,imponiéndoles restricciones.<xsd:element name="age">

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

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

</ d t i ti >

Definición de tipo anónima

Servidores de información 127Mario Muñoz Organero.

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

</xsd:element>

Elementos para restricciones

Servidores de información 128Mario Muñoz Organero.

65

Ejemplo restricciones

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

<xsd:restriction base="xsd:integer"><xsd:minInclusive value="0"/><xsd:maxInclusive value="100"/>

</xsd:restriction>

Servidores de información 129Mario Muñoz Organero.

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

</xsd:element>

Ejemplo restricciones

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

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

</xsd:restriction>

Servidores de información 130Mario Muñoz Organero.

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

66

Elementos complejos

Son elementos que contienen a otros elementosSon elementos que contienen a otros elementoshijos, o que tienen atributosSe suelen dividir en 4 tipos:

Elementos vacíosElementos no vacíos con atributosElementos con elementos hijos

Servidores de información 131Mario Muñoz Organero.

Elementos con elementos hijosElementos con elementos hijos y con “texto” o valorpropio (como el contenido mixto de las DTD)

Elementos vacíos

Solo pueden contener atributosSolo pueden contener atributos.Ejemplo;

Servidores de información 132Mario Muñoz Organero.

67

Contenido estructurado

El contenido de un elemento de tipo complejoEl contenido de un elemento de tipo complejopuede tener orden.Tres posibilidades para especificar el orden:

allsequencechoicechoice

Servidores de información 133Mario Muñoz Organero.

All

Aparecen todos los elementos en cualquierAparecen todos los elementos en cualquierorden.

Servidores de información 134Mario Muñoz Organero.

68

Secuencias y choices

Ejemplo:Ejemplo:

Servidores de información 135Mario Muñoz Organero.

Grupos

En el ejemplo anterior se ha visto como agruparEn el ejemplo anterior se ha visto como agruparelementos (modularidad).También se pueden definir grupos de atributos.

Servidores de información 136Mario Muñoz Organero.

69

Grupo de atributos

<attributeGroup name=“myAttrGroup”>attributeGroup name myAttrGroup<attribute name=“myD1” type=“string”/><attribute name=“myD2” type=“integer”/><attribute name=“myD3” type=“date”/>

</attributeGroup><complexType name=“myDS”>

<element name=“myelement” type=“myType”/>

Servidores de información 137Mario Muñoz Organero.

<element name= myelement type= myType /><attributeGroup ref=“myAttrGroup”/>

</complexType>

Ejemplo Elementos complejos

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

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

</xsd:sequence>

Servidores de información 138Mario Muñoz Organero.

q<attribute name=“contract-date” type=“date”/>

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

70

Restricciones en el contenido de un tipo complejoMediante el atributo “content” que puede tomarMediante el atributo content que puede tomarcomo valores:

textOnly – solo textomixed – contenido textual y subelementoselementOnly – solo subelementosempty – sin contenido (solo atributos)

Servidores de información 139Mario Muñoz Organero.

empty sin contenido (solo atributos)any

Ejemplo: Restricciones en el contenido

<element name=“price”><element name price ><complexType content=“empty”>

<attribute name=“currency” type=“string”/><attribute name=“value” type=“decimal”/>

</complexType></element>

Servidores de información 140Mario Muñoz Organero.

<price currency=“AUD” value=“256.76”/>

71

Herencia en tipos complejos

Como se ha comentado se permite la extensiónComo se ha comentado se permite la extensión,restricción y copia de tipos complejos.Veamos un ejemplo de extensión

Servidores de información 141Mario Muñoz Organero.

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

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

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

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

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

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

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

Servidores de información 142Mario Muñoz Organero.

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

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

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

72

Declaración de elementos con contenido textual y atributosMediante extensión de tipos simples:Mediante extensión de tipos simples:

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

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

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

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

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

Servidores de información 143Mario Muñoz Organero.

Transformación de documentos XML: XSLT

IntroducciónIntroducción

144

73

Características de XSLT

Parte de XSL encargada de las transformacionesentre documentosSintaxis XMLPermite convertir un documento XML a cualquierformato textual: HTML, WML, texto plano, otro XML,...Basado en reglas de transformación (plantillas, o eninglés “templates”) que se aplican sucesivamenteUtili a e presiones XPath en atrib tos (selectUtiliza expresiones XPath en atributos (select,match o test) para seleccionar u operar confragmentos del documentoNavegadores: IE6, NS7 (mal soporte versionesprevias). Opera: no en v7

Servidores de información 145Mario Muñoz Organero.

Transformación de vocabulario

Servidores de información 146Mario Muñoz Organero.

74

Componentes de hoja de estilo XSLTElemento raíz: stylesheetEspacios de nombres para la hoja de estilo ypara el documento a procesarElementos “template” que se asocian a unfragmento de XML que se transforma en otroElementos “apply-templates” para aplicar lasplantillasplantillasContenido de los “template”: reglas detransformación

Servidores de información 147Mario Muñoz Organero.

Ejemplo de hoja de estilo XSLT

<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="bold"> <p>

<b><xsl:value-of select="."/>

</b></p>

</xsl:template>

<xsl:template match="red">

Template XPath

Raíz y Namespace

xsl:template match red <p style="color:red">

<xsl:value-of select="."/></p>

</xsl:template>

</xsl:stylesheet>

Servidores de información 148Mario Muñoz Organero.

75

Ejemplo de aplicación en XML

Asociación sólo para procesado enAsociación sólo para procesado ennavegadorUtilización de la instrucción deprocesamiento xml-stylesheet

<?xml version=“1.0” standalone=“no”?><!DOCTYPE doc SYSTEM “midtd.dtd”><?xml-stylesheet href=“estilo.xsl” type=“text/xsl”?><doc></doc>

Servidores de información 149Mario Muñoz Organero.

Aprendamos mediante un ejemploQueremos transformar:

<catalog><catalog><cd>

<title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd>

<cd>

Servidores de información 150

cd<title>Hide your heart</title> <artist>Bonnie Tyler</artist> <country>UK</country> <company>CBS Records</company> <price>9.90</price> <year>1988</year> </cd>

76

Elemento xsl:template<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0” xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><xsl:template match / ><html><body>

<h2>My CD Collection</h2><table border="1">

<tr bgcolor="#9acd32"><th>Title</th><th>Artist</th>

</tr><tr>

Servidores de información 151Mario Muñoz Organero.

<td>.</td><td>.</td>

</tr></table>

</body></html></xsl:template></xsl:stylesheet>

xsl:value-of<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="..."><xsl:template match="/">xsl:template match /<html><body>

<h2>My CD Collection</h2><table border="1">

<tr bgcolor="#9acd32"><th>Title</th><th>Artist</th>

</tr><tr>

Servidores de información 152Mario Muñoz Organero.

<td><xsl:value-of select="catalog/cd/title"/></td><td><xsl:value-of select="catalog/cd/artist"/></td>

</tr></table>

</body></html></xsl:template></xsl:stylesheet>

77

<xsl:for-each> <?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="..."><xsl:template match="/">

<html><body><body>

<h2>My CD Collection</h2><table border="1">

<tr bgcolor="#9acd32"><th>Title</th><th>Artist</th>

</tr><xsl:for-each select="catalog/cd"><tr>

<td><xsl:value-of select="title"/></td>

Servidores de información 153Mario Muñoz Organero.

td xsl:value of select title / /td<td><xsl:value-of select="artist"/></td>

</tr></xsl:for-each>

</table></body></html>

</xsl:template></xsl:stylesheet>

xsl:sort<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="..."><xsl:template match="/">

<html><body>

<h2>My CD Collection</h2><h2>My CD Collection</h2><table border="1">

<tr bgcolor="#9acd32"><th>Title</th><th>Artist</th>

</tr><xsl:for-each select="catalog/cd"><xsl:sort select="artist"/><tr>

<td><xsl:value-of select="title"/></td>

Servidores de información 154Mario Muñoz Organero.

<td><xsl:value-of select="artist"/></td></tr></xsl:for-each>

</table></body></html>

</xsl:template></xsl:stylesheet>

78

xsl:if<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="..."><xsl:template match="/"><html><body><h2>M CD Collection</h2><h2>My CD Collection</h2><table border="1"><tr bgcolor="#9acd32"><th>Title</th><th>Artist</th>

</tr><xsl:for-each select="catalog/cd"><xsl:if test="price &gt; 10"><tr><td><xsl:value-of select="title"/></td><td><xsl:value-of select="artist"/></td>

Servidores de información 155Mario Muñoz Organero.

</tr></xsl:if></xsl:for-each>

</table></body></html>

</xsl:template></xsl:stylesheet>

xsl:choose<xsl:for-each select="catalog/cd">

<tr><td><xsl:value-of select="title"/></td><xsl:choose>

<xsl:when test="price &gt; 10"><td bgcolor="#ff00ff"><xsl:value-of select="artist"/></td>

</xsl:when><xsl:otherwise><td><xsl:value-of select="artist"/></td>/ l th i

Servidores de información 156Mario Muñoz Organero.

</xsl:otherwise></xsl:choose>

</tr></xsl:for-each>

79

xsl:apply-templates<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="..."><xsl:template match="/"><html><body><h2>My CD Collection</h2>

l l t l t /<xsl:apply-templates/> </body></html></xsl:template><xsl:template match="cd"><p><xsl:apply-templates select="title"/> <xsl:apply-templates select="artist"/></p></xsl:template><xsl:template match="title">

Servidores de información 157Mario Muñoz Organero.

Title: <span style="color:#ff0000"><xsl:value-of select="."/></span><br /></xsl:template><xsl:template match="artist">Artist: <span style="color:#00ff00"><xsl:value-of select="."/></span><br /></xsl:template></xsl:stylesheet>

XSLT avanzado

Extensible Stylesheet Language TrasnformationsExtensible Stylesheet Language Trasnformations

80

Material de referencia

La biblia de XML segunda ediciónLa biblia de XML segunda edición(captítulo 17)Capítulo:

http://www.cafeconleche.org/books/bible2/chapters/ch17.html#d1e8275

Código fuente:Código fuente:http://www.cafeconleche.org/books/bible2/source/17/index.html

Servidores de información 159Mario Muñoz Organero.

Fuente de datos para los ejemplos

Servidores de información 160Mario Muñoz Organero.

81

Modos

Queremos obtener:Queremos obtener:

Servidores de información 161Mario Muñoz Organero.

82

Modos

La plantilla por defecto suele ser algo así:La plantilla por defecto suele ser algo así:

Servidores de información 163Mario Muñoz Organero.

Variables

Servidores de información 164Mario Muñoz Organero.

83

Plantillas con nombre

Servidores de información 165Mario Muñoz Organero.

Pasar parámetros a plantillas

84

Quitando espacios en blanco

Tomando decisiones

xsl:if (sin else)xsl:if (sin else)xsl:choose (permite implementar situacionescon else)

Servidores de información 168Mario Muñoz Organero.

85

xsl:if

Servidores de información 169Mario Muñoz Organero.

xsl:choose

86

Combinando hojas de estilo

xsl:importxsl:importxsl:include

Servidores de información 171Mario Muñoz Organero.

xsl:import

P i i t l t d l

Para invocar templates importados

Prioriza templates de la plantilla actual frente a importados

Servidores de información 172Mario Muñoz Organero.

87

xsl:include

Hace un cut and paste del documento incluidoHace un cut and paste del documento incluido.

Servidores de información 173Mario Muñoz Organero.

xsl:output

Atributo methodAtributo methodxmlhtmltext

Servidores de información 174Mario Muñoz Organero.

88

xsl:output

Otros atributosOtros atributosomit-xml-declarationversionencodingstandalone

Servidores de información 175Mario Muñoz Organero.

xsl:output

Servidores de información 176Mario Muñoz Organero.

89

xsl:output

Declaracion de tipo de documentoDeclaracion de tipo de documento

Servidores de información 177Mario Muñoz Organero.

Indentacion automatica

Servidores de información 178Mario Muñoz Organero.

90

Secciones CDATA

Servidores de información 179Mario Muñoz Organero.

Mejoras en XSLT v2.0

Servidores de información 180Mario Muñoz Organero.

91

Grupos<xsl:for-each-group select="paper"

group-by="author"><xsl:sort select="current-grouping-key()" /><author><name><xsl:value-of select="current-grouping-key()" />

</name><xsl:for-each select="current-group()"><paper><paper><xsl:value-of select="title" />

</paper></xsl:for-each>

</author></xsl:for-each-group>

Grupos

<xsl:for-each-group select="paper"<xsl:for each group select= papergroup-starting-with="paper[position() mod 10 = 1]"><xsl:result-document href="papers{position()}.html">…<xsl:apply-templates select="current-group()" />…

</xsl:result-document></xsl:for-each-group>

Servidores de información 182Mario Muñoz Organero.

92

Funciones

<xsl:function name="str:align"><xsl:function name= str:align ><xsl:param name="string" /><xsl:param name="padding" /><xsl:param name="alignment" />…

</xsl:function>

Servidores de información 183Mario Muñoz Organero.

Varios documentos de salida

<xsl:for-each select="section"><xsl:result-document href="{@id}.html"><xsl:apply-templates select="."

mode="html" /></xsl:result-document>

</xsl:for-each>

Servidores de información 184Mario Muñoz Organero.

93

Sustitucion de caracteres

<xsl:character-map name="html"><xsl:output-character character="&#160;"

string="&amp;nbsp;" />…

</xsl:character-map><xsl:output use-character-maps="html" />

<eg>blah&#160;blah</eg> <eg>blah&nbsp;blah</eg>

Servidores de información 185Mario Muñoz Organero.

Sustitucion de caracteres

<xsl:character-map name="jsp"><!-- JSP start --><xsl:output-character character="&#xE001;"

string="&lt;%" /><!-- JSP end --><xsl:output-character character="&#xE002;"

string="%&gt;" /></xsl:character-map>

&#xE001;@ page language="java" &#xE002; <%@ page language="java" %>

Servidores de información 186Mario Muñoz Organero.

94

Secuencias

<xsl:for-each select="1 to 3"><tr><td colspan="4" /></tr>

</xsl:for-each><tr><td colspan="4" /></tr><tr><td colspan="4" /></tr><tr><td colspan="4" /></tr>

Servidores de información 187Mario Muñoz Organero.

Valor de variables como secuencias

<xsl:variable name="tree">42

</xsl:variable>

<xsl:variable name="sequence" as=“xs:integer">

42</xsl:variable>

Servidores de información 188Mario Muñoz Organero.

95

Incluir elementos en secuencias

Con instruccion <xsl:sequence>Con instruccion <xsl:sequence>

<xsl:variable name="max-expenditure" as="element(lineitem)">

<xsl:for-each select="lineitem"><xsl:sort select="@price * @quantity"

order="descending" /><xsl:if test="position() = 1"><xsl:if test= position() = 1 ><xsl:sequence select="." />

</xsl:if></xsl:for-each>

</xsl:variable>

Servidores de información 189Mario Muñoz Organero.

Nuevas funciones

match(string, regex, flags?) returns true if a( g, g , g )regular expression matches a substringreplace(string, regex, replacement, flags?)returns the string with all occurrences of the regularexpression replaced using the replacement stringtokenize(string, regex, flags?) returns asequence of strings created by splitting the string on everyoccurrence of the regular expression

Servidores de información 190Mario Muñoz Organero.

96

Analisis de cadenas<poem>Mary had a little lamb,Its fleece was white as snow;And everywhere that Mary wentThe lamb was sure to go.

</poem><xsl:template match="poem"><poem>

<xsl:analyze-string select="." regex="\S.*" flags="m"><xsl:matching-substring>

<line><xsl:value-of select="." /></line></xsl:matching-substring>

</xsl:analyze-string></poem>

</xsl:template><poem><line>Mary had a little lamb,</line><line>Its fleece was white as snow;</line><line>And everywhere that Mary went</line><line>The lamb was sure to go.</line>

</poem> Servidores de información 191Mario Muñoz Organero.

Forzando tipos de datos

<xsl:function name="math:power" as="xs:decimal"><xsl:param name="base" as="xs:decimal" /><xsl:param name="power" as="xs:integer" />…

</xsl:function>

< l t l t t h "@d t " " tt ib t (@d t d t )"><xsl:template match="@date" as="attribute(@date, xs:date)"><xsl:attribute name="date">…</xsl:attribute>

</xsl:template>

Servidores de información 192Mario Muñoz Organero.