XML

Transcripción

XML
T
Tema 3. IV. XML
IV XML
Arquitecturas Distribuidas 09/10
1
IV. XML
1.
2.
3
3.
4.
5.
6
6.
¿Qué es XML?
Estructura de un documento XML
Importancia de XML
Problemas de XML
Conformidad y validez
E
Estructura DTD XML
DTD XML
3.1. Elementos 3.2. Atributos 3.3. Notaciones 3.4. Entidades
35
3.5. Instrucciones de procesado (PI)
p
( )
7. Interpretación de un documento XML por un navegador
8. XHTML
9. Tecnologías relacionadas con XML
9
5.1. Espacios de nombres
5.2. XSchema
5 3 Lenguajes de estilo y transformación para XML
5.3. Lenguajes de estilo y transformación para XML
Arquitecturas Distribuidas 09/10
2
¿Qué es XML? (I)
¿Q
()
y Lenguaje de Marcas eXtendido.
y Meta‐lenguaje
g j p
para lenguajes de marcas particulares g j
p
(como SGML): permite crear otros lenguajes de marcas
y Proporciona las reglas sintácticas que permiten crear lenguajes que están bien formados y puedan ser validados
y Cuando uno crea un documento XML, define sus propias etiquetas. No está limitado en qué o cómo se describen los datos.
datos
y Mientras el documento esté bien formado es XML aceptable
y Cada lenguaje particular (e.g. XHTML, MathML, SVG) es una aplicación de XML
li ió d XML
y Proporciona información acerca de los datos (metadatos)
Arquitecturas Distribuidas 09/10
3
¿Qué es XML? (I)
¿Q
()
y Separa los datos de su representación (formato) particular
y XML no es HTML mejorado, sino SGML simplificado.
j
,
G
p
y Simplifica el procesado e intercambio de la información, es independiente de la plataforma.
y Proporciona reglas sintácticas para crear lenguajes que deben estar bien formados y pueden ser validados
y Es usado por muchas otras tecnologías y en muchos ámbitos (e.g.
ámbitos (e
g los ficheros de configuración de las tecnologías de Microsoft son XML).
Arquitecturas Distribuidas 09/10
4
Estructura de un documento XML
Estructura de un documento XML
y Prólogo (declaraciones) y cuerpo.
<?xml version="1.0" [parámetros opcionales]>
Declaraciones de las reglas del documento
<raiz> Contenido </raiz>
PRÓLOGO
CUERPO
y Parámetros opcionales en la declaración:
y standalone: indica si el documento es autocontenido.
d
ld
d
y encoding: juego de caracteres del documento.
Arquitecturas Distribuidas 09/10
5
Estructura de un documento XML
Estructura de un documento XML
y Ejemplo documento XML simple:
<?xml version="1.0" encoding='UTF-8‘?>
<dni>
<id>
d 568
568767331X
6 33
</id>
/ d
<nombre> Pepe </nombre>
<apellidos> Pérez </apellidos>
<nacimiento>
<lugar>
g
Murcia </lugar>
/ g
<fecha> 1/1/1983 </fecha>
</nacimiento>
</dni>
MARCAS
Arquitecturas Distribuidas 09/10
6
Estructura de un documento XML
Estructura de un documento XML
y Ejemplo documento XML simple:
<?xml version="1.0"
encoding='UTF-8'>
Una aplicación podría <dni>
usar el DNI para enviar a <id>
d 568
568767331X
6 33
</id>
/ d
l
la máquina que los á
i
l <nombre> Pepe </nombre>
<apellidos>
Pérez </apellidos>
imprime los comandos <nacimiento>
<lugar>
g
Isla p
perejil
j
</lugar>
/ g
oportunos
<fecha> 1/1/1983 </fecha>
</nacimiento>
</dni>
Arquitecturas Distribuidas 09/10
7
Estructura de un documento XML
Estructura de un documento XML
y Ejemplo documento XML simple:
<?xml version="1.0"
encoding='UTF-8'>
Una aplicación podría usar el DNI para enviar a <id>
d 568
568767331X
6 33
</id>
/ d
l
la máquina que los á
i
l <nombre> Pepe </nombre>
<apellidos>
Pérez </apellidos>
imprime los comandos <nacimiento>
<lugar>
g
Isla p
perejil
j
</lugar>
/ g
oportunos
Otra aplicación podría <fecha> 1/1/1983 </fecha>
</nacimiento>
usar el DNI para enviar al </dni>
usuario un correo para p
recordarle que debe renovarlo.
<dni>
Arquitecturas Distribuidas 09/10
8
Estructura de un documento XML
Estructura de un documento XML
y Ejemplo documento XML simple:
<?xml version="1.0"
encoding='UTF-8'>
Una aplicación podría usar el DNI para enviar a <id>
d 568
568767331X
6 33
</id>
/ d
l
la máquina que los hace á
i
l h <nombre> Pepe </nombre>
<apellidos>
Pérez </apellidos>
los comandos oportunos
<nacimiento>
<lugar>
g
Isla p
perejil
j
</lugar>
/ g
Otra aplicación podría <fecha> 1/1/1983
</fecha>
Otra aplicación podría </nacimiento>
usar el DNI para enviar al </dni>
usar los datos para usuario un correo para p
contrastar la veracidad l id d recordarle que debe en una compra a través renovarlo.
de Internet
de Internet.
<dni>
Arquitecturas Distribuidas 09/10
9
Estructura de un documento XML
Estructura de un documento XML
XML PROPORCIONA UN <?xml
version="1.0"
encoding='UTF-8'>
MÉTODO PARA ESTRUCTURAR Una aplicación podría usar el DNI para enviar a <dni>
INFORMACIÓN, O
<id>
d 568
568767331X
6C33Ó </id>
/, d
l
la máquina que los hace á
i
l h <nombre> Pepe </nombre>
<apellidos>
Pérez </apellidos>
los comandos oportunos
INDEPENDIENTEMENTE DE LA <nacimiento>
<lugar>
g
Isla p
perejil
j
</lugar>
/ g
Otra aplicación podría <fecha> 1/1/1983
</fecha>
Otra aplicación podría APLICACIÓN QUE LA PROCESE Ó
Q
O
</nacimiento>
usar el DNI para enviar al </dni>
usar los datos para usuario un correo para p
Y PARA DOTARLA DE contrastar la veracidad l id d recordarle que debe en una compra a través renovarlo.
SIGNIFICADO de Internet.
de Internet
y Ejemplo documento XML simple:
Arquitecturas Distribuidas 09/10
10
Importancia de XML
p
y XML permite especificar la semántica de los datos que
contiene: ¿qué
¿q significan?
g
y HTML, por el contrario, permite definir la estructura de un documento pero no la semántica de los datos que contiene
y Separación
S
ió de los datos
d l d t de la forma en que
d l f
se procesan
= independiente del dominio de aplicación
y Permitir q
que los datos “perduren” más
p
allá de la tecnología
g
y Legible por los humanos (Human‐readable): ¿por qué? al menos
hay una oportunidad de discernir el significado en el futuro (si
p
de abrir el archivo))
somos capaces
y Estándar y MUY utilizado
Arquitecturas Distribuidas 09/10
11
Problemas de XML
y Tremendamente redundante (desde el punto de vista de una máquina). Muy poco eficiente en el uso de de una máquina)
Muy poco eficiente en el uso de recursos
y Ancho de banda, latencia, almacenamiento.
Ancho de banda latencia almacenamiento
y Proliferación de lenguajes y Necesitamos un parser/aplicación
N
it
/ li ió para cada uno de ellos
d d ll
Arquitecturas Distribuidas 09/10
12
Conformidad y validez
Conformidad y validez
y En un documento bien formado (well‐formed)
y Se cierran todos los elementos abiertos
HTML: <h2> <b> Nombre: </b> <h3> <i> Pepe Pérez </i>
XML: <h2> <b> Nombre: </b> </h2> <h3> <i> Pepe Pérez </i> </h3>
Arquitecturas Distribuidas 09/10
13
Conformidad y validez
Conformidad y validez
y En un documento bien formado (well‐formed)
y Se identifican los elementos vacíos
HTML: <b> Nombre: </b> <i> Pepe Pérez </i> <br>
XML: <b> Nombre: </b> <i> Pepe Pérez </i> <br/>
Elemento vacío: <TAG/>
Arquitecturas Distribuidas 09/10
14
Conformidad y validez
Conformidad y validez
y En un documento bien formado (well‐formed)
y Los valores de los atributos siempre están presentes y van entre comillas (“valor” o ‘valor’)
(
)
HTML: <li compact>
<li type=disc>
XML: <li compact="compact“>
<li type="disc">
Arquitecturas Distribuidas 09/10
15
Conformidad y validez
Conformidad y validez
y En un documento bien formado (well‐formed)
y En elementos y atributos, las mayúsculas y minúsculas son letras distintas
HTML: <LI type=disc> == <li type=disc> == <Li tYPe=disc>
XML: <LI type='disc'>
yp
!= <li type='disc'>
yp
!= <Li tYPe='disc'>
Arquitecturas Distribuidas 09/10
16
Conformidad y validez
Conformidad y validez
y En un documento bien formado (well‐formed)
y Los elementos deben estar bien anidados
HTML: El analizador (parser) intenta arreglarlo
HTML: <b> <u> Número de DNI: 568767331X </b> </u>
XML: <b> <u> Número de DNI: 568767331X </b>
/
</u>
/
XML: El analizador (parser) debe dar error!
Arquitecturas Distribuidas 09/10
17
Conformidad y validez
Conformidad y validez
y En un documento bien formado (well‐formed)
y Todas las entidades deben estar declaradas
HTML: <b> Nombre &nbsp; Apellidos </b>
XML: <b> Nombre &nbsp; Apellidos </b>
•XML: &nbsp; necesita una declaración previa. •XML sólo entiende por defecto: &amp; (&) &lt; (<) &gt; (>) &quote; (“) y &apos; (‘)
&amp; (&), &lt; (<), &gt; (>), &quote; (
) y &apos; ( )
Arquitecturas Distribuidas 09/10
18
Conformidad y validez
Conformidad y validez
y En un documento bien formado (well‐formed)
y Puede contener comentarios
XML: <!–<!
Comentario -->
>
y Puede contener datos que no se analicen sintácticamente
XML: <![CDATA [datos que no se analizan]]>
Arquitecturas Distribuidas 09/10
19
Conformidad y validez
Conformidad y validez
y XML admite una declaración de Definición del Tipo de Documento (DTD):
“Conjunto que describe de reglas que debe respetar un documento perteneciente a un lenguaje XML específico Define la estructura de un documento: específico. Define la estructura de un documento: elementos, contenidos de cada elemento, orden, atributos de cada elemento, etc.”
y Un documento es conforme ó valido si y sólo si:
y Está bien formado
y Tiene un DTD y respeta sus reglas
Arquitecturas Distribuidas 09/10
20
Estructura DTD XML
Estructura DTD XML
y Declaración del DTD:
<?xml version="1.0">
<!DOCTYPE nombre [
REGLAS SINTACTICAS (declaraciones internas)
]>
<nombre>
...
</nombre>
Arquitecturas Distribuidas 09/10
21
Estructura DTD XML
Estructura DTD XML
y Declaración “externa”:
<?xml version="1.0">
URL donde se ubica el URL d
d bi l documento con el DTD
DTD.
<!DOCTYPE nombre (SYSTEM|PUBLIC) URL [ ]>
<nombre>
...
</nombre>
SYSTEM si es SYSTEM i un DTD propio
i
Arquitecturas Distribuidas 09/10
PUBLIC si es un DTD estándar.
22
Estructura DTD XML
Estructura DTD XML
y Declaración “mixta”:
<?xml version="1.0">
<!DOCTYPE nombre (SYSTEM|PUBLIC) URL [
Reglas sintácticas (declaraciones internas)
]>
<nombre>
...
</nombre>
DTD es la suma de las partes DTD l d l t externas e internas
Arquitecturas Distribuidas 09/10
23
Estructura DTD XML
Estructura DTD XML
y Observación:
<?xml version="1.0">
<!DOCTYPE nombre [
REGLAS SINTACTICAS (declaraciones internas)
]>
<nombre>
...
</nombre>
Nombre indica cómo se N
b i di ó llama la raíz del documento
Arquitecturas Distribuidas 09/10
24
Estructura DTD XML
y Reglas del DTD:
<!DOCTYPE nombre [
REGLAS SINTACTICAS:
ELEMENTOS:
ATRIBUTOS:
<!ELEMENT elemento (contenido)>
<!ATTLIST elemento
atributo tipo descripción
...
>
ENTIDADES:
INTERNAS: <!ENTITY [%] entidad “cualquier texto”>
EXTERNAS: <!ENTITY [%] entidad URL>
PREDEFINIDAS: &amp; &lt; etc
NOTACIONES:
<!NOTATION
!
nombre identificador>
INSTRUCCIONES: <?... >
]
y Utiliza
Utili la sintaxis
l i t i de SGML, simplificando
d SGML i lifi
d las
l posibilidades
ibilid d
Arquitecturas Distribuidas 09/10
25
Elementos en DTD XML
Elementos en DTD XML
y Declaración de los elementos:
<!ELEMENT elemento (contenido)>
Nombre del N
b d l nuevo elemento
Indica la declaración de un nuevo elemento
Declaración del tipo de D
l
ió d l ti d contenido (elementos y datos) que puede incluir el elemento, cuántos y en qué orden aparecen.
Arquitecturas Distribuidas 09/10
26
Elementos en DTD XML
Elementos en DTD XML
Clases de contenido para elementos (5 posibilidades):
<!--Elemento vacío-->
<!ELEMENT elemento EMPTY>
<!--Puede contener cualquier elemento-->
<!ELEMENT elemento ALL>
(datos)
) con entidades (q
(que
<!--Contenido es una cadena de caracteres (
deben ser procesadas)-->
<!ELEMENT elemento (#PCDATA)>
p
de otros elementos,
, según
g
una fórmula-->
<!--Elemento compuesto
<!ELEMENT elemento formula(elementos)>
<!--Elemento con contenido mixto (otros elementos y #PCDATA)-->
(
, #
#PCDATA)>
)
<!ELEMENT elemento formula(elementos,
Arquitecturas Distribuidas 09/10
27
Elementos en DTD XML
Elementos en DTD XML
Clases de contenido para elementos (fórmulas):
y Sintáxis muy similar a SGML.
y Indican el número de veces que puede aparecer un componente d
l
d
d
(cardinalidad):
* (cero o más veces)
(
)
+ (una o más veces)
? (cero o una vez)
y Indican el orden en que deben/pueden aparecer los elementos I di
l d d b /
d l l
t (atención: el operador & no existe, diferencia con SGML):
a,b (b a continuación de a)
a|b (b ó a)
(conjunto) (agrupación, si existe operador posterior afecta a todo el conjunto)
j
)
Arquitecturas Distribuidas 09/10
28
Elementos en DTD XML
Elementos en DTD XML
Ejemplos de fórmulas:
<!ELEMENT a (b,c)>
(b c)>
<a>
<b>contenido de b</b>
<c>contenido de c</c>
</a>
<a>
<c>contenido de c</c>
<b>contenido de b</b>
</a>
<a>
<b>contenido de b</b>
</a>
<a></a>
Arquitecturas Distribuidas 09/10
29
Elementos en DTD XML
Elementos en DTD XML
Ejemplos de fórmulas:
<!ELEMENT a (b,c)>
(b c)>
<a>
<b>contenido de b</b>
<c>contenido de c</c>
</a>
VÁLIDA!
Á
<a>
<c>contenido de c</c>
<b>contenido de b</b>
</a>
NO VÁLIDA!
<a>
<b>contenido de b</b>
</a>
<a> </a>
NO VÁLIDA!
NO VÁLIDA!
Arquitecturas Distribuidas 09/10
30
Elementos en DTD XML
Elementos en DTD XML
Ejemplos de fórmulas:
<!ELEMENT a (b?
(b?, c)+>
<a>
<c>contenido de c</c>
</a>
<a>
<b>contenido
<c>contenido
<c>contenido
<b>contenido
<c>contenido
de
de
de
de
de
b</b>
c</c>
c</c>
b</b>
c</c>
</a>
Arquitecturas Distribuidas 09/10
31
Elementos en DTD XML
Elementos en DTD XML
Ejemplos de fórmulas:
<!ELEMENT a (b?
(b?, c)+>
<a>
<c>contenido de c</c>
</a>
VÁLIDA!
<a>
<b>contenido
<c>contenido
<c>contenido
<b>contenido
<c>contenido
de
de
de
de
de
b</b>
c</c>
c</c>
VÁLIDA!
b</b>
c</c>
</a>
Arquitecturas Distribuidas 09/10
32
Elementos en DTD XML
Elementos en DTD XML
Ejemplos de fórmulas:
<!ELEMENT a (#PCDATA,
(#PCDATA (b|c),
(b|c) d+,
d+ #PCDATA)>
<a>
Cualquier cadena de texto forma un #PCDATA.
Adem&aacute;s es posible que nos encontremos
entidades delimitadas por &amp; y ;.
<b> contenido de b </b>
<d> contenidio de d </d>
Cualquier otra cadena de datos.
<a>
<a>
<c> contenido de c </c>
<d> contenido de d </d>
Nota: #PCDATA puede ser una cadena vac&iacute;a.
</a>
Arquitecturas Distribuidas 09/10
33
Elementos en DTD XML
Elementos en DTD XML
Ejemplos de fórmulas:
<!ELEMENT a (#PCDATA,
(#PCDATA (b|c),
(b|c) d+,
d+ #PCDATA)>
<a>
Cualquier cadena de texto forma un #PCDATA.
Adem&aacute;s es posible que nos encontremos
entidades delimitadas por &amp; y ;.
<b> contenido de b </b>
<d> contenidio de d </d>
Cualquier otra cadena de datos.
<a>
Ejemplo 1) Interpretación del #PCDATA en un <a>
<c> contenido de c </c>
navegador: Las entidades se <d> contenido de d </d>
Nota: #PCDATA puede ser
substituyen por su valor </a>
“ l” ‘ ’ ‘ ’.
“real”: ‘á’ y ‘&’
Arquitecturas Distribuidas 09/10
una cadena vac&iacute;a.
34
Elementos en DTD XML
Elementos en DTD XML
Ejemplos de fórmulas:
<!ELEMENT a (#PCDATA,
(#PCDATA (b|c),
(b|c) d+,
d+ #PCDATA)>
<a>
Cualquier cadena de texto forma un #PCDATA.
Adem&aacute;s es posible que nos encontremos
Ejemplo 2) #PCDATA puede entidades delimitadas por &amp; y ;.
<b> contenido de b </b>
ser una cadena vacía.
<d> contenidio de d </d>
Cualquier otra cadena de datos.
<a>
<a>
<c> contenido de c </c>
<d> contenido de d </d>
Nota: #PCDATA puede ser una cadena vac&iacute;a.
</a>
Arquitecturas Distribuidas 09/10
35
Elementos en DTD XML
Elementos en DTD XML
Ejemplos de fórmulas:
<!ELEMENT a (#PCDATA,
(#PCDATA (b|c),
(b|c) d+,
d+ #PCDATA)>
<a>
Cualquier cadena de texto forma un #PCDATA.
Adem&aacute;s es posible que nos encontremos
entidades delimitadas por &amp; y ;.
<b> contenido de b </b>
<d> contenidio de d </d> VÁLIDA!
Cualquier otra cadena de datos.
<a>
<a>
</a>
<c> contenido de c </c>
<d> contenido de d </d>
VÁLIDA!
Nota: #PCDATA puede ser una
cadena vac&iacute;a.
Arquitecturas Distribuidas 09/10
36
Atributos en DTD XML
Atributos en DTD XML
y Declaración de los atributos (parámetros):
Nombre del elemento para el N
b d l l
l que se declaran los atributos
<!ATTLIST elemento
atributo1 tipo descripción
atributo2 tipo
p descripción
p
...
>
Indica el comienzo de una nueva lista de atributos
Declaración de parámetros (uno por línea)
Arquitecturas Distribuidas 09/10
37
Atributos en DTD XML
Atributos en DTD XML
Tipos de parámetros:
Nota: De momento no nos fijaremos en la descripción
y Indican los posibles valores que puede contener el atributo:
CDATA (character data: cualquier carácter y ciertas entidades)
<!ATTLIST a
parametro CDATA descripción>
p
p
>
<a parametro="Cualquier cadena con entidades como &amp;"/>
NMTOKEN (named token: una cadena de letras, números o ciertos token: una cadena de letras números o ciertos <!ATTLIST a
símbolos: como el nombre de una variable en Java)
parametro NMTOKEN descripción>
>
<a parametro="Algo_sin_espacios_quizas_con_123456"/>
/
Arquitecturas Distribuidas 09/10
38
Atributos en DTD XML
Atributos en DTD XML
NMTOKENS (named token list: secuencia de NMTOKEN separados por espacios)
<!ATTLIST a
parametro NMTOKENS descripción>
>
<a parametro="Token1 Token2 Token3 ..."/>
ID (unique identifier: identificador que debe ser diferente para cada elemento, misma sintaxis que NMTOKEN)
<!ATTLIST a
parametro ID descripción>
>
<a parametro="1"/>
< parametro="2"/>
<a
t
"2"/>
<a parametro="uno"/>
<a parametro="uno"/>
VÁLIDO!
NO VÁLIDO!
Arquitecturas Distribuidas 09/10
39
Atributos en DTD XML
Atributos en DTD XML
IDREF (identifier reference: identificador único de otro elemento que debe existir en el documento)
<!ATTLIST a
parametro IDREF descripción>
>
<!ATTLIST b
otroparametro ID descripción>
>
<b otroparametro="uno"/>
<a parametro=
parametro="uno"/>
uno />
VÁLIDO!
<b otroparametro=
otroparametro="uno"/>
uno />
<a parametro="otro"/>
NO VÁLIDO
NO VÁLIDO!
Arquitecturas Distribuidas 09/10
40
Atributos en DTD XML
Atributos en DTD XML
IDREFS (identifier reference list: lista de IDREF separados por espacios)
<!ATTLIST a
parametro IDREFS descripción>
>
<!ATTLIST b
otroparametro ID descripción>
>
<!ATTLIST c
otroparametromas ID descripción>
>
<b otroparametro="ID1"/>
<b otroparametro="ID2"/>
<c otroparametro=
otroparametro="ID3"/>
ID3 />
<a parametro="ID1 ID2 ID3 ..."/>
Arquitecturas Distribuidas 09/10
41
Atributos en DTD XML
Atributos en DTD XML
ENTITY (entity name: nombre de una entidad general declarada en el documento)
<!ENTITY unaentidad SYSTEM "foto.png">
p g
Lo o
entenderemos <!ATTLIST a
parametro ENTITY descripción>
mejor al estudiar >
entidades!
<a parametro="unaentidad"/>
ENTITIES (identifier reference list: lista de ENTITY separadas por espacios)
<!ENTITY unaentidad SYSTEM "foto.png">
<!ENTITY otraentidad SYSTEM "foto2.png">
<!ATTLIST a
parametro ENTITIES descripción>
>
<a parametro="unaentidad otraentidad"/>
Arquitecturas Distribuidas 09/10
42
Atributos en DTD XML
Atributos en DTD XML
NOTATION (notation list: lista de NOTATION separados por espacios)
<!NOTATION jpg SYSTEM "/usr/bin/gimp">
/
/
/g p
Lo o
entenderemos <!ATTLIST a
parametro NOTATION descripción>
mejor al estudiar >
notaciones!
<a parametro="jpg"/>
ENUMERACIÓN: Declaración especial (no usa palabra reservada):
( l | l
(valor1 | valor2 | ...)
| )
<!ATTLIST a
parametro (valor1|valor2|...) descripción>
>
<a parametro="valor1"/>
<a parametro="valor2"/>
<a parametro="otrovalornoenumerado"/>
Arquitecturas Distribuidas 09/10
NO VÁLIDO!
Á
43
Atributos en DTD XML
Atributos en DTD XML
Descripción de parámetros:
y Pueden indicar valores por defecto.
p
<!ATTLIST a
color NMTOKEN azul>
>
<a/>
<a color="rojo"/>
<!ATTLIST a
color (azul|rojo) azul>
>
<a color="verde"/>
Arquitecturas Distribuidas 09/10
44
Atributos en DTD XML
Atributos en DTD XML
Descripción de parámetros:
y Pueden indicar valores por defecto.
p
<!ATTLIST a
color NMTOKEN azul>
>
No se indica nada del color, por tanto es <a/>
azul
Se cambia el color a <a color="rojo"/>
rojo
j
<!ATTLIST a
color (azul|rojo) azul>
>
<a color="verde"/>
Definición no válida!
Arquitecturas Distribuidas 09/10
45
Atributos en DTD XML
Atributos en DTD XML
Descripción de parámetros:
y Indican características especiales:
p
#REQUIRED (el usuario debe proporcionar un valor siempre)
#IMPLIED (el parámetro es opcional)
#FIXED (debe aparecer y el usuario no puede alterarlo)
(
)
<!ATTLIST a
identidad ID #REQUIRED>
color (azul|rojo|verde) #IMPLIED>
tipo (antiguo|nuevo) #FIXED nuevo
>
<a identidad="1"/>
<a identidad=
identidad="2"
2 color=
color="verde"/>
verde />
<a color="rojo"/>
<a tipo="antiguo“/>
Arquitecturas Distribuidas 09/10
46
Notaciones en DTD XML
y XML se diseñó principalmente como contenedor
de información de “texto”.
y Hay mucha información representada de modo binario: imágenes, vídeo, audio, etc. y XML posibilita la coexistencia con información binaria, a través del mecanismo de las notaciones.
y Las notaciones son etiquetas especiales que indican al procesador de XML el tipo de la i f
información que está analizando. ió tá li
d Arquitecturas Distribuidas 09/10
47
Notaciones en DTD XML
“Algo” que indique el tipo de notación ÆPROBLEMA PORTABILIDAD
y Declaración:
<!NOTATION nombre (PUBLIC|SYSTEM) identificador>
Indica si el identificador es público o privado
Nombre de la la
notación
Indica el comienzo de un nuevo identificador de notación
Arquitecturas Distribuidas 09/10
48
Notaciones en DTD XML
Notaciones en DTD XML
y Ejemplos de uso:
<!ELEMENT foto EMPTY>
<!ATTLIST foto
fuente NOTATION #REQUIRED
>
<!NOTATION jpeg SYSTEM "image/jpeg">
<!NOTATION png SYSTEM "image/png">
<foto fuente="pepe"/>
<foto fuente="maria"/>
<foto fuente="paco"/>
Arquitecturas Distribuidas 09/10
49
Notaciones en DTD XML
Notaciones en DTD XML
y Ejemplos de uso:
y Notación incluída en parámetros
p
<!ELEMENT programa (#PCDATA)>
<!ATTLIST programa
lenguaje NOTATION (lisp|c) #REQUIRED
>
<!NOTATION lisp SYSTEM "IEEE 1178-1990">
<!NOTATION png SYSTEM "ISO/IEC 9899:1999">
<programa lenguaje="c">
int fact(int n) {
if(n==1) return 1;
return n*fact(n-1);
}
</programa>
<programa lenguaje="lisp">
(defun fact (lambda (n) (if (=n 1) 1 (fact (- n 1)))))
</programa>
Arquitecturas Distribuidas 09/10
50
Notaciones en DTD XML
Notaciones en DTD XML
y Ejemplos de uso:
y Notación incluída en parámetros
p
El qué hacer con cada trozo de código qué ace co cada t o o de cód go
no está determinado (depende de la <!ELEMENT programa (#PCDATA)>
<!ATTLIST programa
aplicación final). Lo importante es lenguaje NOTATION (lisp|c) #REQUIRED
que la Notación los diferencia!
>
<!NOTATION lisp SYSTEM "IEEE 1178-1990">
<!NOTATION png SYSTEM "ISO/IEC 9899:1999">
<programa lenguaje="c">
int fact(int n) {
if(n==1) return 1;
return n*fact(n-1);
}
</programa>
La parte en rojo es #PCDATA
<programa lenguaje="lisp">
(defun fact (lambda (n) (if (=n 1) 1 (fact (- n 1)))))
</programa>
Arquitecturas Distribuidas 09/10
51
Notaciones en DTD XML
y Solución poco portable.
y La asignación
g
de identificadores es arbitraria.
y El procesado final de los datos no está prefijado, esto no es problemático, ya que es una
característica de XML: cada aplicación que lo usa
decide cómo procesar los datos, es decir, interpreta
la semántica de los datos según las marcas.
Arquitecturas Distribuidas 09/10
52
Entidades en DTD XML
Entidades en DTD XML
y Son declaraciones abstractas que pueden usarse para definir otras partes de un documento XML (elementos, atributos, etc). y Una definición menos formal: Son declaraciones especiales que se cambian por trozos de código.
y Analogía con macros en lenguaje C: <!entity CAPACIDAD "200">
#define CAPACIDAD 200
int a=CAPACIDAD;
Arquitecturas Distribuidas 09/10
<p>
La capacidad del sistema es
de &CAPACIDAD; bits por
segundo.
53
Entidades en DTD XML
Entidades en DTD XML
y Según la aplicación, el formato del código y su
ubicación existen
e isten varios
arios tipos de entidades, cada
de entidades cada
una se declara con una sintaxis propia.
Arquitecturas Distribuidas 09/10
54
Entidades en DTD XML
Entidades en DTD XML
y Entidades Genéricas:
<!ENTITY nombre #PCDATA>
y Permiten la substitución de una cadena de texto. Permiten la substitución de una cadena de texto Ejemplo:
<!ENTITY minombre "Pepe Perez">
p Oí g
gritar mi nombre: &minombre;
; </p>
/p
<p>
Arquitecturas Distribuidas 09/10
55
Entidades en DTD XML
Entidades en DTD XML
y Entidades Genéricas:
<!ENTITY nombre #PCDATA>
y Permiten la substitución de una cadena de texto. Permiten la substitución de una cadena de texto Ejemplo:
<!ENTITY minombre "Pepe Perez">
<p> Oí gritar mi nombre: &minombre; </p>
Arquitecturas Distribuidas 09/10
56
Entidades en DTD XML
Entidades en DTD XML
y Entidades externas genéricas:
<!ENTITY nombre (PUBLIC|SYSTEM) URL>
y Permiten la substitución por un texto contenido en una fuente externa. Ejemplo:
<!ENTITY minombre SYSTEM "/home/pepe/minombre.txt">
<p> Oí gritar mi nombre: &minombre; </p>
Arquitecturas Distribuidas 09/10
57
Entidades en DTD XML
Entidades en DTD XML
y Entidades parámetro:
y Las entidades estudiadas hasta ahora ejercían cambios j
en el contenido del XML.
y Las entidades parámetro hacen lo mismo PERO EN EL PROPIO DTD Æ Ver ejemplos a continuación.
Arquitecturas Distribuidas 09/10
58
Entidades en DTD XML
Entidades en DTD XML
y Entidades parámetro:
<!ENTITY
!
% nombre (CDATA)>
y Entidades parámetro externas:
Entidades parámetro e ternas
<!ENTITY % nombre (PUBLIC|SYSTEM) URL>
y Ahora se referencian como:
%nombre;
<--NO COMO &nombre;-->
Arquitecturas Distribuidas 09/10
59
Entidades en DTD XML
Entidades en DTD XML
y Ejemplo:
<!ENTITY % contenidoppal "nombre|apellidos|direccion">
nombre|apellidos|direccion >
<!ENTITY % idattr "id ID #REQUIRED">
<!ELEMENT dni (%contenidoppal, datosnacimiento)>
<!ATTLIST dni
%idattr;
tipodni
(antiguo|nuevo|electonico) #REQUIRED nuevo
>
y Esto es como escribir:
<!ELEMENT dni (nombre|apellidos|direccion, datosnacimiento)>
<!ATTLIST dni
id
ID
#REQUIRED
tipodni
(antiguo|nuevo|electonico) #REQUIRED nuevo
>
Arquitecturas Distribuidas 09/10
60
Instrucciones de Procesado (PI)
en DTD XML
en DTD XML
y Son declaraciones especiales cuyo significado depende del procesador del XML:
<?instruccion (datos)?>
Estan delimitadas por “<?” y “?>”
Arquitecturas Distribuidas 09/10
61
Instrucciones de Procesado (PI)
en DTD XML
en DTD XML
y Los procesadores interpretan sólo aquellas PI que conocen:
<?instruccion (datos)?>
El nombre de la instrucción es cualquier palabra. Los q
p
procesadores del XML ejecutarán PI que reconozcan.
eco o ca .
Arquitecturas Distribuidas 09/10
Los datos son información opcional que se le pasa al procesador.
62
Instrucciones de Procesado
en DTD XML
en DTD XML
y Ejemplo:
<hmtl>
<?php
echo
h "H
"Hola
l mundo
d en PHP!<b
PHP!<br>\n"
>\ "
?>
</ht l>
</html>
La declaración indica que es una orden de PHP. El procesado asociado d
depende del navegador: d d l d Apache interpretará los “datos” como un lenguaje de programación.
IIS pasará esta orden por alto.
Arquitecturas Distribuidas 09/10
63
Instrucciones de Procesado
en DTD XML
en DTD XML
y Ejemplo:
<hmtl>
<?php
echo
h "H
"Hola
l mundo
d en PHP!<b
PHP!<br>\n"
>\ "
?>
</ht l>
</html>
La declaración indica que es una orden de PHP. El procesado asociado d
depende del navegador: d d l d Apache interpretará los “datos” como un lenguaje de programación.
IIS pasará esta orden por alto.
Arquitecturas Distribuidas 09/10
64
Interpretación de un documento XML por un navegador
por un navegador
y El comportamiento final depende del navegador particular:
y Al menos debe informar si el documento está bien formado o no Ejemplo:
formado o no. Ejemplo:
<?xml version="1.0"?>
<a> Hola
<b> Prueba
</a>
</b>
Arquitecturas Distribuidas 09/10
65
Interpretación de un documento XML por un navegador
por un navegador
y El comportamiento final depende del navegador particular:
y Al menos debe informar si el documento está bien formado o no Ejemplo:
formado o no. Ejemplo:
<?xml version="1.0"?>
<a>
<b>
</a>
</b>
Arquitecturas Distribuidas 09/10
66
Interpretación de un documento XML por un navegador
por un navegador
y Ejemplo corregido:
<?xml version="1.0"?>
<a> Hola
<b> Prueba
</b>
</a>
Arquitecturas Distribuidas 09/10
67
Interpretación de un documento XML por un navegador
por un navegador
y Ejemplo corregido:
<?xml version="1.0"?>
<a> Hola
<b> Prueba
</b>
</a>
Si el navegador no sabe interpretar de un modo especial el XML, entonces, simplemente muestra los contenidos de los elementos.
i l
l id d l l
Arquitecturas Distribuidas 09/10
68
Interpretación de un documento XML por un navegador
por un navegador
y Si un documento está especificado por su DTD, el navegador debería comprobar e informar si el XML es o no válido.
Arquitecturas Distribuidas 09/10
69
XHTML
y HTML es muy poco estricto y coherente en cuanto a la definición de las marcas: etiquetas de cierre opcionales, mayúsculas o minúsculas, comillas en los atributos, etc.
,
y XHTML es HTML conforme a las reglas sintácticas de XML
y Documento debe estar bien formado
y XHTML hace que los documento sean más fáciles de procesar por una máquina
Arquitecturas Distribuidas 09/10
70
Arquitecturas Distribuidas 09/10
71
Espacios de nombres
spac os de o b es
y El mecanismo de los espacios de nombres (namespaces) permite combinar en un mismo documento XML definiciones procedentes de varios tipos de documentos.
tipos de documentos
y Un namespace es un grupo de elementos y nombres de atributos Cada grupo (namespace) se puede atributos. Cada grupo (namespace) se puede especificar y validar con su DTD correspondiente.
Arquitecturas Distribuidas 09/10
72
Espacios de nombres
spac os de o b es
y Ejemplo:
XHTML
M thML
MathML
<html>
<equation>
<p>
<mrow>
<a>
<br>
<divide>
<table>
XML
Arquitecturas Distribuidas 09/10
U a egado que e t e da
Un navegador que “entienda” ambos lenguajes, mostrará correctamente este XML.
73
Espacios de nombres
spac
os
de
o
b
es
<?xml version="1.0"?>
<html>
y Ejemplo:
<p> Este documento combina dos lenguajes el XHTML y
XHTML
M thML
MathML
el MathML.
Esto permite cosas <em> muy interesantes </em>.
Por ejemplo, escribir la ecuacion:
</p>
<math>
<html>
<equation>
<mrow> <p>
<mi> a </mi>
<a>
<mo> + </mo>
<mi>
b </mi>
<br>
<mo>
= </mo>
<mi> c </mi>
<table>
</mrow>
/ at
</math>
</html>
<sum>
<int>
XML
Arquitecturas Distribuidas 09/10
U a egado que e t e da
Un navegador que “entienda” ambos lenguajes, mostrará correctamente este XML.
74
Espacios de nombres
spac
os
de
o
b
es
<?xml version="1.0"?>
<html>
y Ejemplo:
<p> Este documento combina dos lenguajes el XHTML y
XHTML
M thML
MathML
el MathML.
Esto permite cosas <em>
muy interesantes </em>.
¿ESTO ES CORRECTO?
Por ejemplo, escribir la ecuación:
NO!, ¿QUÉ SUCEDE SI DOS ELEMENTOS TIENEN EL MISMO NOMBRE EN NO!
QUÉ SUCEDE SI DOS ELEMENTOS TIENEN EL MISMO NOMBRE EN <reln>
<html>
<equation>
<eq/>
DIFERENTES NAMESPACES?
<ci>A</ci>
<p>
<matrix>
<a>
<matrixrow>
<ci>x</ci>
<br>
<ci>y</ci>
</matrixrow>
<table>
<matrixrow>
c
/c
<ci>z</ci>
<ci>w</ci>
</matrixrow>
</matrix>
</reln>
<sum>
<int>
XML
</html>
Arquitecturas Distribuidas 09/10
U a egado que e t e da
Un navegador que “entienda” ambos lenguajes, mostrará correctamente este XML.
75
E
Espacios
i de nombres
d
b
Frutas
Colores
<manzana>
<melocotón>
<uva>
<azul>
<rojo>
<verde>
<naranja>
j
Arquitecturas Distribuidas 09/10
<naranja>
76
Espacios de nombres
spac os Frutas
de o b es
Coloresu
<?xml version="1.0"?>
<manzana>
<manzana/>
...
<verde/>
<melocotón>
...
<uva/>
<azul>
<rojo>
<uva>
<verde>
<naranja/>
<naranja>
j
¿Es un color o una fruta?
Arquitecturas Distribuidas 09/10
<naranja>
77
Espacios de nombres
spac os de o b es
y Para evitar ambigüedades los tag se escriben:
prefijo_del_namespace:nombre_tag
El prefijo indica al interprete cuando p
conmutar de un lenguaje a otro.
g j
Arquitecturas Distribuidas 09/10
78
Espacios de nombres
spac os Frutas
de o b es
Coloresu
<?xml version="1">
<manzana>
<fruta:manzana/>
...
<color:verde/>
<melocotón>
...
<fruta:uva/>
<azul>
<rojo>
<uva>
<verde>
<color:naranja/>
<naranja>
j
Un color!
Arquitecturas Distribuidas 09/10
<naranja>
79
Espacios de nombres
spac os de o b es
y Un namespace debe declararse antes de su uso:
<elemento xmlns:prefijo="URL">
Atributo válido para cualquier elemento. El namespace lo conoceran él y sus descendientes Lo conoceran él y sus descendientes. Lo habitual es declarar los namespace
conocidos en la <raíz>.
<raíz>
Arquitecturas Distribuidas 09/10
80
Espacios de nombres
spac os de o b es
y Un namespace debe declararse antes de su uso:
<elemento xmlns:prefijo="URL">
Prefijo con el que se identificaran los miembros del namespace. Puede ser cualquier palabra.
cualquier palabra
Arquitecturas Distribuidas 09/10
81
Espacios de nombres
spac os de o b es
y Un namespace debe declararse antes de su uso: se declara en el elemento raíz
<elemento xmlns:prefijo="URL">
URL con la definición del namespace: su contenido será un DTD o similar.
DTD o similar
Arquitecturas Distribuidas 09/10
82
Espacios de nombres
spac os de o b es
y Ejemplo:
XHTML
M thML
MathML
<html>
<equation>
<p>
<mrow>
<a>
<br>
<divide>
<table>
XML
VEAMOS LA DEFINICIÓN OS
CÓ
CORRECTA
Arquitecturas Distribuidas 09/10
83
Espacios de nombres
spac
os
de
o
b
es
<?xml version="1.0"?>
<xhtml:html
y Ejemplo:
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:math="http://www.w3.org/1998/Math/MathML“
xmlns:math
http://www.w3.org/1998/Math/MathML
>
XHTML
M thML
MathML
<xhtml:p> Este documento combina dos lenguajes el XHTML
y el MathML.
Esto permite
cosas <xhtml:em> muy interesantes
<html>
<equation>
</xhtml:em>. Por ejemplo, escribir la ecuacion:
</xhtml:p>
<p>
<sum>
<a>
<math:math><br>
<math:mrow>
<math:mi>
<table>
<math:mo>
at :
<math:mi>
<math:mo>
<math:mi>
</math:mrow>
</math:math>
a
+
b
=
c
</math:mi>
</math:mo>
</math:mi>
/ at :
</math:mo>
</math:mi>
<int>
XML
</xhtml:html>
Arquitecturas Distribuidas 09/10
84
Espacios de nombres
spac
os
de
o
b
es
<?xml version="1">
<xhtml:html
y Ejemplo:
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:math="http://www.w3.org/1998/Math/MathML“
xmlns:math
http://www.w3.org/1998/Math/MathML
>
XHTML
M thML
MathML
<xhtml:p> Este documento combina dos lenguajes el XHTML
y el MathML.
Esto permite
cosas <xhtml:em> muy interesantes
<html>
<equation>
</xhtml:em>.
Por ejemplo, escribir
la ecuación:
<p>
<a>
<math:math>
<math:mrow>
<br><math:mi>
<math:mo>
<table>
<math:mi>
at : o
<math:mo>
<math:mi>
</math:mrow>
</math:math>
<sum>
a
+
b
=
c
</math:mi>
</math:mo>
</math:mi>
</math:mo>
/ at : o
</math:mi>
<int>
XML
/
</xhtml:html>
Arquitecturas Distribuidas 09/10
85
Espacios de nombres
spac os de o b es
y Pueden usarse también espacios de nombre “por
defecto :
defecto”:
<elemento xmlns="URL">
Sin prefijo
Arquitecturas Distribuidas 09/10
86
Espacios de nombres
spac os de o b es
y Ejemplo:
<?xml version="1.0"?>
XHTML
M thML
MathML
<xhtml:html xmlns="http://www.w3.org/1999/xhtml">
<p> Este documento combina dos lenguajes el XHTML y el
MathML.
<html>
Esto permite
cosas <em> muy interesantes<equation>
</em>.
Por ejemplo, escribir la ecuacion:
<p>
</p>
<sum>
<a>
<math:math xmlns:math="http://www.w3.org/1998/Math/MathML">
xmlns:math="http://www w3 org/1998/Math/MathML">
<br><math:mi> a </math:mi>
<math:mo> + </math:mo>
<int>
<math:mi> b </math:mi>
<table>
<math:mo> = </math:mo>
<math:mi> c </math:mi>
</math:mrow>
</math:math>
XML
SINTAXIS MÁS COMPACTA
COMPACTA.
</html>
Arquitecturas Distribuidas 09/10
87
XSCHEMA
y XML Schema
y Construcción
C
ió alternativa
l
i a los DTD para
l DTD especificar
ifi
el l formato de un documento XML.
y Un XSCHEMA es
U XSCHEMA en si
i mismo
i
un documento
d
XML XML: ¡usamos XML para definir XML!
Arquitecturas Distribuidas 09/10
88
XSCHEMA
y Ventajas sobre DTD:
y Más legible.
legible
y Permite especificar el tipo de datos
y Permite espeficar lenguajes XML que usen namespaces (con DTD es muy complejo).
y Más posibilidades:
y
y
A nivel de elementos, por ejemplo: con XSCHEMA podemos
indicar que un elemento aparece N veces.
A nivel de atributos, por
de atributos por ejemplo: puede especificarse que un atributo es un número, un dígito binario, etc.
Arquitecturas Distribuidas 09/10
89
XSCHEMA
y Ejemplo. Dado un XML (notas.xml) para definir notas:
<?xml version="1.0"?>
<nota>
<para>Tove</para>
<de>Jani</de>
<asunto>Reminder</asunto>
<mensaje>Don't
j D 't forget
f
t me thi
this weekend!</mensaje>
k d! /
j
</nota>
Arquitecturas Distribuidas 09/10
90
XSCHEMA
y Podemos escribir su DTD (notas.dtd) como:
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
nota (para, de, asunto, mensaje)>
para (#PCDATA)>
de (#PCDATA)>
asunto
t (#PCDATA)>
mensaje (#PCDATA)>
Arquitecturas Distribuidas 09/10
91
XSCHEMA
y La definición alternativa con XSCHEMA sería (notas xsd):
(notas.xsd):
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
p //
g/
/
<xs:element name="note">
<xs:complexType>
<xs:sequence>
yp
g /
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
/
p
yp
</xs:complexType>
</xs:element>
</xs:schema>
Arquitecturas Distribuidas 09/10
92
Lenguajes de estilo y transformación para XML
y XSL:
y Lenguaje para crear hojas de estilo para documentos XML.
y Más complejo que CSS: unos 60 selectores y 250 p j q
y 5
propiedades!!
y XSLT:
y Lenguaje para crear transformaciones en los documentos.
y
XML Æ HTML Æ WML
Æ etc
Cada transformación usa una hoja XSLT diferente.
Arquitecturas Distribuidas 09/10
93
Lenguajes de estilo y transformación para XML
y XPATH:
y Lenguaje que permite identificar partes de un documento (concepto similar a #enlace_interno en URL).
y XPOINTER:
y Lenguaje para definir punteros a puntos o partes de un g j p
p
p
p
documento (concepto similar a URL).
y XLINK
y Mecanismo de hiperenlaces (mas general que las <a> de HTML).
y Puede conectar varios objetos en ambas direcciones.
P d t i bj t b di
i
Arquitecturas Distribuidas 09/10
94
Referencias y bibliografía
y
g
y
Libros:
y
y
“Learning XML”, Erik T. Ray, O’Reilly, 2001.
g
,
y,
y,
Disponible en:
http://labit501.upct.es/ad/libros
Guía rápida:
y
“XML Syntax Quick Reference”, Mulberry Technologies, Inc 2000
Inc., 2000.
Arquitecturas Distribuidas 09/10
95
Referencias y bibliografía
y
g
y
WWW:
y
y
y
y
http://www.w3.org/XML/
p //
3 g/
/ Æ Página principal de g
p
p
desarrollo de la tecnología XML
http://www.w3.org/TR/2004/REC‐xml11‐20040204/
p
g
Æ
Recomendación de XML 1.1
http://www.w3.org/TR/REC‐xml‐names/ Æ Espacios de nombres http://www.w3.org/TR/xsl/ Æ Hojas de estilo en XML
Arquitecturas Distribuidas 09/10
96
Referencias y bibliografía
y
g
y
WWW:
y
y
y
y
http://www.w3.org/XML/
p //
3 g/
/ Æ Página principal de g
p
p
desarrollo de la tecnología XML
http://www.w3.org/TR/2004/REC‐xml11‐20040204/
p
g
Æ
Recomendación de XML 1.1
http://www.w3.org/TR/REC‐xml‐names/ Æ Espacios de nombres http://www.w3.org/TR/xsl/ Æ Hojas de estilo en XML
Arquitecturas Distribuidas 09/10
97
Referencias y bibliografía
y
g
y
Tutoriales:
y
y
http://www.w3schools.com/xml/
p //
3
/
/ Æ Varios tutoriales tecnologías XML
http://www.dat.etsit.upm.es/~abarbero/curso/xml/xml
p
p
tutorial.html Æ Tutorial en español, con bastantes enlaces
Arquitecturas Distribuidas 09/10
98

Documentos relacionados