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 > 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 > 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.
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.
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=" "
string="&nbsp;" />…
</xsl:character-map><xsl:output use-character-maps="html" />
<eg>blah blah</eg> <eg>blah blah</eg>
Servidores de información 185Mario Muñoz Organero.
Sustitucion de caracteres
<xsl:character-map name="jsp"><!-- JSP start --><xsl:output-character character=""
string="<%" /><!-- JSP end --><xsl:output-character character=""
string="%>" /></xsl:character-map>
@ page language="java"  <%@ 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.