graphic with four colored squares

XML

Jose Emilio Labra Gayo

Octubre 2006

Contenidos

XMLJose Emilio Labra GayoOctubre 2006

Arquitectura de la Web

Architecture of Semantic Web

Unicode y URIs

Unicode

URI

URI (Identificadores únicos de recursos)

XML

XML


<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

Partes de un documento XML

Ejemplo de fichero XML

<?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>

Declaración XML


<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>    

Cuerpo del documento XML

Formato de elemento

<etiqueta atrib1="valor1" atrib2="valor2" ...>
 ...contenidos...
 </etiqueta>

Elementos vacíos

Elemento vacío sin simplificar

<etiqueta atrib1="valor1" atrib2="valor2" ...>
</etiqueta>

Un elemento vacío puede simplificarse como:

Elemento vacío simplificado

<etiqueta atrib1="valor1" atrib2="valor2" ... />

Anidamiento

Las etiquetas que se abran deben cerrarse sin que se produzcan anidamientos

Correcto

<externo>
  <interno>
    texto
  </interno>
</externo>
Incorrecto

<externo>
  <interno>
    texto
  </externo>
</interno>

XML tiene estructura de árbol

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>
Árbol documento XML

Arbol XML

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>
 

Atributos


<poema fecha="Abril 1915" 
       lugar="Granada">
 ...
</poema>

Comentarios

Los 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 --

Caracteres especiales

Existen 5 caracteres especiales:

Cualquier carácter Unicode puede indicarse mediante & seguido del número y acabado por ;

Secciones CDATA

Suelen utilizarse para incluir porciones de texto sin analizar. Por ejemplo código fuente

Ejemplo sin CDATA
<codigo>
if (x &lt; 3 &amp;&amp; 
    x &gt; 4) 
 printf(&quot;Hola&quot;);
</codigo>
Ejemplo sin CDATA
<codigo>
<![CDATA[
if (x < 3 && x > 4) 
 printf("Hola");
]]>
</codigo> 

Instrucciones de Procesamiento

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:

Documento bien formado

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

Validación

Validación mediante DTDs

Ejemplo XML con DTD

<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>
Ejemplo de DTD

<!ELEMENT poema 
           (titulo,verso*)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT verso (#PCDATA)>
<!ATTLIST poema 
     fecha CDATA #REQUIRED
     lugar CDATA #IMPLIED>           

DTDs internas vs externas

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">

Tipos de declaraciones

Modelo de contenido de elementos

Se utiliza un modelo basado en expresiones regulares


<!ELEMENT poema  (titulo,
                  autor?,
                  verso* ) >
<!ELEMENT libro  ( poema 
                 | prosa) >
<!ELEMENT autor  EMPTY>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT sec    (titulo, 
                 (p | sec+))
                 >

Modelo de contenido mixto

 
<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)>
 
 

Atributos


<!ATTLIST poema fecha CDATA #REQUIRED
                lugar CDATA #IMPLIED>

Valores ID e IDREF


<!ATTLIST autor         codigo ID #REQUIRED>
<!ATTLIST autorPremiado codigo IDREF #REQUIRED>
. . .

<autor codigo="A21">...</autor>
<autor codigo="A45">...</autor>
...
<autorPremiado codigo="A45" />

Entidades generales

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>

Entidades externas

Permiten incluir documentos externos en el documento actual

<!DOCTYPE libros [
<!ENTITY autores     SYSTEM "autores.xml">
<!ENTITY editoriales SYSTEM "editoriales.xml">
]>
<libros>
 &autores;
 &editoriales;
</libros>

Entidades parámetro

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;)>

Entidades parámetro externas

Permiten incluir otras DTDs en una DTD

<!ELEMENT % autores     SYSTEM "autores.dtd" >
<!ELEMENT % editoriales SYSTEM "editoriales.dtd" >

%autores;
%editoriales;

Espacios de nombres

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>

Espacios de Nombres

Representación conceptual de Espacio de nombres
<[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>

Sintaxis de Espacio de nombres

Espacio de nombres
<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>

Sintaxis de Espacio de nombres

Espacio de nombres
<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>

Sintaxis de Espacio de nombres

Espacio de nombres
<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>

Algunos espacios de nombres populares

Combinación de Espacios de nombres

Ejemplo de combinación

<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>

Validación de Espacios de nombres con DTDs

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">
]>

Contenidos