Arquitectura de la Web y Computación en el Servidor
Introducción a XML: Sintaxis y documentos bien formados
1. Lenguaje XML
Jose Emilio Labra Gayo
Departamento de Informática
Universidad de Oviedo
2. 1970s GML (IBM) – Generalized Markup Language
(Goldfarb, Mosher, Lorie)
1986 SGML Standard Generalized Markup Language
(Estándar ISO)
Intercambio de documentos
Principio: Separar contenido de representación
Muy flexible (permite definir vocabularios específicos
para cada aplicación)
HTML = vocabulario de SGML
Jose Emilio Labra Gayo – Universidad de Oviedo
Charles Goldfarb
SGML
SGML
3. Desarrollado por T. Bray, J. Paoli, C. M. Sperberg-McQueen (1995)
T. Bray: Consultor de Textuality para Netscape (ahora en Sun)
C. M. Sperberg-McQueen (TEI, SGML)
J. Paoli (Microsoft)
Objetivos:
Crear una versión simplificada de SGML para la Web
20% de características de SGML Û 80% de funcionalidad de SGML
20% de características de SGML Û 80% de funcionalidad de SGML
Detalle (Especificación de XML = 26 páginas, de SGML > 500
Detalle (Especificación de XML = 26 páginas, de SGML > 500
Jose Emilio Labra Gayo – Universidad de Oviedo
Tim Bray
XML
4. XML y el comercio electrónico
XML aparece en pleno apogeo del comercio electrónico
Formato que permita transmitir información
semiestructurada
Problema: Dificultad de procesar automáticamente
el lenguaje natural
"…necesito 20 rotuladores RX2 de código R23, que
escriban y 2 grapadoras Lin de código G56 envueltas
para regalo"
"…necesito 20 rotuladores RX2 de código R23, que
escriban y 2 grapadoras Lin de código G56 envueltas
para regalo"
Jose Emilio Labra Gayo – Universidad de Oviedo
5. HTML y la información semiestructurada
HTML es un lenguaje para presentaciones de hipertexto
Las marcas indican únicamente cómo representar el contenido
El sistema no entiende el contenido dentro de las marcas
<html>
<head>
<title>Pedido</title>
</title>
<body>
<h1>Pedido de material</h1>
<table>
<tr><th>Codigo</th><th>Nombre</th><th>Cantidad</th><th>Comentarios</th></tr>
<tr><td>R23</td><td>Rotulador RX2</td><td>20</td><td>Color negro</td></tr>
<tr><td>G56</td><td>Grapadora Lin</td><td>2</td><td>Envuelta para regalo</td></tr>
</table>
</html>
<html>
<head>
<title>Pedido</title>
</title>
<body>
<h1>Pedido de material</h1>
<table>
<tr><th>Codigo</th><th>Nombre</th><th>Cantidad</th><th>Comentarios</th></tr>
<tr><td>R23</td><td>Rotulador RX2</td><td>20</td><td>Color negro</td></tr>
<tr><td>G56</td><td>Grapadora Lin</td><td>2</td><td>Envuelta para regalo</td></tr>
</table>
</html>
Problema: ¿cómo identificar los campos?
Técnicas de Screen scrapping
Problema: ¿cómo identificar los campos?
Técnicas de Screen scrapping
Jose Emilio Labra Gayo – Universidad de Oviedo
6. XML y el comercio electrónico
Las marcas de XML permiten procesar de forma no
ambigüa los documentos
<pedido>
<pedido>
<producto codigo="R23">
<producto codigo="R23">
<nombre>Rotulador RX2</nombre>
<cantidad>20</cantidad>
<comentarios>Comprobad que escriben</comentarios>
<nombre>Rotulador RX2</nombre>
<cantidad>20</cantidad>
<comentarios>Comprobad que escriben</comentarios>
</producto>
<producto codigo="G56">
</producto>
<producto codigo="G56">
<nombre>Grapadora Lin</nombre>
<cantidad>2</cantidad>
<comentarios>Envuelta para regalo</comentarios>
</producto>
<nombre>Grapadora Lin</nombre>
<cantidad>2</cantidad>
<comentarios>Envuelta para regalo</comentarios>
</producto>
</pedido>
</pedido>
Jose Emilio Labra Gayo – Universidad de Oviedo
7. <!DOCTYPE raíz[
…
]>
Jose Emilio Labra Gayo – Universidad de Oviedo
XML
<?xml version=“1.0” ?>
<raíz>
<elemento>
…
</elemento>
</raíz>
Declaración de
XML
Declaración de
Tipo DTD
Opcional
Documento
8. <?xml version=“1.0”
encoding=“iso-8859-1”
standalone=“yes”?>
Jose Emilio Labra Gayo – Universidad de Oviedo
Declaración de XML
<?xml version=“1.0”
encoding=“iso-8859-1”
standalone=“yes”?>
version: Actual = 1.0
También existe la versión 1.1
Mayor compatibilidad con Unicode
Identificadores: Permite cualquier carácter Unicode
encoding: UTF-8, UTF-16, iso-8859-1, etc.
standalone: Indica si se puede gestionar el documento sin
hacer uso de recursos externos
9. Documentos y elementos XML
Los documentos consisten en una serie de datos marcados
mediante etiquetas
Las etiquetas describen la estructura del documento
Un elemento = etiqueta inicial, etiqueta final y contenido entre
ambas.
La etiqueta inicial puede incluir atributos
<etiqueta attributo=“valor”>……</etiqueta>
Distinción
minúsculas/mayúsculas
Jose Emilio Labra Gayo – Universidad de Oviedo
10. Documentos XML
Elementos vacíos
Elementos vacío: elementos que no incluyen información
Habitualmente, incluyen atributos
<etiqueta attributo=“valor”></etiqueta>
Jose Emilio Labra Gayo – Universidad de Oviedo
ß
<etiqueta atributo=“valor”/>
Ejemplo:
<img src="foto.jpg" alt="F <img src="foto.jpg" alt="Foottoo ddee PPaaiissaajjee"" >><<//iimmgg>>
Sintaxis abreviada:
<<iimmgg ssrrcc==""ffoottoo..jjppgg"" aalltt==""FFoottoo ddee PPaaiissaajjee"" //>>
11. <externo>
<interno>texto</interno>
</externo>
...pero no se pueden entrelazar:
<externo>
<interno>texto</externo>
</interno>
Jose Emilio Labra Gayo – Universidad de Oviedo
Anidamiento
Se pueden anidar elementos
<externo>
<interno>texto</interno>
</externo>
<externo>
<interno>texto</externo>
</interno>
12. Árbol del documento XML
<pedido fecha="3/2/2011">
<producto codigo="G23">
<nombre>Grapadora</nombre>
<cantidad>2</cantidad>
<comentarios>
<pedido fecha="3/2/2011">
<producto codigo="G23">
<nombre>Grapadora</nombre>
<cantidad>2</cantidad>
<comentarios>
Contactar con <persona>Juan</persona>
Contactar con <persona>Juan</persona>
</comentarios>
</producto>
<producto codigo="R15">
<nombre>Rotulador</nombre>
<cantidad>10</cantidad>
</producto>
</pedido> pedido
</comentarios>
</producto>
<producto codigo="R15">
<nombre>Rotulador</nombre>
<cantidad>10</cantidad>
</producto>
</pedido>
Raíz
Elemento
fecha producto producto
Jose Emilio Labra Gayo – Universidad de Oviedo
<root>
3/2/2011
Atributo
Texto
codigo nombre cantidad
G23
comentarios
Grapadora 2 Contactar con persona
Juan
codigo nombre cantidad
R15 Rotulador 10
http://software.hixie.ch/utilities/js/live-dom-viewer
13. Dibujar el árbol del siguiente documento HTML
<html>
<head>
<title>Pagina</title></head>
<body>
<h1>Ejemplo</h1>
<p>La <a href="http://www.uniovi.es">
Universidad de Oviedo</a> está en
<em>Asturias</em>
</p>
</body>
</html>
Solución
NOTA: Cualquier documento HTML se puede representar como
un árbol
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejercicio
<html>
<head>
<title>Pagina</title></head>
<body>
<h1>Ejemplo</h1>
<p>La <a href="http://www.uniovi.es">
Universidad de Oviedo</a> está en
<em>Asturias</em>
</p>
</body>
</html>
NOTA: Cualquier documento HTML se puede representar como
un árbol
14. Modificación del árbol
El árbol DOM puede manipularse dinámicamente
<html>
<head>
<title>Prueba</title>
<script type="text/javascript">
function inserta() {
<html>
<head>
<title>Prueba</title>
<script type="text/javascript">
function inserta() {
var nuevo = document.createElement("p");
var saludo = document.createTextNode("¡Hola!");
nuevo.appendChild(saludo);
document.body.appendChild(nuevo);
}
</script>
</head>
<body>
<input type="button" value="Saluda!" onclick="inserta();" />
</body>
</html>
var nuevo = document.createElement("p");
var saludo = document.createTextNode("¡Hola!");
nuevo.appendChild(saludo);
document.body.appendChild(nuevo);
}
</script>
</head>
<body>
<input type="button" value="Saluda!" onclick="inserta();" />
</body>
</html>
http://www.di.uniovi.es/~labra/cursos/XML/ejemplos/CambiaDOM.html
Jose Emilio Labra Gayo – Universidad de Oviedo
15. <poema fecha="Abril de 1915" lugar="Granada">
. . .
</poema>
<autor frase="Juan dijo 'Hola' ">
. . .
</autor> <autor frase='Juan dijo "Hola" '>
Jose Emilio Labra Gayo – Universidad de Oviedo
Atributos
Cada elemento puede contener atributos en la etiqueta inicial
<poema fecha="Abril de 1915" lugar="Granada">
. . .
</poema>
El orden de los atributos no es significativo
No puede haber 2 atributos con el mismo nombre
Las comillas dobles y simples pueden mezclarse
<autor frase="Juan dijo 'Hola' ">
. . .
</autor>
<autor frase='Juan dijo "Hola" '>
. . .
</autor>
. . .
</autor>
16. Atributos predefinidos
xml:lang especifica el idioma. Ejemplo: en (inglés), es (español)
xml:space especifica cómo tratar el espacio en blanco.
preserve = Mantenerlo
default = Permitir a la aplicación que lo trate como quiera.
xml:base: Especifica URL de base en las referencias relativas
<doc xml:base=“http://www.ejemplo.org”>
<link url=“friends.xml”>Amigos</link>
</doc>
<doc xml:base=“http://www.ejemplo.org”>
<link url=“friends.xml”>Amigos</link>
</doc>
xmlns:a Declara a como un alias para un espacio de nombres
Jose Emilio Labra Gayo – Universidad de Oviedo
17. <poema fecha="Abril de 1915"
Jose Emilio Labra Gayo – Universidad de Oviedo
Comentarios
Mediante <!-- y -->
<poema fecha="Abril de 1915"
lugar="Granada">
<!-- Este poema es divertido -->
<titulo>Alba</titulo>
<verso>Mi corazón oprimido</verso>
<!-- Cuando me inspire escribiré
más versos -->
</poema>
lugar="Granada">
<!-- Este poema es divertido -->
<titulo>Alba</titulo>
<verso>Mi corazón oprimido</verso>
<!-- Cuando me inspire escribiré
más versos -->
</poema>
NOTA: Dentro de los comentarios no NOTA: Dentro de los comentarios no ppuueeddeenn a appaarerecceer rd dooss c caararacctetereress - -s seegguuididooss
18. Caracteres especiales
Mediante &#nº; se puede incluir un carácter Unicode
Ejemplo: ∀ incluye "
&nombre; permite referenciar macros (se definen en una DTD)
Algunas macros predefinidas
< <
> >
" “
' ‘
& &
Para incluir los caracteres especiales, se utilizan las macros
<código>
if x < 4 then x:=x + 1;
</código>
Jose Emilio Labra Gayo – Universidad de Oviedo
< <
> >
" “
' ‘
& &
<código>
if x < 4 then x:=x + 1;
</código>
19. Secciones CDATA
Las secciones CDATA permiten escribir texto literal que no será
procesado
<código>
<código>
if x < 3 && x > 4 then
if x < 3 && x > 4 then
</código>
<código>
if x < 3
&& x > 4 then
print "Hola"
</código>
Jose Emilio Labra Gayo – Universidad de Oviedo
print “Hola”
print “Hola”
</código>
<código>
<![CDATA[
if x < 3 && x > 4 then
<código>
<![CDATA[
if x < 3 && x > 4 then
print “Hola”
]]>
</código>
print “Hola”
]]>
</código>
<código>
if x < 3
&& x > 4 then
print "Hola"
</código>
20. Instrucciones de Procesamiento
Indican alguna acción a realizar por una aplicación externa
Si el procesador reconoce la aplicación externa le pasa los datos
Si no la reconoce, se ignora
Formato:
<?aplicación datos ?>
Se usan para asociar una hoja de estilos al documento:
<?xml-stylesheet type="text/xsl" href=“hoja.xsl"?>
...o para otros propósitos especiales
<?php ... ?>
La declaración inicial podría considerarse una instrucción de procesamiento
<?xml version="1.0" ?>
Jose Emilio Labra Gayo – Universidad de Oviedo
21. Documento bien formado
Documento bien formado
Sigue las reglas sintácticas
Importante:
Contiene un único elemento raíz
Todas las etiquetas están correctamente anidadas
<pizzas>
<pizza nombre="Margarita" precio="6">
<ingrediente nombre="Tomate" />
<ingrediente nombre="Queso" />
</pizza>
</pizzas>
<pizzas>
<pizza nombre="Margarita" precio="6">
<ingrediente nombre="Tomate" />
<ingrediente nombre="Queso" />
</pizza>
</pizzas>
Jose Emilio Labra Gayo – Universidad de Oviedo
<pizzas>
<pizza nombre="Margarita"
precio="6">
<pizzas>
<pizza nombre="Margarita"
precio="6">
<ingrediente nombre="Tomate" >
<ingrediente nombre="Tomate" >
</pizzas>
</pizzas>
22. <?xml version="1.0"?>
<!DOCTYPE poema SYSTEM "poema.dtd">
<poema fecha="Abril de 1915"
<?xml version="1.0"?>
<!DOCTYPE poema SYSTEM "poema.dtd">
<poema fecha="Abril de 1915"
lugar="Granada">
lugar="Granada">
<titulo>Alba</titulo>
<titulo>Alba</titulo>
ppooeemmaa..ddttdd
<!ELEMENT poema (titulo,verso*)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT verso (#PCDATA)>
<!ATTLIST poema fecha CDATA #REQUIRED
<!ELEMENT poema (titulo,verso*)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT verso (#PCDATA)>
<!ATTLIST poema fecha CDATA #REQUIRED
<verso>Mi corazón oprimido</verso>
<verso>siente junto a la alborada</verso>
<verso>el dolor de sus amores</verso>
<verso>y el sueño de las distancias.</verso>
</poema>
<verso>Mi corazón oprimido</verso>
<verso>siente junto a la alborada</verso>
<verso>el dolor de sus amores</verso>
<verso>y el sueño de las distancias.</verso>
</poema>
Jose Emilio Labra Gayo – Universidad de Oviedo
Documento válido
Se puede incluir una declaración del tipo de documento
Documento válido
lugar CDATA #IMPLIED>
lugar CDATA #IMPLIED>
Está bien formado y
La estructura encaja con la declaración del tipo de documento
23. Fin de la Presentación
Jose Emilio Labra Gayo – Universidad de Oviedo