XML: estándar para la estructuración e intercambio de
documentos
Jaime Villate.
Universidad de Porto, Portugal
[email protected]
9 de febrero de 2002
1.
Introducción
Esta presentación está prevista para una hora, y será seguida por una sesión práctica donde
construiremos algunos documentos XML que serán transformados con XSLT.
2. El lenguaje de marcas XML
XML = Extensible Markup Language
Estándar abierto y libre del consorcio W3C (http://www.w3.org) propuesto en 1996; primera
versión: 1998. Muy utilizado actualmente.
Un documento XML puede ser estructurado en forma jerárquica.
3. Ventajas del XML
Se puede obligar a los autores a seguir un patrón determinado.
Puede guiar los autores a través del proceso de escritura.
Simplifica la tarea de extraer información automáticamente.
Un único documento fuente puede dar origen a varios otros formatos.
Permite separar contenido y forma de presentación.
Una mayor uniformidad entre documentos con el mismo DTD.
Más explícito y simple que el SGML, facilitando su análisis.
La Espiral - XML: estándar para la estructuración e intercambio de documentos
2
Figura 1: Algunos de los elementos del DTD DocBook v. 4.
4. Conceptos básicos de XML
Simbolos especiales: < > ”’ & (<, >, ", ', &).
Etiquetas (tags) y elementos: <p>nombre</p>
Atributos (Attributes): <elemento atributo=”texto.otro=”texto”>
Elementos vacíos: <nada></nada> or simply <nada />
5. Definición del Tipo de Documento, DTD
DTD = Document Type Definition
Ejemplo:
<!DOCTYPE xbel PUBLIC
"+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
"http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
Un DTD define una o más estructuras jerárquicas, con un elemento raíz, ancestros, hermanos
y descendientes.
6. Estructura Jerárquica de un DTD
7. Documentos Válidos
Documento XML válido: especifica el DTD usado y se ajusta a sus reglas sintácticas.
Document conforme: cumple las reglas sintácticas de XML, pero no sigue ningún DTD en
particular.
La Espiral - XML: estándar para la estructuración e intercambio de documentos
3
8. Ficheros XML
Los ficheros XML son ficheros de texto. Pueden tener en la primera línea una instrucción de
procesamiento que lo identifica como XML, y pode tener una etiqueta que define el DTD usado:
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE article PUBLIC "-//laespiral.org//DTD LE-document 4.0//EN"
"LE-document-4.0.dtd" >
<article>
Texto del artículo.
</article>
9. Ejemplo
El siguiente documento XML incluye su propio DTD:
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE directorio[
<!ELEMENT directorio (nombre, relacion, telefono+)>
<!ATTLIST directorio actualizado CDATA #IMPLIED>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT relacion (#PCDATA)>
<!ELEMENT telefono (#PCDATA)>
]>
<directorio actualizado="8/2/2002">
<nombre>Alberto Perez</nombre>
<relacion>Jefe</relacion>
<telefono>45690343 (trabajo)</telefono>
<telefono>29511350 (casa)</telefono>
</directorio>
10. DocBook XML
Versión XML de un DTD muy usado para escribir libros, artículos y otros documentos,
especialmente documentación técnica (ver: http://www.docbook.org).
Lanzado en 1991 por “HaL Computer Systems” y “O’Reilly”.
Ha sido adoptado por varios proyectos de documentación de GNU/Linux.
Originalmente escrito en SGML, ya está disponible en formato XML (versión 4.1.2).
Existen páginas de estilo disponibles para producir HTML, TeX (usando Jade) y otros for-
matos.
La Espiral - XML: estándar para la estructuración e intercambio de documentos
4
11. Versión simplificada de DocBook
La complejidad del DTD de DocBook (muchos elementos y relaciones entre ellos), hace que
sea difícil para un autor sin experiencia saber que elementos debe usar. El DTD de La Espiral es
una versión simplificada de DocBook con los siguientes objetivos:
Simplificar la estructura jerárquica, haciéndola más fácil de seguir en un documento.
Facilitar la creación de páginas de estilo para transformar los documentos.
Usar XSLT para generar documentos LaTeX bien estructurados, faciles de modificar y que
puedan ser procesados o con latex o con pdflatex (sin usar Jade).
(DTD y páginas de estilo disponibles en: http://www.laespiral.org/xml/styles/ y paquete De-
bian le-docxml)
12. Lenguaje de transformación XSLT
XSLT = Extensible Style-sheet Language Transformation.
Una página XSLT es también un documento XML; por ejemplo:
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1"/>
</xsl:stylesheet>
13. plantillas XSLT
Especifican lo que se imprime cuando aparezca un determinado elemento.
<xsl:template match="itemizedlist">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
En este caso cada vez que aparezca <itemizedlist> ... </itemizedlist>, su contenido será es-
crito dentro de las marcas <ul> y </ul> y se le aplicará recusivamente cualquier otra plantilla
que exista, o la propia plantilla, si existe otro elemento <itemizedlist> dentro de su contenido.
La Espiral - XML: estándar para la estructuración e intercambio de documentos
5
14. Selección de elementos y atributos en XSLT
/chapter Un elemento llamado chapter, en la raíz.
chapter Un elemento chapter dentro del elemento actual.
chapter/section Un elemento sección, hijo directo de un elemento chapter dentro del elemento
actual.
chapter/section[2 ]
El segundo hijo section del elemento chapter.
chapter//paragraph Cualquier elemento paragraph, descendiente en cualquier grado de un ele-
mento chapter dentro del elemento actual.
//paragraph Cualquier elemento paragraph dentro del documento.
chapter[@$title ]
Un elemento chapter que tenga un atributo title.
15. Uso de XML en Debian GNU/Linux
Editores de XML (Emacs + psgml, gtux, etc).
Herramientas para mantener el catálogo SGML/XML.
Analizadores sintácticos de XML/XSLT.
Bibliotecas para procesar XML: DOM y SAX
16. El catálogo XML.
En el fichero /etc/sgml/catalog se identifican los DTD disponibles y su ubicación
dentro del sistema de ficheros. Por ejemplo, una sección dice.
-- DocBook driver file .................................................. --
PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "docbookx.dtd"
La Espiral - XML: estándar para la estructuración e intercambio de documentos
6
17. Analizadores sintácticos de XML
Pueden verificar si un documento es válido o no y extraer algunos elementos o atributos.
nsgmls
rxp
xerces
muchos más.
18. Analizadores de XML/XSLT
Además de analizar XML, pueden también aplicar las transformaciones XSLT de una página
de estilo.
Sablotron (sabcmd) (http://www.gingerall.cz/ga/Sablot-0-52.html)
Libxslt (xsltproc; proyecto GNOME) (http://www.xmlsoft.org/)
Xalan (xalan en Java y C++; proyecto Apache) (http://xml.apache.org/)
Cocoon (servlet del proyecto Apache) (http://xml.apache.org/)
19. Bibliotecas para procesar XML
DOM (Document Object Model) Lee el documento completo, permitiendo navegar su estruc-
tura jerárquica. Adecuado para aplicaciones de “cliente”, tales como editores de XML.
SAX (Standard API for XML) Procesa el documento secuencialmente, ejecutando determina-
dos procedimientos cuando aparezca alguna etiqueta. Adecuado para aplicaciones de “servi-
dor”, tales como transformación de XML usando páginas de estilo XSLT.
20. Base de datos de documentos XML
Colaboradores ocasionales de La Espiral pueden escribir documentos cortos (recetas), usando
una interfaz web. Esos documentos usan un DTD propio ( http://www.laespiral.org/recetas/).
Los ficheros XML se almacenan en el repositorio CVS del proyecto, donde pueden ser actu-
alizados por los editores y alimentados a una base de datos SQL usada para clasificarlos.
Una parte del código perl usado para procesar los documentos, es la siguiente:
La Espiral - XML: estándar para la estructuración e intercambio de documentos
7
sub updatedb
{
use DBI;
use XML::DOM;
my ($id,$file) = @_;
my $bd = ’laespiral’;
my $dbmaster = ’villate’;
my $mydb = DBI->connect("dbi:Pg:dbname=$bd",$dbmaster,’’)
or return "Data base unaccessible \n$DBI::errstr\n";
my $sql = $mydb->prepare(q{update recipes set title=?, author=?, }
. q{date=?, contents=? where id=?});
my $parser = new XML::DOM::Parser;
my $doc = $parser->parsefile ($file);
my $title = &extract($doc->getElementsByTagName ("title"));
my $author = &extract($doc->getElementsByTagName ("author"));
my $date = &extract($doc->getElementsByTagName ("date"));
my $contents = &extract($doc->getElementsByTagName ("contents"));
$sql->execute($title,$author,$date,$contents,$id)
or return "recipes::updatedb: Could not update recipe $id\n"
. "$DBI::errstr\n";
$mydb->disconnect;
return "The recipes database has been updated.\n";
}
sub extract
{
my (@elements) = @_;
my $element = $elements[0]->toString;
$element =˜ s/ˆ[ˆ>]*>\n?//;
$element =˜ s/\n?\s*<[ˆ<]*$//;
return $element;
}
Comentarios de: XML: estándar para la estructuración e intercambio de documentos (0)
No hay comentarios