XML
Jose Emilio Labra Gayo
Contenidos
Antecedentes
Unicode y URIs
Lenguaje XML
DTDs
Espacios de nombres
Unicode
I
Consorcio de empresas dedicadas a internacionalizaci´
on
IObjetivo: Representar los s´ımbolos escritos en todos los
idiomas
I
Asocia un c´
odigo ´
unico a cada s´ımbolo
I
Ejemplo: 2200 en hexadecimal =
∀
I
Diversas codificaciones: UTF-8, UTF-16, UTF-32, etc.
URI
URI (
Identificadores ´
unicos de recursos
)
I
URI = URL + URN
I
URL (
Locator
) tiene doble funcionalidad:
IIdentificar recursos
I
Protocolo de acceso
Ejemplo:
http://www.uniovi.es
IURN: Nombre ´
unico de recursos
I
Ejemplo:
urn:isbn:0-395-36341-1
I
IRI (
Internationalized Resource Identifier
) permite incluir
caracteres Unicode
XML
I
XML es un lenguaje de marcado generalizado
I
Define una sintaxis com´
un que permite definir vocabularios
espec´ıficos
I
Or´ıgenes
I
SGML (70 ) permit´ıa definir vocabulrios
I
HTML fue un vocabulario de SGML para hipertexto
IXML = SGML m´
as simple y adaptado a Internet
Gran ´
exito industrial y adopci´
on en m´
ultiples contextos
I
Parte fundamental de la arquitectura Web
I
Otras aplicaciones: Ficheros de Configuraci´
on, vocabularios
espec´ıficos, etc.
XML
<h t m l> <head><t i t l e>Poema</t i t l e> </head> <body l a n g=” e s ”> <h1>A l b a</h1> <h2>A b r i l de 1915 </h2> <h2>G r a n a d a</h2> <p>Mi c o r a z o n o p r i m i d o</p> <p>s i e n t e j u n t o a l a a l b o r a d a</p> </body> </h t m l> <poema f e c h a=” A b r i l 1915 ” l u g a r=” G r a n a d a ”> <t i t u l o>A l b a</t i t u l o> <v e r s o>Mi c o r a z o n o p r i m i d o</v e r s o> <v e r s o>s i e n t e j u n t o a l a a l b o r a d a</v e r s o> <v e r s o>e l d o l o r de s u s a m o r e s . . .</v e r s o> </poema>Partes de un documento XML
IDeclaraci´
on XML: opcional
IDeclaraci´
on de tipo de
documento (DTD): opcional
IContenidos
Ejemplo de fichero XML
<?xml v e r s i o n=” 1 . 0 ” ?> <!DOCTYPE poema SYSTEM ” poema . d t d ”> <poema f e c h a=” A b r i l 1915 ” l u g a r=” G r a n a d a ”> <t i t u l o>A l b a</t i t u l o> <v e r s o>Mi c o r a z o n o p r i m i d o</v e r s o> <v e r s o>s i e n t e j u n t o a l a a l b o r a d a</v e r s o> <v e r s o>e l d o l o r de s u s a m o r e s . . .</v e r s o> </poema>Declaraci´
on XML
<?xml v e r s i o n=” 1 . 0 ” e n c o d i n g=”UTF−8” s t a n d a l o n e=” y e s ” ?>
I
version
indica la versi´
on.
I
1.0 = versi´
on m´
as habitual
I
1.1 aumenta capacidad de soporte de Unicode
I
encoding
indica codificaci´
on de caracteres
I
UTF-8= caracteres Unicode
Iiso-8859-1
= caracteres latinos
I
standalone
I
yes
indica que puede haber declaraciones externas
Ino
indica que no hay dichas declaraciones
Cuerpo del documento XML
Formato de elemento
<e t i q u e t a a t r i b 1=” v a l o r 1 ” a t r i b 2=” v a l o r 2 ” . . .> . . . c o n t e n i d o s . . .
</e t i q u e t a>
I
El cuerpo del documento est´
a formado por un elemento
I
Un elemento consta de:
I
Una etiqueta inicial que puede contener una lista de atributos
y valores
I
Los contenidos del elemento (puede estar vac´ıo)
ILa etiqueta final
I
Los contenidos del elemento pueden ser otros subelementos
IEs necesario cerrar todas las etiquetas
I
XML es sensible a may´
usculas/min´
usculas
Elementos vac´ıos
Elemento vac´ıo sin simplificar
<e t i q u e t a a t r i b 1=” v a l o r 1 ” a t r i b 2=” v a l o r 2 ” . . .> </e t i q u e t a>
Un elemento vac´ıo puede simplificarse como:
Elemento vac´ıo simplificado
Anidamiento
Las etiquetas que se abran deben cerrarse sin que se produzcan
anidamientos
Correcto
<e x t e r n o> <i n t e r n o> t e x t o </i n t e r n o> </e x t e r n o>Incorrecto
<e x t e r n o> <i n t e r n o> t e x t o </e x t e r n o> </i n t e r n o>XML tiene estructura de ´
arbol
Cada documento XML puede representarse como un ´
arbol
<poema f e c h a=” A b r i l 1915 ” l u g a r=” G r a n a d a ”> <t i t u l o>A l b a</t i t u l o> <v e r s o>Mi c o r a z o n o p r i m i d o</v e r s o> <v e r s o>s i e n t e j u n t o a l a a l b o r a d a</v e r s o> <v e r s o>e l d o l o r de s u s a m o r e s . . .</v e r s o> </poema>
Arbol XML
Dibujar el ´
arbol DOM para el siguiente documento
<h t m l> <head><t i t l e>P a g i n a</t i t l e></head> <body> <h1>E j e m p l o</h1> <p>E s t e t e x t o t i e n e un <a h r e f=” h t t p : / /www . u n i o v i . e s ”>e n l a c e</a> y un t e x t o <em>e n f a t i z a d o</em></p> </body> </h t m l>
Atributos
<poema f e c h a=” A b r i l 1915 ”
l u g a r=” G r a n a d a ”> . . .
</poema>
I
El orden de los atributos no es significativo
INo puede haber nombres de atributos repetidos
IHay varios atributos predefinidos. Por ejemplo:
I
xml:lang
especifica el c´
odigo del idioma:
en
(ingl´
es),
sp
(espa˜
nol), etc.
I
xml:space
especifica c´
omo tratar el espacio en blanco:
Ipreserve
= mantenerlo
I
default
= dejar libertar a la aplicaci´
on para tratarlo como
quiera
Comentarios
Los comentarios indican porciones del documento que no ser´
an
analizadas por el procesador
Comienzan por
<--
y finalizan por
-->
<!−− E s t e poema r e q u i e r e c o m e n t a r i o s −−> <poema> <t i t u l o>La f e a l d a d</t i t u l o> <!−− No h a y v e r s o s −−> </poema>
Dentro de los comentarios no pueden aparecer los caracteres
Caracteres especiales
Existen 5 caracteres especiales:
I<
=
<
I
>
=
>
I
&
=
&
I
"
=
"
I
'
=
’
Cualquier car´
acter Unicode puede indicarse mediante & seguido del
n´
umero y acabado por
;
Secciones CDATA
Suelen utilizarse para incluir porciones de texto sin analizar. Por
ejemplo c´
odigo fuente
Ejemplo sin CDATA
<c o d i g o>
i f ( x & l t ; 3 && ; x &g t ; 4 )
p r i n t f (& q u o t ; H o l a&q u o t ; ) ; </c o d i g o>
Ejemplo sin CDATA
<c o d i g o> <! [CDATA[ i f ( x < 3 && x > 4 ) p r i n t f ( ” H o l a ” ) ; ] ]> </ c o d i g o>
Instrucciones de Procesamiento
Permiten indicar al procesador que ejecute una aplicaci´
on externa
Formato:
<?aplicaci´
on ...datos... ?>
Los tipos de aplicaciones externas no est´
an definidos
Algunos ejemplos:
I
<?xml version=’1.0’ ?>
I
<?xsl-stylesheet type=’text/xsl’ href=’...’ ?>
Documento bien formado
Un documento XML est´
a bien formado si cumple las reglas
anteriores
Una condici´
on b´
asica para trabajar con un documento XML es que
est´
e bien formado
Validaci´
on
I
Es posible limitar la estructura de los documentos
IVarias alternativas:
I
DTDs
IXML Schema
IRelax NG
ISchematron
Validaci´
on mediante DTDs
Ejemplo XML con DTD
<poema f e c h a=” A b r i l 1915 ” l u g a r=” G r a n a d a ”> <!DOCTYPE poema SYSTEM ” poema . d t d ”> <t i t u l o>A l b a</t i t u l o> <v e r s o>Mi c o r a z o n o p r i m i d o</v e r s o> <v e r s o>s i e n t e j u n t o a l a a l b o r a d a</v e r s o> <v e r s o>e l d o l o r de s u s a m o r e s . . .</v e r s o> </poema>Ejemplo de DTD
<!ELEMENT poema (t i t u l o ,v e r s o∗)> <!ELEMENT t i t u l o (#PCDATA)> <!ELEMENT v e r s o (#PCDATA)> <!ATTLIST poema f e c h a CDATA#REQUIRED l u g a r CDATA#IMPLIED>DTDs internas vs externas
Las DTDs pueden definirse dentro del documento XML
<!DOCTYPE h t m l
PUBLIC ”−//W3C//DTD XHTML 1 . 0 S t r i c t //EN”
” h t t p : //www . w3 . o r g /TR/ x h t m l 1 /DTD/ x h t m l 1−s t r i c t . d t d ”>
Tambi´
en pueden residir en otro documento:
<!DOCTYPE h t m l
PUBLIC ”−//W3C//DTD XHTML 1 . 0 S t r i c t //EN”
” h t t p : //www . w3 . o r g /TR/ x h t m l 1 /DTD/ x h t m l 1−s t r i c t . d t d ”>
Algunas DTDs pueden tener identificadores p´
ublicos
<!DOCTYPE h t m l
PUBLIC ”−//W3C//DTD XHTML 1 . 0 S t r i c t //EN”
Tipos de declaraciones
I
ELEMENT
= elementos del documento
I
ATTLIST
= lista de atributos de un elemento
IENTITY
= entidades (similares a las macros)
I
NOTATION
= permite definir otros tipos de contenidos,
facilitando la inclusi´
on de formatos binarios
Modelo de contenido de elementos
Se utiliza un modelo basado en expresiones regulares
I
?
= 0,1 elemento
I*
= 0 ´
o m´
as elementos
I+
= 1 ´
o m´
as elementos
I|
= alternativa
I,
= secuencia
IEMPTY
= vac´ıo
I
ANY
= cualquier cosa
I
#PCDATA
= texto
<!ELEMENT poema (t i t u l o , a u t o r? , v e r s o∗ ) > <!ELEMENT l i b r o ( poema | p r o s a ) > <!ELEMENT a u t o r EMPTY> <!ELEMENT t i t u l o (#PCDATA)> <!ELEMENT s e c (t i t u l o , ( p | s e c +)) >Modelo de contenido mixto
<p>E s t e t e x t o t i e n e un
<a h r e f=” r e f . h t m l ”>e n l a c e</a> y a l g o <em>e n f a t i z a d o</em> </p>
La validaci´
on puede realizarse mediante:
<!ELEMENT p (#PCDATA | a | em )∗ > <!ELEMENT a (#PCDATA)>
<!ELEMENT em (#PCDATA)>
Atributos
I
Tipos de datos:
I
CDATA = cadena
INMTOKEN = nombre
I
NMTOKENS = lista de nombres
I
Valor de atributos:
I
#REQUIRED
obligatorio
I#IMPLIED
opcional
I#FIXED
fijo
I
Valor
= valor por defecto
<!ATTLIST poema f e c h a CDATA#REQUIRED l u g a r CDATA#IMPLIED>
Valores ID e IDREF
I
ID
representa un atributo cuyo valor debe ser ´
unico en todo el
documento
I
IDREF
representa un atributo cuyo valor debe coincidir con el
de otro atributo del documento
<!ATTLIST a u t o r c o d i g o ID #REQUIRED> <!ATTLIST a u t o r P r e m i a d o c o d i g o IDREF #REQUIRED>
. . .
<a u t o r c o d i g o=” A21 ”>. . .</a u t o r> <a u t o r c o d i g o=” A45 ”>. . .</a u t o r>
. . .
<a u t o r P r e m i a d o c o d i g o=” A45 ” /> Jose Emilio Labra Gayo
Entidades generales
Permiten definir macros
<!ENTITY c l a r i n ”<a u t o r c o d i g o=” 23 ”>L e o p o l d o A l a s C l a r i n</ a u t o r>”> . . . <l i b r o> <t i t u l o>La R e g e n t a</ t i t u l o> & c l a r i n ; </ l i b r o>
equivale a:
<l i b r o> <t i t u l o>La R e g e n t a</ t i t u l o> <a u t o r c o d i g o=” 23 ”>L e o p o l d o A l a s C l a r i n</ a u t o r> </ l i b r o>Entidades externas
Permiten incluir documentos externos en el documento actual
<!DOCTYPE l i b r o s [ <!ENTITY a u t o r e s SYSTEM ” a u t o r e s . xml ”> <!ENTITY e d i t o r i a l e s SYSTEM ” e d i t o r i a l e s . xml ”> ]> <l i b r o s> &a u t o r e s ; & e d i t o r i a l e s ; </ l i b r o s>
Entidades par´
ametro
Permiten crear macros dentro de las definiciones de las DTDs
<!ELEMENT % a u t o r e s SYSTEM ” a u t o r e s . d t d ” > <!ELEMENT % e d i t o r i a l e s SYSTEM ” e d i t o r i a l e s . d t d ” >
%a u t o r e s ; %e d i t o r i a l e s ;
Entidades par´
ametro externas
Permiten incluir otras DTDs en una DTD
<!ELEMENT % a u t o r e s SYSTEM ” a u t o r e s . d t d ” > <!ELEMENT % e d i t o r i a l e s SYSTEM ” e d i t o r i a l e s . d t d ” >
%a u t o r e s ; %e d i t o r i a l e s ;
Espacios de nombres
El problema de la homonimia
<p a i s nombre=” F r a n c i a ”> <c a p i t a l>P a r i s</ c a p i t a l> </ p a i s> <i n v e r s i o n> <c a p i t a l>7000</ c a p i t a l> </ i n v e r s i o n>¿C´
omo juntarlo todo en un mismo documento?
<i n v e r s i o n e s> <p a i s nombre=” F r a n c i a ”> <c a p i t a l>P a r i s</ c a p i t a l> <c a p i t a l>1200</ c a p i t a l> </ p a i s> . . . </ i n v e r s i o n e s>
Espacios de Nombres
I
La soluci´
on consistir´
a en asociar a cada etiqueta una URI que
identificar´
a el espacio de nombres al que pertenece
I
La URI sirve simplemente para evitar ambig¨
uedad =
identificador global ´
unico
I
Conceptualmente se representar´ıa como:
Representaci´
on conceptual de Espacio de nombres
<[ h t t p : //www . b o l s a . com ] : i n v e r s i o n e s> <[ h t t p : //www . g e o g . e s ] : p a i s [ h t t p : //www . g e o g . e s ] : n o m b r e=” F r a n c i a ”> <[ h t t p : //www . g e o g . e s ] : c a p i t a l>P a r i s </ [ h t t p : //www . g e o g . e s ] : c a p i t a l> <[ h t t p : //www . b o l s a . com ] : c a p i t a l>1200 </ [ h t t p : //www . b o l s a . com ] : c a p i t a l> </ [ h t t p : //www . b o l s a . com ] : p a i s> . . . </ [ h t t p : //www . b o l s a . com ] : i n v e r s i o n e s> Jose Emilio Labra Gayo
Sintaxis de Espacio de nombres
I
Para abreviar la sintaxis se asocian alias mediante el atributo
xmlns:alias="...URI..."
Espacio de nombres
<b : i n v e r s i o n e s x m l n s : b=” h t t p : //www . b o l s a . com” x m l n s : g e o=” h t t p : //www . g e o . e s ”> <g e o : p a i s g e o : n o m b r e=” F r a n c i a ”> <g e o : c a p i t a l>P a r i s<g e o : c a p i t a l> <b : c a p i t a l>1200</ b : c a p i t a l> </ g e o : p a i s> . . . </ b : i n v e r s i o n e s>Sintaxis de Espacio de nombres
I
No es necesario asociar todos los alias al comienzo del
documento
Espacio de nombres
<b : i n v e r s i o n e s x m l n s : b=” h t t p : //www . b o l s a . com”> <g e o : p a i s x m l n s : g e o=” h t t p : //www . g e o . e s ” g e o : n o m b r e=” F r a n c i a ”> <g e o : c a p i t a l>P a r i s<g e o : c a p i t a l> <b : c a p i t a l>1200</ b : c a p i t a l> </ g e o : p a i s> . . . </ b : i n v e r s i o n e s>Sintaxis de Espacio de nombres
I
Puede definirse un espacio de nombres por defecto
IPara ello, se utiliza el atributo
xmlns="...URI..."
Espacio de nombres
<i n v e r s i o n e s x m l n s=” h t t p : //www . b o l s a . com”> <g e o : p a i s x m l n s : g e o=” h t t p : //www . g e o . e s ” g e o : n o m b r e=” F r a n c i a ”> <g e o : c a p i t a l>P a r i s<g e o : c a p i t a l> <c a p i t a l>1200</ c a p i t a l> </ g e o : p a i s> . . . </ i n v e r s i o n e s>Algunos espacios de nombres populares
Ihttp://www.w3.org/1999/xhtml
: XHTML
Ihttp://www.w3.org/1999/XSL/Transform
: XSLT
Ihttp://www.w3.org/2000/svg
: SVG
Ihttp://www.w3.org/1999/xlink
: XLink
Ihttp://www.w3.org/1999/xlink
: XLink
Ihttp://www.w3.org/1999/02/22-rdf-syntax-ns#
: RDF
Ihttp://purl.org/dc/elements/1.1/
: Dublin Core
Ihttp://www.w3.org/2005/Atom
: Formato Atom
Combinaci´
on de Espacios de nombres
Ejemplo de combinaci´
on
<h t m l x m l n s=” h t t p : / /www . w3 . o r g / 1 9 9 9 / x h t m l ” x m l n s: x l i n k =” h t t p : / /www . w3 . o r g / 1 9 9 9 / x l i n k ”> <head> <t i t l e>HTML + SVG</t i t l e> </head> <body> <h1>Una i m a g e n</h1> <s v g x m l n s=” h t t p : / /www . w3 . o r g / 2 0 0 0 / s v g ” w i d t h=” 300 ” h e i g h t=” 200 ”> <a x l i n k :h r e f=” h t t p : / /www . u n i o v i . e s ”> <c i r c l e c x=” 150 ” c y=” 100 ” r=” 50 ” /> </a> </ s v g> </body> </h t m l>Validaci´
on de Espacios de nombres con DTDs
Los espacios de nombres fueron posteriores a los DTDs
De todas formas, es posible realizar la validaci´
on
<!DOCTYPE i n v e r s i o n e s [ <!ELEMENT i n v e r s i o n e s ( g : p a i s∗)> <!ELEMENT g : p a i s ( g : c a p i t a l , c a p i t a l ) > <!ELEMENT g : c a p i t a l (#PCDATA)> <!ELEMENT c a p i t a l (#PCDATA)> <!ATTLIST i n v e r s i o n e s
x m l n s CDATA#FIXED ” h t t p : //www . b o l s a . com”> <!ATTLIST g : p a i s
g : n o m b r e CDATA#REQUIRED
x m l n s : g CDATA #FIXED ” h t t p : //www . g e o g . e s ”> ]>