URI (Identificadores únicos de recursos)
Ejemplo: http://www.uniovi.es
urn:isbn:0-395-36341-1
<html>
<head><title>Poema</title>
</head>
<body lang="es">
<h1>Alba</h1>
<h2>Abril de 1915 </h2>
<h2>Granada</h2>
<p>Mi corazon
oprimido</p>
<p>siente junto a
la alborada</p>
</body>
</html>
<poema fecha="Abril 1915"
lugar="Granada">
<titulo>Alba</titulo>
<verso>Mi corazon
oprimido</verso>
<verso>siente junto a
la alborada</verso>
<verso>el dolor de sus
amores...</verso>
</poema>
Ambos documentos tienen una sintaxis común
<?xml version="1.0" ?>
<!DOCTYPE poema
SYSTEM "poema.dtd">
<poema fecha="Abril 1915"
lugar="Granada">
<titulo>Alba</titulo>
<verso>Mi corazon
oprimido</verso>
<verso>siente junto a
la alborada</verso>
<verso>el dolor de sus
amores...</verso>
</poema>
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
version
indica la versión.
encoding
indica codificación de caracteres
UTF-8
= caracteres Unicodeiso-8859-1
= caracteres latinosstandalone
yes
indica que puede haber declaraciones externasno
indica que no hay dichas declaraciones
<etiqueta atrib1="valor1" atrib2="valor2" ...>
...contenidos...
</etiqueta>
<etiqueta atrib1="valor1" atrib2="valor2" ...>
</etiqueta>
Un elemento vacío puede simplificarse como:
<etiqueta atrib1="valor1" atrib2="valor2" ... />
Las etiquetas que se abran deben cerrarse sin que se produzcan anidamientos
<externo>
<interno>
texto
</interno>
</externo>
<externo>
<interno>
texto
</externo>
</interno>
Cada documento XML puede representarse como un árbol
<poema fecha="Abril 1915"
lugar="Granada">
<titulo>Alba</titulo>
<verso>Mi corazon
oprimido</verso>
<verso>siente junto a
la alborada</verso>
<verso>el dolor de sus
amores...</verso>
</poema>
Dibujar el árbol DOM para el siguiente documento
<html>
<head><title>Pagina</title></head>
<body>
<h1>Ejemplo</h1>
<p>Este texto tiene un
<a href="http://www.uniovi.es">enlace</a>
y un texto <em>enfatizado</em></p>
</body>
</html>
<poema fecha="Abril 1915"
lugar="Granada">
...
</poema>
xml:lang
especifica el código del idioma:
en
(inglés), sp
(español), etc.xml:space
especifica cómo tratar el
espacio en blanco:
preserve
= mantenerlodefault
= dejar libertar a la aplicación
para tratarlo como quieraLos comentarios indican porciones del documento que no serán analizadas por el procesador
Comienzan por <--
y finalizan por -->
<!-- Este poema requiere
comentarios -->
<poema>
<titulo>La fealdad</titulo>
<!-- No hay versos -->
</poema>
Dentro de los comentarios no
pueden aparecer los caracteres --
Existen 5 caracteres especiales:
&
lt;
= <
&
gt;
= >
&
amp;
=
&
&
quot;
= "
&
apos;
= '
Cualquier carácter Unicode puede indicarse
mediante
&
seguido del número y acabado por ;
Suelen utilizarse para incluir porciones de texto sin analizar. Por ejemplo código fuente
<codigo>
if (x < 3 &&
x > 4)
printf("Hola");
</codigo>
<codigo>
<![CDATA[
if (x < 3 && x > 4)
printf("Hola");
]]>
</codigo>
Permiten indicar al procesador que ejecute una aplicación externa
Formato:
<?aplicación ...datos... ?>
Los tipos de aplicaciones externas no están definidos
Algunos ejemplos:
<?xml version='1.0' ?>
<?xsl-stylesheet type='text/xsl' href='...' ?>
<?php ... ?>
Un documento XML está bien formado si cumple las reglas anteriores
Una condición básica para trabajar con un documento XML es que esté bien formado
<poema
fecha="Abril 1915"
lugar="Granada">
<!DOCTYPE poema
SYSTEM "poema.dtd">
<titulo>Alba</titulo>
<verso>Mi corazon
oprimido</verso>
<verso>siente junto a
la alborada</verso>
<verso>el dolor de sus
amores...</verso>
</poema>
<!ELEMENT poema
(titulo,verso*)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT verso (#PCDATA)>
<!ATTLIST poema
fecha CDATA #REQUIRED
lugar CDATA #IMPLIED>
Las DTDs pueden definirse dentro del documento XML
<!DOCTYPE poema [
<!ELEMENT poema (titulo,verso*)>
. . .
]>
<poema>. . . </poema>
También pueden residir en otro documento:
<!DOCTYPE poema SYSTEM "poema.dtd">
<poema>. . . </poema>
Algunas DTDs pueden tener identificadores públicos
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
ELEMENT
= elementos del documentoATTLIST
= lista de atributos de un elementoENTITY
= entidades (similares a las macros)NOTATION
= permite definir otros tipos de contenidos,
facilitando la inclusión de formatos binariosSe utiliza un modelo basado en expresiones regulares
?
= 0,1 elemento*
= 0 ó más elementos+
= 1 ó más elementos|
= alternativa,
= secuenciaEMPTY
= vacíoANY
= cualquier cosa#PCDATA
= texto
<!ELEMENT poema (titulo,
autor?,
verso* ) >
<!ELEMENT libro ( poema
| prosa) >
<!ELEMENT autor EMPTY>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT sec (titulo,
(p | sec+))
>
<p>Este texto tiene un
<a href="ref.html">enlace</a>
y algo <em>enfatizado</em>
</p>
La validación puede realizarse mediante:
<!ELEMENT p (#PCDATA | a | em )* >
<!ELEMENT a (#PCDATA)>
<!ELEMENT em (#PCDATA)>
#REQUIRED
obligatorio#IMPLIED
opcional#FIXED
fijoValor
= valor por defecto
<!ATTLIST poema fecha CDATA #REQUIRED
lugar CDATA #IMPLIED>
ID
representa un atributo
cuyo valor debe ser único en todo el documentoIDREF
representa un atributo
cuyo valor debe coincidir con el de otro atributo
del documento
<!ATTLIST autor codigo ID #REQUIRED>
<!ATTLIST autorPremiado codigo IDREF #REQUIRED>
. . .
<autor codigo="A21">...</autor>
<autor codigo="A45">...</autor>
...
<autorPremiado codigo="A45" />
Permiten definir macros
<!ENTITY clarin
"<autor codigo="23">Leopoldo Alas Clarin</autor>">
. . .
<libro>
<titulo>La Regenta</titulo>
&clarin;
</libro>
equivale a:
<libro>
<titulo>La Regenta</titulo>
<autor codigo="23">Leopoldo Alas Clarin</autor>
</libro>
Permiten incluir documentos externos en el documento actual
<!DOCTYPE libros [
<!ENTITY autores SYSTEM "autores.xml">
<!ENTITY editoriales SYSTEM "editoriales.xml">
]>
<libros>
&autores;
&editoriales;
</libros>
Permiten crear macros dentro de las definiciones de las DTDs
<!ELEMENT % localizacion (calle,numero?,ciudad, pais,codigoPostal)>
<!ELEMENT autor (nombre,apellidos,%localizacion;)>
<!ELEMENT editorial (nombre,cif,%localizacion;)>
Permiten incluir otras DTDs en una DTD
<!ELEMENT % autores SYSTEM "autores.dtd" >
<!ELEMENT % editoriales SYSTEM "editoriales.dtd" >
%autores;
%editoriales;
El problema de la homonimia
<pais nombre="Francia">
<capital>Paris</capital>
</pais>
<inversion>
<capital>7000</capital>
</inversion>
¿Cómo juntarlo todo en un mismo documento?
<inversiones>
<pais nombre="Francia">
<capital>Paris</capital>
<capital>1200</capital>
</pais>
. . .
</inversiones>
<[http://www.bolsa.com]:inversiones>
<[http://www.geog.es]:pais
[http://www.geog.es]:nombre="Francia">
<[http://www.geog.es]:capital>Paris
</[http://www.geog.es]:capital>
<[http://www.bolsa.com]:capital>1200
</[http://www.bolsa.com]:capital>
</[http://www.bolsa.com]:pais>
. . .
</[http://www.bolsa.com]:inversiones>
xmlns:alias="...URI..."
<b:inversiones xmlns:b="http://www.bolsa.com"
xmlns:geo="http://www.geo.es">
<geo:pais geo:nombre="Francia">
<geo:capital>Paris<geo:capital>
<b:capital>1200</b:capital>
</geo:pais>
. . .
</b:inversiones>
<b:inversiones xmlns:b="http://www.bolsa.com">
<geo:pais xmlns:geo="http://www.geo.es"
geo:nombre="Francia">
<geo:capital>Paris<geo:capital>
<b:capital>1200</b:capital>
</geo:pais>
. . .
</b:inversiones>
xmlns="...URI..."
<inversiones xmlns="http://www.bolsa.com">
<geo:pais xmlns:geo="http://www.geo.es"
geo:nombre="Francia">
<geo:capital>Paris<geo:capital>
<capital>1200</capital>
</geo:pais>
. . .
</inversiones>
http://www.w3.org/1999/xhtml
: XHTMLhttp://www.w3.org/1999/XSL/Transform
: XSLThttp://www.w3.org/2000/svg
: SVGhttp://www.w3.org/1999/xlink
: XLinkhttp://www.w3.org/1999/xlink
: XLinkhttp://www.w3.org/1999/02/22-rdf-syntax-ns#
: RDFhttp://purl.org/dc/elements/1.1/
: Dublin Corehttp://www.w3.org/2005/Atom
: Formato Atom
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xlink="http://www.w3.org/1999/xlink">
<head>
<title>HTML + SVG</title>
</head>
<body>
<h1>Una imagen</h1>
<svg xmlns="http://www.w3.org/2000/svg"
width="300" height="200">
<a xlink:href="http://www.uniovi.es">
<circle cx="150" cy="100" r="50" />
</a>
</svg>
</body>
</html>
Los espacios de nombres fueron posteriores a los DTDs
De todas formas, es posible realizar la validación
<!DOCTYPE inversiones [
<!ELEMENT inversiones (g:pais*)>
<!ELEMENT g:pais (g:capital,capital) >
<!ELEMENT g:capital (#PCDATA)>
<!ELEMENT capital (#PCDATA)>
<!ATTLIST inversiones
xmlns CDATA #FIXED "http://www.bolsa.com">
<!ATTLIST g:pais
g:nombre CDATA #REQUIRED
xmlns:g CDATA #FIXED "http://www.geog.es">
]>