Introducción a XML

Claudio Bustos

Se garantiza el permiso para copiar, distribuir y modificar este documento según los términos de la GNU Free Documentation License, Version 1.2 o cualquiera posterior publicada por la Free Software Foundation, sin secciones invariantes ni textos de cubierta delantera o trasera. Una copia de esta licencia se encuentra en Apéndice B, GNU Free Documentation License

2004


Tabla de contenidos

Introducción
Justificación
Público objetivo
Objetivos
1. Fundamentos de XML
Los lenguajes de marcado
SGML
HTML
Justificación de XML
Qué es XML
Especificación W3C
Aplicaciones más comunes para el uso de XML
Ventajas de XML
2. Construcción de documentos XML y DTD
Estructura de un documento XML
Encabezado
Cuerpo de un documento XML
Documentos XML válidos: uso de DTD
Elemento DOCTYPE
Estructura de un documento DTD
3. Lenguajes derivados de XML
XHTML
Diferencias entre HTML y XHTML
La Familia de de Lenguajes de Estilos Extensible: XSL
Usos de XSL
XPath
XSLT
XSL-FO
Docbook
Uso de Docbook
Estructura de un documento Docbook
Esquema básico del manual
4. Tecnologías asociadas a XML
Procesadores o Parsers
SAX
DOM
Navegadores
Internet Explorer
Mozilla - Firefox
Editores de XML
Procesadores de texto adaptados a XML
Editores específicos de XML
Herramientas auxiliares
Validadores de XML
Herramientas XSL
A. Instalación de jEdit
B. GNU Free Documentation License
PREAMBLE
APPLICABILITY AND DEFINITIONS
VERBATIM COPYING
COPYING IN QUANTITY
MODIFICATIONS
COMBINING DOCUMENTS
COLLECTIONS OF DOCUMENTS
AGGREGATION WITH INDEPENDENT WORKS
TRANSLATION
TERMINATION
FUTURE REVISIONS OF THIS LICENSE
ADDENDUM: How to use this License for your documents
Glosario

Lista de figuras

3.1. Diagrama de publicación de documentos Docbook
4.1. Parser tipo SAX
4.2. Parser tipo DOM
4.3. Documento XML en Internet Explorer, sin CSS y con CSS
4.4. Documento XML en Firefox, sin CSS y con CSS

Lista de tablas

2.1. Entidades predefinidas
2.2. Tipo de atributo para ATTLIST
2.3. Valores por defecto para ATTLIST
3.1. Expresiones más comunes utilizadas en XPath
3.2. DOCTYPE para identificadores públicos
4.1. Funcionalidades deseables en un editor de texto XML
4.2. Lista de editores gráficos XML

Lista de ejemplos

1.1. Código HTML
2.1. Cuerpo XML
2.2. Uso correcto e incorrecto del elemento raíz
2.3. Uso de comentarios
2.4. Uso de CDATA
2.5. Referencia externa a DTD
2.6. Referencia interna a DTD
2.7. Uso de ATTLIST
2.8. Uso de entidades para definir atributos
3.1. Estructura básica de un documento XSLT
3.2. Uso de XSLT

Introducción

Justificación

La rápida evolución de la Red ha tenido como pilar fundamental el lenguaje de marcado HTML. La demanda creciente por nuevas funciones llevó a que los distintos fabricantes de herramientas para Internet diseñaran extensiones propietarias que resultaron en la incompatibilidad del código HTML entre navegadores.

Para solucionar esto, la organización a cargo del HTML, la W3C, desarrollo un nuevo entorno de programación para reemplazar al HTML, el cual tiene como centro el XML o Lenguaje Extensible de Marcado, por sus siglas en inglés. Tal como su nombre lo indica, su principal diferencia con el antiguo HTML es que le entrega al desarrollador la posibilidad de configurar los documentos de acuerdo a sus preferencias y necesidades, garantizando la compatibilidad de este código entre distintas herramientas, al ser sus especificaciones estándares de dominio público.

Público objetivo

  • Usuarios con experiencia el manejo de sistemas operativos (Windows, Linux), procesadores de texto e Internet.

  • Deseable conocimiento de HTML

Objetivos

  • Conocer el origen de XML y su relación con otros lenguajes de marcado como HTML

  • Comprender que es XML, a partir de las especificaciones W3C

  • Evaluar en que situaciones es recomendable utilizar XML, conocimiento sus ventajas y limitaciones

  • Construir documentos XML válidos y bien formados, de acuerdo a una especificación DTD

  • Conocer los fundamentos básicos de los lenguajes XHTML, XSL y Docbook

  • Comprender el funcionamiento de los procesadores de XML de tipo SAX y DOM

  • Conocer tecnologías relacionadas al uso de XML: editores, validadores, API para distintos lenguajes, navegadores, etc.

Capítulo 1. Fundamentos de XML

Los lenguajes de marcado

Históricamente, el término marcado hace referencia al proceso de hacer marcas en los manuscritos con instrucciones para el uso de determinados tipos de tamaños y tipos de fuentes, espaciado, intendación, etc.

El marcado de documentos electrónicos tuvo en un sus inicios la misma intención, describir solamente el formato del texto. Sin embargo, en los años 70, surgió el concepto de separar la presentación del contenido del texto, esto es, definiendo de modo preciso la estructura lógica de un documento dado, es posible implementar diversas formas de presentarlo, además de ser facilitar su indexación, la generación de vistas selectivas, etc. Es así que en el año 1974, Charles F. Goldfarb, liderando un grupo de trabajo de la IBM, da a conocer los primeros bocetos del lenguaje SGML, el antecesor de los lenguajes de marcado descriptivos usados en la actualidad.

Habiendo establecido este pequeño marco histórico, es posible definir los dos grandes tipos de lenguajes de marcado:

Lenguajes descriptivos

Son aquellos que entregan información sobre la estructura lógica de un documento, indicando a que tipo de elemento pertenece cada porción de texto. A los lenguajes de marcado descriptivo que permiten crear otros lenguajes, se les denomina meta-lenguajes, por ejemplo, XML y SGML

Lenguajes procedimentales

Son aquellos que especifican la presentación del texto, es decir, el tipo y tamaños de fuente, márgenes, colores, etc.

SGML

El Lenguage de Marcado Generalizado Estandar o SGML (Standard Generalized Markup Language) es un estándar que determina cómo especificar un lenguaje de marcado de documentos o un conjunto de etiquetas. SGML en sí no es un lenguaje, sino una descripción de como especificar uno; en otras palabras, en un metalenguaje.

Una aplicación o lenguaje derivado de SGML contiene los siguientes elementos

La declaración SGML

Especifica que caracteres y delimitadores pueden aparecer en una aplicación

La definición de tipo de documento(DTD).

La DTD define la sintaxis de los constructos de marcado. Un DTD puede incluir definiciones adicionales como entidades definidas por números o nombres

Especificación semántica

Describe la semántica que está adherida al marcado. Impone restricciones sintácticas que no pueden ser expresadas por el DTD

Documentos

Instancias concretas, que contienen datos y marcado. Poseen una referencia al DTD

La definición de cada uno de estos elementos escapa al objetivo de este curso. Sin embargo, varios de ellos serán analizados cuando se presenten los lenguajes HTML y XML.

HTML

HTML es un lenguaje de marcado, derivado de SGML, cuyo objetivo es servir como lenguaje de publicación en la WWW. Su nombre es el acrónimo de Lenguaje de Marcado de Hipertexto (HiperText Markup Language), en inglés

HTML le permite a los autores:

  • Publicar documentos en línea con encabezados, textos, tablas, listas, fotos, etc.

  • Recuperar información a través de hipervínculos, a través de un click en un botón

  • Diseñar formularios para el envío de información a servicios remotos

  • Incluir diversos tipos de aplicaciones dentro del documento principal, como archivos de audio, video, etc.

El lenguaje HTML se ubica en una categoría intermedia entre los lenguajes de marcado descriptivo y procedimentales, ya que incluye tanto etiquetas estructurales (encabezados, parráfos, citas, etc), como etiquetas de formato (negrita, cursiva, saltos de línea, etc).

Ejemplo 1.1. Código HTML


<html>
    <head>
        <title>Este es el titulo</title>
    </head>
    <body>
    </body>
    <h1>Este es un encabezado</h1>
    <p>Este es un párrafo</p>
    <p>Este es un párrafo, también, pero ahora viene un salto de línea
    <br />
    Etiquetas de formato: <b>negrita</b>, <i>cursiva</i>, y <u>subrayado</u>
    <p>Otro párrafo
    </body>
</html>

      

Justificación de XML

Si bien HTML ha tenido un inmenso éxito como lenguaje de publicación en la WWW, con el tiempo las siempre crecientes necesidades hicieron patentes sus deficiencias y limites

  • Mezcla marcado estructural y de presentación: si bien HTML nació principalmente como lenguaje de marcado descriptivo, dirigido a la publicación de contenidos técnicos, la expansión de la red y el acceso de usuarios de diversa índole produjo la necesidad, por parte de los desarrolladores, de tener un mayor control sobre la apariencia de los sitios. Esto redundó en un uso inadecuado de las etiquetas estructurales con fines decorativos y la proliferación desordenada de etiquetas de presentación.

  • Dificultad de procesamiento computacional: la especificación HTML permite el uso de variadas abreviaciones en el marcado y es bastante permisiva con errores en éste, lo cual implica un gran esfuerzo de los desarrolladores de software para crear programas que procesen de modo adecuado este lenguaje.

  • Problemas de internacionalización: La especificación para el uso de caractéres no occidentales en HTML, si bien es bastante clara, fue ignorada por muchos desarrolladores de navegadores, lo que llevó a importantes inconvenientes en la visualización de documentos en idiomas foráneos, especialmente asiáticos

  • Intepretación ambigua: a partir de la permisividad de la especificación, la mezcla de etiquetas de marcado y estructura y el uso inapropiado de las primeras con usos estéticos, es bastante lógico entender porque distintos navegadores presentan diversas versiones del mismo documento. Todo esto, además, implica que la posibilidad de obtener información semántica significativa sobre un documento (por ejemplo, cuales son los nombres de las secciones), sea prácticamente imposible

  • Uso especifíco para Web: El HTML fue diseñado expresamente para su uso en la web. Ld facilidad para crear documentos ha impulsado su uso en otros ámbitos, lo que ha hecho aún más patente sus limitaciones para, por ejemplo, almacenar información de manera ordenada y sistemática que sea susceptible de análisis computacional.

Esta y otras razones impulsaron al W3C a crear una nueva especificación, pero esta vez no sobre un lenguaje especifico, sino sobre una forma de diseñar nuevos lenguajes y los procedimientos para analizarlos, que fuesen compatibles con las características de la WWW, pero que no limitase a ésta. Este es el objetivo que dio origen al Lenguaje de Marcado Extensible, XML

Qué es XML

Según la propia W3C, XML es un formato de texto simple y flexible derivado de SGML. Su desarrolló comenzó en el año 1996, y fue adoptado como estándar en Febrero de 1998.

En primera instancia, se orientó a satisfacer las necesidades de publicación electrónica no satisfechas por HTML. En la actualidad, ha tomado un importante rol como formato estándar para el intercambio de datos en la Web y en otros contextos.

XML no es un lenguaje de marcado, como HTML, sino un metalenguaje que permite definir otros lenguajes de marcado para usos especificos. Esto quiere decir que es nuestra aplicación específica la que debe encargarse de reconocer los contenidos incluidos dentro del documento XML para, por ejemplo, presentarlos. No existe nada dentro de la especificación que señale cómo debe presentarse o procesarse el contenido del documento.

Especificación W3C

Nota

El contenido de esta sección es altamente técnico, y muchos de los conceptos aquí presentados son explicados y ejemplificados más adelante. Por tanto, puede omitirse su lectura en una primera instancia.

Según la W3C, XML es un subconjunto de SGML, cuyo objetivo es permitir la entrega, recepción y procesamiento de documentos SGML en la Web, más allá de las capacidades de HTML.

El lenguaje XML describe una clase de documentos, los documentos XML, y define de forma parcial el comportamiento de los programas computacionales que los procesan. A estos últimos se les denomina procesadores (parsers) de XML

Los documentos XML están compuestos de unidades de almacenamiento denominadas entidades, que contienen datos procesables y no procesables. Los datos procesables están compuestos de carácteres, algunos de los cuales pasan a ser datos de carácteres (CDATA) y otros marcado. El marcado describe la estructura lógica del documento.

Los objetivos del diseño de XML son:

  • Uso directo en Internet

  • Permitir una gran variedad de aplicaciones

  • Compatibilidad con SGML

  • Facilidad para desarrollar programas que procesen XML

  • Número de carácterísticas opcionales reducidas al mínimo

  • Documentos legibles para los humanos, con una relativa claridad

  • Diseño de documentos rápido, formal y conciso

  • Facilidad de creación de documentos XML

  • Formato de las etiquetas es de mínima importancia

Definición de documento XML

Un documento XML es aquel que cumple con las características de un documento bien formado, de acuerdo a la especificación W3C.

Los documentos XML tienen una estructura física y lógica. Físicamente, los documentos XML están compuestos de entidades. Una entidad puede hacer referencia a otras entidades, lo que causará la inclusión de estas en el documento. Un documento comienza con un elemento raíz. La estructura lógica del documento está compuesta por declaraciones, elementos, comentarios, referencia a caracteres e instrucciones de proceso, las cuales son indicadas en el texto por marcado explícito. La estructura lógica y física debe presentar una jerarquía adecuada.

Definición de procesador de XML (parser)

Un procesador o parser de XML es un módulo de software que lee documentos XML y provee acceso a su contenido y estructura. Se entiende que este módulo actúa en favor de otro módulo, llamado aplicación.

Los procesadores XML se dividen en dos clases: validadores y no validadores. Ambos tipos de procesadores deben dar cuenta de cual falla formal del documento XML que procesa. Los procesadores validadores deben, además, deben reportar cualquier violación a las restricciones impuestas a la estructura por un DTD o un XML Schema.

Aplicaciones más comunes para el uso de XML

Ventajas de XML

Entre las ventajas más importantes de XML se encuentran

  • Es fácilmente procesable por humanos como por software: la posibilidad de escribir la etiquetas de acuerdo a los propios requerimientos hace que la lectura humana de un documento XML sea bastante fácil. Además, la serie de imposiciones sobre la sintaxis del documento implica una gran facilidad para procesar los documentos, a diferencia del HTML u otros derivados de SGML.

  • Promueve la separación de presentación y contenido: el uso de tecnologías como el CSS y el XSLT permiten omitir cualquier tipo de marcado de presentación en el documento, permitiendo que un determinado contenido pueda ser presentado de muchas formas posibles e, incluso, en formatos de archivo distintos (PDF, RTF, XLS). Lo mismo ocurre, pero a la inversa: esto es, se puede usar la misma plantilla de presentación para mostrar los más diversos contenidos.

  • Diseñado para ser usado en cualquier idioma: La adopción del estándar UTF-8 permite el uso de XML en cualquier idioma conocido

  • Es particularmente adecuado para la transmisión de información a través de la WWW: Al ser XML una tecnología adaptada a la red, fácilmente procesable por software y que permite establecer estándares de modo fácil y claro, resulta particularmente indicada para la transmisión de datos entre diversos actores en la red, especialmente las realizadas entre negocios.

  • Fácil análisis sintáctico por lo estricto de las regulaciones de composición de documentos, lo que posibilita la creación de poderosas herramientas de extracción de datos.

Capítulo 2. Construcción de documentos XML y DTD

Estructura de un documento XML

Los documentos XML tienen una estructura fija, compuesta de dos partes, el encabezado y el cuerpo. En el encabezado se especifican las caracteristicas del documento en sí, como la versión de XML a la cual pertenece, la especificación de la estructura al cual debe adherir, etc. En el cuerpo se incluyen la información propiamente tal y está compuesto por distintos elementos.

Cómo se señalo en la sección “Definición de documento XML”,el documento se divide en marcado y los datos de caracteres (CDATA). El marcado corresponde a las instrucciones que el parser de XML debe procesar. Las marcas o 'tags' se reconocen porque comienzan con el carácter ">" y terminan con el carácter "<"; la única excepción son las referencia a entidades, que comienzan con el carácter "&"; y terminan con el carácter ";". Los datos de caracteres, por su parte, corresponden a todo lo que no es marcado y forma el texto del documento.

Encabezado

Instrucción <?XML ?>

Todos los documentos XML deben comenzar con un encabezado, que en su forma más simple se presenta como:

       <?xml ?>
      

Ahora bien, este codigo no será aceptado por ningún procesador de XML, ya que se requiere siempre la identificación de la versión de XML a la cual pertenece el documento. Para ello, agregamos el atributo version.

       <?xml version="1.0" ?>
      

Como vemos, un atributo se define escribiendo el nombre de la variable (en este caso 'version'), un signo igual = y el valor de la variable, entre comillas simples o dobles

El encabezado puede tener otros dos atributos, los cuales por lo general son omitidos. El primero es encoding, el cual determina el tipo de codificación del documento, importante para la interpretación de los carácteres según la lengua, lo cual es especialmente importante en lenguajes como el japonés. Los conjuntos más utilizados para el lenguaje español son el ISO-8859-1 y el UTF-8. El segundo atributo es standalone, el cual indica si se necesita un documento externo (DTD o XML Schema) para definir la estructura del documento; puede adoptar los valores yes o no

       <?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
      

Si bien el encabezado puede contener más objetos, para la comprensión cabal de éstos es necesario entender, primero, cual es la composición del cuerpo de un documento XML. Por tanto, la descripción de los elementos faltantes se realizará en secciones posteriores

Cuerpo de un documento XML

El cuerpo de un documento XML está formado por el contenido en sí del documento, el cual se divide en texto y marcado. El marcado, a su vez, se divide en elementos, atributos, comentarios, referencia a entidades e instrucciones de proceso. A continuación, presentamos un ejemplo típico de cuerpo XML

Ejemplo 2.1. Cuerpo XML


<libro>
  <titulo>Mi libro</libro>
  <prefacio />
    <capitulos>
        <capitulo id="cap_1">
            <titulo>Capitulo 1</titulo>
        </capitulo>
        <capitulo id="cap_2">
            <titulo>Capitulo 2</titulo>
        </capitulo>
    </capitulos>
</libro>
      

Elementos

Los elementos son los objetos esenciales de un documento XML. Los elementos pueden contener otros tipos de objetos, incluyendo a otros elementos. Como vemos en el ejemplo, los elementos se definen con dos etiquetas (tags), la primera señalando el inicio del elemento, con la nomenclatura <nombre> y la segunda señalando el término, de la forma </nombre>.

Si bien en HTML se puede omitir la etiqueta de cierre, en XML eso no es posible. Si se desea señalar que un elemento está vacío, se puede utilizar la forma abreviada <nombre />. Además, es importante mantener la correcta anidación de los elementos, o sea, que la etiqueta de cierre de un elemento no se encuentre después del cierre del elemento que lo contiene.

Por último, es necesario destacar que un documento XML debe poseer un elemento, el cual es denominado raíz, que contenga a todos los otros

Ejemplo 2.2. Uso correcto e incorrecto del elemento raíz

Uso correcto
<?xml version="1.0" ?>
<libro>
    <titulo>Este es el titulo</titulo>
</libro>

        
Uso incorrecto
<?xml version="1.0" ?>
<libro>
    <titulo>Este es el titulo</titulo>
</libro>
<libro>
    <titulo>Este es el titulo del segundo libro</titulo>
</libro>

        

Atributos

Los elementos son la unidad básica del XML y es posible utilizar sólo este tipo de objetos para definir un documento, pero si tenemos una situación como la siguiente


<inventario>
  <item>
      <tipo>computador</tipo>
      <id>50</id>
      <marca>HP</marca>
      <modelo>5100</modelo>
      <descripcion>Descripcion HP 5100</descripcion>
  </item>
  <item>
      <tipo>computador</tipo>
      <id>60</id>
      <marca>HP</marca>
      <modelo>6100</modelo>
      <descripcion>Descripcion HP 6100</descripcion>
  </item>
</invetario>
      

es bastante obvio que los elementos tipo o id son carácteristicas del item, más que objetos o entes propiamente tales. Para este y otros casos, W3C definió los atributos, que son objetos que definen las propiedades de un elemento dado. El formato de un atributo es

 nombre_atributo = "valor_atributo" 

, permitiéndose el uso de comillas simples o dobles alrededor del valor del atributo. Nuestro código anterior quedaría, entonces, del siguiente modo:


<inventario>
  <item tipo="computador" id="50" marcar="HP" modelo="5100">
   Descripcion HP 5100
  </item>
  <item tipo="computador" id="60" marcar="HP" modelo="6100">
    Descripcion HP 6100</descripcion>
  </item>
</inventario>
      

Comentarios

Muchas veces, especialmente si el codigo crece mucho, es necesario colocar algún tipo de aviso dentro del documento para recordar para que se servía un determinado elemento, o para documentar la falta de un datos, etc. Para esos casos, se pueden agregar comentarios dentro del código, los cuales no serán considerados por el procesador de XML. Este objeto tiene la estructura

<!-- Aquí va el comentario --> 

Ejemplo 2.3. Uso de comentarios


<libro>
  <!-- Debo agregar el codigo ISDN, porque aun no lo encuentro -->
  <isdn></isdn>
  <!--- y también debo cambiar el nombre.... -->
  <nombre>Nombre Falso</nombre>
</libro>

        

Texto y entidades

Cómo se habrá percatado por los ejemplos anteriores, dentro de los elementos se puede incluir o no texto. Es importante considerar que a diferencia de HTML, se considera relevante todo carácter de espacio que se utilice. Por ejemplo:

<item>Nombre</item>

es considerado distinto a

<item>
Nombre
</item>

y el procesador de XML debe tomar en cuenta ese hecho, para eliminar los espacios o los saltos de línea, si es necesario.

Otro factor a considerar es que, dependiendo del procesador y de la codificación utilizada, existen ciertos carácteres que no pueden ser ingresados tal cual, como los signos <, & >. Para ello, existen dos alternativas:

Referencia a Entidades

Las referencias a entidades son objetos que representan a otros. Poseen la estructura:

&nombre_entidad;

Por ejemplo, el signo < es representado por la entidad &lt;. Existen 5 entidades predefinidas en XML, existiendo la posibilidad por parte del usuario de crear las que considere necesarias. (Ver Tabla 2.1, “Entidades predefinidas”)

CDATA

Si bien utilizar entidades es el método por excelencia para hacer referencia a carácteres no posibles de escribir directamente, en ocasiones resulta poco práctico, como cuando se requiere escribir código fuente. En este caso, seria deseable una instrucción para desactivar el procesamiento, lo cual también sería deseable en el caso de que el procesador eliminase los espacios y se desease mantenerlos. La instrucción para ello es CDATA y tiene la estructura

<![CDATA[ texto_sin_procesar ]]>

Ejemplo 2.4. Uso de CDATA


<codigo>
<!-- El siguiente texto no será procesado -->
    <![CDATA[
  // Ejemplo de código JavaScript
  for(var x=0;x<10;x++) {
      y+=x;
  }
  ]]>
</codigo>

Tabla 2.1. Entidades predefinidas

EntidadReemplaza aNombre
&lt;<Menos que
&gt;>Mayor que
&amp;&Ampersand
&apos;'Comilla simple
&quot;"Comilla doble

Documentos XML válidos: uso de DTD

Si escribimos un documento XML con las reglas expuestas en las dos secciones anteriores sin cometer errores, estaremos en presencia de un documento bien formado. Ahora bien, generalmente esto no basta para crear una aplicación, ya que debemos limitar en mayor o menor medida el tipo de datos a ingresar. Por ejemplo, si tenemos una aplicación de guía teléfonica, un marcado como el siguiente sería, por decir lo menos, inútil


<?xml version="1.0" ?>
<directorio>
    <persona>
        <nombre>Juan</nombre>
        <apellido_paterno>Perez</apellido_paterno>
        <apellido_paterno>Salgado</apellido_paterno>
        <apellido_paterno>Muñoz</apellido_paterno>
        <color_pelo>Negro</color_pelo>
        <persona><nombre>Segunda personalidad</nombre></persona>
        </persona>
</directorio>

      

Como se puede observar, si bien el documento está bien formado, ya que el marcado está escrito correctamente, cuenta sólo con un elemento raíz y contiene carácteres presentes en la codificación pre-establecida, presenta evidentes errores lógicos. Es evidente que no existen personas con más dos apellidos y que una persona no puede estar contenida dentro de otra ni es una característica de ella.

Debe existir alguna forma de especificar restricciones sintácticas al marcado para definir su estructura, o sea, que objetos se aceptarán en el documento, en que cantidad y en que orden. El documento que se encarga de realizar esta especificación se llama Documento de Definición de Tipo (DTD, por sus sigla en inglés).

Esta descripción permite que cada XML porte una descripción de su propia estructura. Además, grupos independientes pueden acordar el uso de un DTD común para intercambiar datos y verificar que los documentos propios como ajenos tengan la estructura adecuada, o sea, sean válidos.

Con lo expuesto anteriormente, es tiempo de definir los conceptos de documento válidos y documento bien formado.

Documento bien formado

Es aquel que responde a las características de un documento XML tal como la especifica la recomendación W3C, no existiendo limitaciones sobre el número o tipo de contenidos. Esto implica, entre otras cosas:

  • Ocupar sólo carácteres aceptados por la codificación del documento, la cual fue definida en el atributo encoding del encabezado

  • La estructura de elementos es estrictamente jerárquica: existe sólo un elemento raíz y todos los tags están correctamente anidados, no existiendo superposiciones de elementos.

  • Los nombres de elementos están compuestos por letras, números y los signos -_.:, siendo importante la presencia o no de caracteres con mayúscula.

  • Los valores de los atributos van cerrados entre comillas simples o dobles

Documento válido

Es aquel que, estando bien formado, respeta las restricciones establecidas por una definición externa, correspondienta ésta a un documento DTD o XML Schema, en cuanto a los elementos y atributos aceptados, su cantidad y en el orden en el cual pueden aparecer.

Elemento DOCTYPE

Como vimos, un documento válido debe debe hacer a una definición del tipo, cantidad y orden de los contenidos considerados pertinentes. Si bien existen dos especificaciones para realizar esta labor, DTD y XML Schema, explicaremos el uso de la primera de estas forma, ya que es la más antigua y común.

La referencia de un DTD se realiza por medio del elemento DOCTYPE, el cual ubica en el encabezado del documento, a continuación de la instrucción <?XML ?>. Dependiendo de la ubicación del DTD, el elemento DOCTYPE adoptará dos formas

Referencia externa

La definición del documento DTD se encuentra en un archivo distinto al XML.

Ejemplo 2.5. Referencia externa a DTD


<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
<!DOCTYPE libro SYSTEM "libro.dtd" >
<libro />
      

Como vemos, después de <DOCTYPE se incluye el nombre del elemento raiz (libro, en nuestro caso), el término SYSTEM, que indica que se debe acceder a un archivo local o remoto, y el nombre del archivo, que en este caso es libro.dtd

Referencia interna

La definición del DTD se encuentra dentro del mismo documento.

Ejemplo 2.6. Referencia interna a DTD


<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<!DOCTYPE libro [
  <!ELEMENT libro EMPTY >
]>
<libro />
      

En este ejemplo, después de <DOCTYPE se incluye el nombre del elemento raiz (libro) y se ubica el texto del DTD entre corchetes ([ y ])

En la sección sobre el encabezado del documento XML, se nombró la existencia del atributo standalone. Con los datos anteriormente expuestos, es fácil entender que un standalone = "yes" quiere decir que el documento no tiene un DTD o este se incluye directamente en el encabezado. La referencia externa, en cambio, determina un valor de standalone = "no"

Estructura de un documento DTD

La forma en la cual se puede organizar un documento DTD es bastante libre. Es conveniente, eso sí, seguir el orden en el cual deben presentarse los objetos en el documento XML, definiendo primero los objetos que aparecen primero y/o que pueden ser incluidos en varios otros elementos, con sus respectivos atributos, para luego definir el resto de los elementos

Elementos

La definición de los elementos presenta la siguiente sintaxis básica

<!ELEMENT nombre-elemento categoría>

o

<!ELEMENT nombre-elemento (contenido-elemento)>
          

La primera nomenclatura se utiliza para asignar a un elemento una de las categorías genéricas (ANY o (EMPTY) . La segunda, cuando se quiere definir de forma exacta el tipo y orden de elementos que puede incluir el elemento en cuestión

Sintaxis básica para definir elementos en DTD

ANY

Indica que el elemento puede contener cualquier tipo de contenido

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE cualquier_cosa [
  <!ELEMENT cualquier_cosa ANY >
  <!ELEMENT parrafo ANY >
]>
<cualquier_cosa>
<parrafo>Esto es un parrafo</parrafo>
Fuera de parrafo
</cualquier_cosa>
EMPTY

Indica que el elemento no puede contener nada, o que es lo mismo, que es un elemento vacío

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE vacio [
  <!ELEMENT vacio EMPTY >
]>
<vacio />
Secuencia de elementos

Se define cual va a ser el orden y número de elementos permitidos. No se puede agregar otro contenido, aparte del definido.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE secuencia [
  <!ELEMENT secuencia (primero,segundo,tercero) >
  <!ELEMENT primero EMPTY>
  <!ELEMENT segundo EMPTY>
  <!ELEMENT tercero EMPTY>
  ]>
<secuencia>
<primero />
<segundo />
<tercero />
</secuencia>
Datos de carácter

El elemento sólo contiene datos de carácter, y no elementos en su interior. Se representa por la expresión #PCDATA

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE solo_texto [
  <!ELEMENT solo_texto (#PCDATA) >
  ]>
<solo_texto>
Este elemento sólo permite ingresar texto, nada más.
</solo_texto>

Sintaxis para definir orden y cantidad de elementos en un DTD

Un sólo elemento
<!ELEMENT nota (mensaje)>

El elemento mensaje debe presentarse una vez dentro del elemento nota

Dos o más elementos en una secuencia definida
<!ELEMENT persona (nombres, apellido_paterno,
apellido_materno)>

El elemento persona debe contener los elementos nombres, apellido_paterno y apellido_materno, en ese mismo orden

Presencia de una o más apariciones del mismo elemento
<!ELEMENT jauria (perro+)>

El elemento jauría debe contener uno o más elementos perro

Presencia de cero o más apariciones del mismo elemento
<!ELEMENT persona (hijo*)>

El elemento hijo puede presentarse 0, 1 o más veces dentro del elemento persona.

Presencia de cero o una aparición del mismo elemento
<!ELEMENT persona (apendice?)>

El elemento apendice puede estar 1 vez o no estar dentro del elemento persona

Presencia de elementos alternativos
<!ELEMENT vivienda (casa|departamento|mediagua)>

El elemento vivienda puede contener uno de los siguientes elementos: casa,departamento o mediagua.

Presencia de contenido mezclado
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE mensaje[
  <!ELEMENT mensaje (#PCDATA|negrita|cursiva)*>
  <!ELEMENT negrita (#PCDATA|cursiva)* >
  <!ELEMENT cursiva (#PCDATA) >
]>
<mensaje>
Este texto contiene texto libre,
<negrita>negritas</negrita>,
<cursiva>cursiva</cursiva> y
<negrita><cursiva>ambos</cursiva></negrita>
</mensaje>

Se puede tener datos de carácter y elementos mezclados dentro de un elemento padre, pero en la definición deben señalarse como elementos alternativos (uso de |), y en modo * (0 o más elementos aceptados).

Uso de paréntesis
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE libro[
  <!ELEMENT libro ((titulo?,titulo_breve?)?,
            introduccion?,
            (capitulo|seccion)*,
            glosario?) >
  <!ELEMENT titulo ANY >
  <!ELEMENT titulo_breve ANY >
  <!ELEMENT introduccion ANY >
  <!ELEMENT seccion ANY >
  <!ELEMENT capitulo ANY >
  <!ELEMENT glosario ANY >
]>
<libro>
<titulo></titulo>
<titulo_breve></titulo_breve>
<capitulo />
<seccion />
<seccion />
<capitulo />
<capitulo />
<glosario>
</glosario>
</libro>

Se pueden agrupar distintas expresiones entre paréntesis, para lograr detallados ajustes de orden y cantidad. En el ejemplo, tenemos que existe una definición basada en orden de 4 elementos, siendo el primero y el tercero agrupaciones.

En la primera agrupación, vemos que se puede tener 0 o 1 titulo y a continuación 0 o 1 titulo_breve, y todo esto puede o no estar antes de la introduccion.

En la tercera agrupación, se ha establecido que se pueden tener 0 o más elementos de capitulo o seccion entre la introducción y el glosario.

Atributos

Los atributos de los elementos son declarados a través de una instrucción ATTLIST

<!ATTLIST nombre-elemento nombre-atributo
 tipo-atributo valor-preestablecido>

Tabla 2.2. Tipo de atributo para ATTLIST

ValorExplicación
CDATAEl valor contiene datos de carácter.
Atributos enumerados (en1|en2|..)El valor del atributo corresponde a algunos de los enumerados en la lista
IDEl valor debe ser un ID único
IDREFEl valor debe corresponder a un ID ya existente
IDREFSEl valor es una lista ID ya existententes, separados por espacios
NMTOKENEl valor es un nombre XML válido
NMTOKENSEl valor es una lista de nombre XML válidos, separados por espacios
ENTITYEl valor es una entidad
ENTITIESEl valor es una lista de entidades, separadas por espacios
NOTATIONEl valor es el nombre de una notación
xml:El valor es un valor predefinido de xml

Tabla 2.3. Valores por defecto para ATTLIST

ValorExplicación
valorEl valor por defecto para el atributo
#REQUIREDEl atributo debe ser incluido en el elemento
#IMPLIEDEl atributo no debe ser incluido
#FIXED valorEl valor del atributo es fijo. No tiene mucha utilidad, excepto cuando se altera una DTD para fijar un valor que antes era variable.

Por ejemplo, si tenemos el elemento persona, podemos incluir el atributo nacionalidad. Si quisiesemos aceptar cualquier valor literal para esta variable, y fuese obligatario incluirla, su definición sería

<!ATTLIST persona nacionalidad CDATA #REQUIRED >

Si sólo aceptaramos personas de nacionalidad chilena y argentina, siendo mayor el número de chilenos, podríamos definir el atributo con una enumeración, dejando como valor por defecto 'chilena'

<!ATTLIST persona nacionalidad (chilena|argentina) "chilena" > 

Cómo realizar una explicación de cada posibilidad sería bastante tedioso, así que a continuación se presentará un ejemplo comentado, que muestra las formas más usuales de definir atributos. Este ejemplo introduce, además, el uso de un DTD externo para validad un documento XML.

Ejemplo 2.7. Uso de ATTLIST

catalogo.dtd

<!ELEMENT catalogo (categoria|libro|autor)+ >
  <!ELEMENT categoria (#PCDATA) >
  <!ELEMENT autor (#PCDATA) >
  <!ELEMENT libro EMPTY >
    <!ATTLIST categoria categoria_id ID #REQUIRED >        (1)(6)
    <!ATTLIST autor id ID #REQUIRED >                      (1)(6)
    <!ATTLIST autor iniciales CDATA #IMPLIED>              (2)(7)
    <!ATTLIST libro id ID #REQUIRED >                      (1)(6)
    <!ATTLIST libro categoria_id IDREFS "general" >        (4)(8)
    <!ATTLIST libro id IDREF #IMPLIED >                    (3)(7)
    <!ATTLIST libro estado                                 (5)(8)
              (intacto|dañado|robado|prestado)
              "intacto">
    
1

Tipo de atributo: ID. El valor de este atributo para el documento debe ser único.

2

Tipo de atributo: CDATA. Se puede ingresar cualquier dato de carácter, o sea, texto que no sea marcado

3

Tipo de atributo: IDREF. El valor del atributo debe corresponder un ID ya especificado.

4

Tipo de atributo: IDREFS. El valor del atributo debe corresponder a uno o más IDs ya especificados, separados por espacios.

5

Tipo de atributo: enumeración. El valor del atributo debe corresponder a alguno de los especificados en la lista.

6

Valor por defecto: #REQUIRED. Se requiere ingresar un valor para el atributo

7

Valor por defecto: #IMPLIED. No se requiere ingresar un valor para el atributo

8

Valor por defecto específico. Si no se ingresa un valor, se utiliza el asignado

catalogo.xml

<?xml version="1.0" encoding="ISO-8859-1"
      standalone="no" ?>
<!DOCTYPE catalogo SYSTEM "catalogo.dtd" >
<catalogo>
<categoria id="general">General</categoria>
<categoria id="referencia">Libros de referencia</categoria>
<categoria id="circulación">Libros en circulación</categoria>
<autor id="autor1">Autor 1</autor>
<autor id="autor2" iniciales="a2">Autor 2</autor>
<libro id="libro1"/>
<libro id="libro2" categoria_id="general referencia"/>
<libro id="libro3" estado ="prestado" />
</catalogo>

Sugerencia

Si se necesita definir más de un atributo para un mismo elemento, se puede utilizar la misma sintaxis

<!ATTLIST nombre-elemento
           nombre-atributo tipo-atributo valor-preestablecido
           nombre-atributo tipo-atributo valor-presetablecido ...>

Por ejemplo

<!ATTLIST libro id   ID    #REQUIRED
                isdn CDATA #IMPLIED >

    

Entidades

El último tipo de objeto a definir dentro de un DTD son las entidades, que como ya hemos señalado en la sección “Texto y entidades” nos permiten representar carácteres no posibles de incluir como texto o cualquier otro tipo de texto.

La sintaxis de definición de una entidad es bastante simple, siendo

<!ENTITY identificador "valor" >

El uso más importante de las entidades, aparte de permitir la representación de caracteres, es la de incluir texto o marcado de manera estándar. Cuando se realiza una referencia a una entidad, el procesador la reemplaza de forma literal por el contenido asignado como valor, el cual puede incluir marcado.

Por ejemplo, en HTML existe la etiqueta <a>, que con el atributo href nos permite hacer un link a una página. Por ejemplo:

<a href='http://www.google.cl'>Google</a>
       

Crea un link con el texto 'Google', dirigido a http://www.google.cl. Puede darse el caso que necesitemos ocupar repetidamente esa estructura en nuestro texto. Para evitar el trabajo de escribirlo una y otra vez, es posible crear una entidad &google;, que funcione como abreviatura de la expresión completa. Su DTD sería:

<!ENTITY google "<a href='http://www.google.cl'>Google</a>">
       

Entonces, si tenemos en nuestro texto

A continuación tendremos un link a google:
&google;
       

El procesador reemplazará la entidad por su definición y obtendremos:

A continuación tendremos un link a google:
<a href='http://www.google.cl'>Google</a>

Una variante de lo anterior es incluir el contenido de un archivo completo a través de la entidad. La sintaxis para ellos es:

<!ENTITY identificador SYSTEM "nombre_archivo" >

Por ejemplo, podemos dividir el contenido el contenido de un libro en tres archivos xml (capitulo_1.xml,capitulo_2.xml,capitulo_3.xml) e incluirlos dentro del archivo principal, definiendo tres entidades.

<?xml version="1.0" ?>
<!DOCTYPE libro [
    <!ENTITY capitulo_1 SYSTEM "capitulo1.xml" >
    <!ENTITY capitulo_2 SYSTEM "capitulo1.xml" >
    <!ENTITY capitulo_3 SYSTEM "capitulo1.xml" >
]>
<libro>
&capitulo_1;
&capitulo_2;
&capitulo_3;
</libro>

Por último, es posible utilizar las entidades para ahorrar trabajo en la creación del DTD. Por ejemplo, si tenemos un atributo que es común a muchas entidades, es posible crear una entidad que la represente. La sintaxis es bastante similar a la de una entidad común

<!ENTITY % identificador "valor" >

Por ejemplo, hemos visto en varios ejemplos que los identificadores obligatorios se crean siempre como ID #REQUIRED. Entonces, podemos resumir la definición del DTD realizada en el ejemplo de uso de attlist usando entidades y el formato abreviado de definición de atributos.

Ejemplo 2.8. Uso de entidades para definir atributos

<!ELEMENT catalogo (categoria|libro|autor)+ >
  <!ELEMENT categoria (#PCDATA) >
  <!ELEMENT autor (#PCDATA) >
  <!ELEMENT libro EMPTY >
  <!ENTITY % IdRequerido "id ID #REQUIRED" >
    <!ATTLIST categoria %IdRequerido; >
    <!ATTLIST autor     %IdRequerido;
                        iniciales CDATA #IMPLIED>
    <!ATTLIST libro     %IdRequerido;
                        categoria_id IDREFS "general"
                        autor_id IDREF #IMPLIED
                        estado
                        (intacto|dañado|robado|prestado)
                        "intacto">

Capítulo 3. Lenguajes derivados de XML

Como hemos señalado reiteradas veces, XML no es un lenguaje en sí, sino un metalenguaje que entrega especificaciones destinadas a que los desarrolladores creen nuevos lenguajes.

En xml.org, uno de los sitios más importantes de lenguajes XML, existen más de 200 especificaciones distintas, que cubren los más variados ámbitos.

De los muchos lenguajes XML existentes, hay algunos que son especialmente relevantes, ya sea porque corresponden a versiones actualizadas de lenguajes extendidos ya existentes (HTML, Docbook), o por su aceptación como herramientas estándar para el manejo de ciertas tareas (XML Schema, XSL-FO, XLS, MathML, etc.).

Es los siguientes capítulos describiremos 3 lenguajes XML especialmente relevantes:

  • XHTML (Lenguaje de Hipertexto Extensible): El sucesor de HTML, el lenguaje de publicación de facto en la WWW, ahora en formato XML

  • XSL (Lenguaje de Hojas de Estilo Extensible): Conjunto de tecnologías destinadas a la transformación y presentación de documentos XML. Comprende tres lenguajes relacionados: XPath, XSLT y XSL FO.

  • Docbook: uno de los lenguajes de creación de textos electrónicos más populares, junto a LaTex.

XHTML

Según el W3C, el Lenguaje de Hipertexto Extensible o XHTML es la familia de documentos presentes y futuros que reproduce, contiene y extiende HTML, reformulados en XML. XHTML es el sucesor de HTML y cuenta una serie de especificaciones propias.

La principal ventaja de usar XHTML sobre HTML es la posibilidad de usar las poderosas herramientas de transformación XML (como XSLT) y la posibilidad de integrar otros lenguajes, como MathML, SML o SVG dentro del documento, lo que no puede hacerse con HTML.

Diferencias entre HTML y XHTML

HTML es un derivado de SGML, por lo que prácticas que son perfectamente legales, como no escribir el fin de tags vacíos, deben ser corregidas para que el documento sea compatible con XML.

A continuación, se presentaran las principales diferencias entre ambos lenguajes

Los documentos deben estar bien formados

Este concepto, propio de XML, indica que cada elemento debe contar con su marca de cierre y que la anidación de elementos debe ser correcta, no permitiéndose el solapado de elementos

Correcto

<p>Este es un <b>párrafo</b> correcto</p>

Incorrecto

<p>Este es un <b>párrafo incorrecto</p></b>

Los elementos y atributos deben estar escritos en minúsculas

Los documentos XHTML deben usar minúsculas para todos los elementos y atributos HTML. Esta diferencia es necesaria, debido a que XML es sensible a las mayúscula: <li> y <LI> son etiquetas distintas.

Se requiere tag de cierre para los elementos no vacios

Para los documentos basados en HTML, se permite omitir la etiqueta de cierre. En XML, en cambio, todos los elementos deben tener un tag de cierre, incluso aquellos marcados como EMPTY en el DTD, pudiendo usarse la forma abreviada.

Correcto

<p>Estos son tags <br /> bien </p><p>cerrados </p>

Incorrecto

<p>Estos no son tags <br> bien <p>cerrados </p>

Los valores de atributos deben estar siempre entre comillas

Todos los valores de atributos deben estar entre comillas dobles o sencillas, aunque sus valores sean numéricos

Correcto

<td colspan="2">

Incorrecto

<td colspan=3>

Minimización de atributos

A diferencia de HTML, XML no permite la minimización de atributos. Los pares de atributo-valor deben ser escritos en plenitud, no pudiendo omiterse el valor

Correcto

<input type='radio' checked='checked'>

Incorrecto

<input type='radio' checked>

Elementos script y style

En XHTML, los contenidos de elemento script y style son declarados como #PCDATA. Por tanto, caracteres como < y &, bastante comunes en los lenguajes de programación, serán tratados como inicio de etiqueta y entidad, respectivamente. Para evitar esto, es mejor incluir el contenido del script o de la hoja de estilo entre etiquetas CDATA

Correcto

<script language="Javascript" type="text/javascript">
<![CDATA[
function sumarUno(x) {
return x+1; }
]]>
</script>

Incorrecto

<script language="Javascript" type="text/javascript">
function sumarUno(x) {
return x+1; }
</script>

Uso de name e id

Las etiquetas a, applet, form, frame, iframe, img, y map cuentan en su definición HTML con el atributo name, que sirve para identificarlos. En XML los atributos identificatorios son del tipo ID , y sólo puede existir un atributo ID por elemento; en XHTML el atributo id es del tipo ID, dejando obsoleto al atributo name

Atributos con nombres predefinidos

En HTML ciertos atributos podían poseer valores que estuviesen dentro de un conjunto predeterminado de antemano (por ejemplo, el atributo type en el elemento input). En XML son denominados atributos enumerados y su interpretación es sensible a las mayúsculas, así que el valor TEXT es distinto text; todos estos valores deben ser escritos en minúsculas

Correcto

<input type='text' id='mitexto' />

Incorrecto

<input type='TEXT' id='mitexto' />

La Familia de de Lenguajes de Estilos Extensible: XSL

XSL es la familia de recomendaciones para definir transformaciones y la presentación de documentos XML. Consiste de tres partes:

Transformaciones XSL (XSLT)

Un lenguaje XML que permite transformar un documento XML en otro.

Lenguaje de ruta XML (XPath)

Un lenguaje expresivo, usado por XSLT para acceder o referirse a partes de un documento XML.

Objetos de Formato XSL (XSL-FO)

Un vocabulario XML destinado a especificar una semántica de formato, o sea, especifica de forma detallada como debe presentarse un determinado contenido.

Una hoja de estilo XSLT especifica como se presentará un documento XML, especificando las transformaciones necesarias para convertirlo en un vocabulario XML de presentación, como XHTML o XSL-FO.

Usos de XSL

Al ser XSL un conjunto de tecnologías relacionadas, es posible utilizar todas o partes de ella para propósitos determinados.

  • El uso adecuado de distintas plantillas XSLT nos permite transformar un mismo tipo documento XML, escrito por ejemplo en Docbook, en otros formatos, como XHTML, HTML o XSL-FO. Al ser XSLT un lenguaje XML, se pueden reutilizar las herramientras utilizadas en la creación de los documentos XML para el diseño de las plantillas XSLT.

  • XPath es un lenguaje que permite navegar de modo flexible por la estructura del documento, a través de instrucciones sencillas y breves. Existen diversas implementaciones de esta tecnología para otros lenguajes, tales como Java o PHP, que permiten reducir la complejidad y extensión de las aplicaciones

  • Un documento XSL-FO, escrito directamente o producto de una transformación XSLT, puede ser transformado a distintos formatos de imagen - GIF, JPG, PNG - o de impresión - Postscript, PDF.

XPath

XPath es un lenguaje que permite acceder a los distintos objetos de un documento XML, usando una sintaxis compacta, no-XML; opera en la estructura lógica del documento, más que en su sintaxis superficial.

XPath modela el documento como un árbol de nodos, siendo cada uno de éstos un elemento, un atributo o texto. Cada uno de estos nodos puede contener, a su vez, a uno o más nodos y presenta un nombre único, que es muy similar al que utilizan los distintos sistemas de archivo, sobre todos los de tipo Unix. Utilizaremos como base el siguiente XML para los ejemplos

<AAA id="aaa1">
    <BBB id="bbb1"/>
    <CCC id="ccc1"/>
    <BBB id="bbb2"/>
    <DDD id="ddd1">
         <BBB id="bbb3"/>
    </DDD>
    <CCC id="ccc2">
         <DDD id="ddd2">
              <BBB id="bbb4"/>
              <BBB id="bbb5"/>
         </DDD>
    </CCC>
</AAA>

Tabla 3.1. Expresiones más comunes utilizadas en XPath

EjemploSignificadoResultado
/AAASelecciona el elemento raiz AAA del documento
<AAA id="aaa1">
  <BBB id="bbb1"/>
  <CCC id="ccc1"/>
  <BBB id="bbb2"/>
  <DDD id="ddd1">
    <BBB id="bbb3"/>
  </DDD>
  <CCC id="ccc2">
    <DDD id="ddd2">
      <BBB id="bbb4"/>
      <BBB id="bbb5"/>
    </DDD>
  </CCC>
</AAA>
/AAA/BBBSelecciona todos los elementos BBB que son hijos del elemento raiz AAA
<BBB id="bbb1"/>
<BBB id="bbb2"/>
//BBBSelecciona todos los elementos BBB dentro del documento
<BBB id="bbb1"/>
<BBB id="bbb2"/>
<BBB id="bbb3"/>
<BBB id="bbb4"/>
<BBB id="bbb5"/>
//CCC/*Selecciona todos los elementos que están dentro de un elemento CCC
<DDD id="ddd2">
  <BBB id="bbb4"/>
  <BBB id="bbb5"/>
</DDD>
/AAA/BBB[2]Selecciona el segundo elemento BBB, hijo del elemento raiz AAA
<BBB id="bbb2"/>
//@idSelecciona todos los atributos id
id="aaa1"
id="bbb1"
id="ccc1"
id="bbb2"
id="ddd1"
id="bbb3"
id="ccc2"
id="ddd2"
id="bbb4"
id="bbb5"
//BBB[@id='bbb1']Selecciona todos los elementos BBB que tengan un id igual a 'bbb1'
<BBB id="bbb1"/>

XSLT

XSLT es un lenguaje XML que permite, con las herramientas adecuadas, transformar un documento XML en otro. Para ello, es necesario crear un documento escrito en XSL que contiene las reglas de transformación, el cual llamaremos plantilla

La plantilla está compuesta por uno o más elementos template. Cada uno de estos elementos define que objetos van a ser transformados y cuales van a ser las transformaciones que van a sufrir. Para la definición de los elementos a transformar se ocupa XPath

Un documento XSLT presenta la siguiente estructura básica:

Ejemplo 3.1. Estructura básica de un documento XSLT

<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="/">
    <xsl:apply-templates />
  </xsl:template>
</xsl:stylesheet>
        

Este documento nos entrega algunas sorpresas. En primer lugar, observamos que todos los elementos presentan la sintaxis <xls:nombre_elemento />. El prefijo xls es denominado namespace, e identifica a todos los elementos que lo poseen como partícipes del lenguaje XSL. Se hace referencia a la definición de los objetos propios de este lenguaje en el atributo xmlns del elemento raíz xsl:stylesheet, el cual corresponde a una dirección de Internet, donde debería encontrarse la especificación el lenguaje

Hablando sobre el lenguaje en sí, podemos ver que existen dos elementos básicos, xsl:template y xsl:apply-template.

xsl:template

Indica sobre cual o cuales elementos del elemento original deben realizarse las tranformaciones indicadas en sus elementos hijos, a través del atributo match, que contiene una expresión XPath.

xsl:apply-template

Este elemento indica que los hijos del elemento sobre el cual actúa el template deben ser procesados por otro template. Si este no existiese, simplemente son descartados.

Reutilicemos el xml que utilizamos para analizar distintos XPath y veamos que XML resultante se puede obtener utilizando estos dos elementos XSLT

Ejemplo 3.2. Uso de XSLT

fuente.xml

<?xml version='1.0' encoding='ISO-8859-1'?>
<?xml-stylesheet type="text/xsl" href="transformador.xsl" ?>
<AAA id="aaa1">
    <BBB id="bbb1"/>
    <CCC id="ccc1"/>
    <BBB id="bbb2"/>
    <DDD id="ddd1">
         <BBB id="bbb3"/>
    </DDD>
    <CCC id="ccc2">
         <DDD id="ddd2">
              <BBB id="bbb4"/>
              <BBB id="bbb5"/>
         </DDD>
    </CCC>
</AAA>

transformador.xsl

<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:template match="/">
		<antes_raiz />
			<xsl:apply-templates />
		<despues_raiz />
	</xsl:template>
	<xsl:template match="/AAA">
		<a>
			<xsl:apply-templates />
		</a>
	</xsl:template>
	<xsl:template match="//BBB">
		<bbb>
			<xsl:apply-templates />
		</bbb>
	</xsl:template>
	<xsl:template match="//DDD/BBB">
		<bbb_hijo_de_ddd>
			<xsl:apply-templates />
		</bbb_hijo_de_ddd>
	</xsl:template>
</xsl:stylesheet>

resultado.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<antes_raiz/>
<a>
  <bbb/>
  <bbb/>
  <bbb_hijo_de_ddd/>
  <bbb_hijo_de_ddd/>
  <bbb_hijo_de_ddd/>
</a>
<despues_raiz/>

Cómo podemos observar, la expresión '/' selecciona al documento, antes del elemento raíz, lo cual nos permite agregar contenido antes y después de él. El comportamiento del resto de los templates es bastante predecible, excepto la relación entre //BBB y //DDD/BBB

El orden en el cual se presentan los templates es significativo. Si posicionamos <xsl:template match="//BBB"> al final, todos los BBB se transforman en bbb, ya que el parser sigue en orden la aplicación de los apply-template, y al no existir otros templates posteriores, no existe ninguna otra transformación que se pueda realizar. En cambio, si el elemento <xsl:template match="//DDD/BBB"> se ubica después, la adición de <bbb /> se omite debido a que este template toma el control por ser más especifico.

XSL-FO

La capacidad para producir versiones impresas de los documentos HTML y, por extensión, XML, de los navegadores típicos es bastante limitada. Las herramientas de navegación necesarias para presentar un texto en línea son diferentes a las de un medio escrito. Para este último, tenemos los medios utilizados desde hace muchísimos años para los libros: cabeceras, pies de página, números de página, citas, etc. Además, para producir un documento escrito de calidad, es necesario tomar en consideración la tipografía, las imágenes y como estás se relacionan con un medio de proporciones fijas, como lo es la página escrita.

Tomando en cuenta esta necesidad, el W3C definió un vocabulario orientado a la creación de material dirigido a la impresión, el cual también es aplicable a medios electrónicos de página de tamaño fijo, como los lectores PDF.

La especificación XSL-FO es bastante larga y compleja, con muchos detalles técnicos. Además, el desarrollador común de XML no suele lidiar con este formato directamente, ya que se genera automáticamente a través de XSLT y es procesado directamente por los programas que lo transforman, a su vez, en un documento PS o PDF. Por tanto, no se procederá a una mayor explicación sobre esta tecnología.

Docbook

Docbook es un sistema que permite escribir documentos estructurados usando SGML o XML. Está especialmente indicado para la creación de libros y artículos relacionados con software y hardware, aunque no está limitado a estos tópicos.

En lo técnico, Docbook es un DTD que provee un vocabulario y una estructura para la creación de documentos. Debido a que es una especificación amplia y robusta de lo que tradicionalmente se considera un libro, ha sido adoptada por un gran número de autores y cuenta con muchas herramientas - de código abierto y comerciales - que permiten realizar acciones tan variadas como la catalogación, publicación en WWW y creación de documentos impresos.

Uso de Docbook

El desarrollo de documentos en Docbook tiene dos fases principales, la creación del documento y su publicación en uno o más medios

Creación del documento

Para la creación del documento Docbook, al igual que con cualquier otro documento XML, basta tener un editor de texto simple, como el Block de Notas de windows. Empero, la complejidad de la especificación hace recomendable utilizar un editor que permite verificar la validez del documento que estamos construyendo, utilizando la DTD Docbook.

Particularmente indicado para este menester resulta la aplicación Jedit, que a través del plug-in de XML nos permite validar el documento cada vez que grabamos el archivo, avisando de cualquier error producido, además de entregarnos un listado de etiquetas posibles de incluir dentro del contexto en el que trabajamos.

En Apéndice A, Instalación de jEdit, se detallan las instrucciones para instalar el programa con los plug-in respectivos, descargar la DTD y hacerlas funcionar en conjunto

Publicación del documento

Una vez que hemos creado el documento Docbook y hemos verificado que esté bien formado y sea válido con respecto a la DTD, podemos proceder a su publicación, lo cual significa crear uno o más archivos en formatos distintos, ya sea para su publicación por vía electrónica o impresa.

Si bien existen herramientas comerciales que transforman directamente el documento Docbook en (X)HTML, RTF, PDF u otros formatos, lo más usual es utilizar XSLT para crear (X)HTML o XLS-FO, siendo este último susceptible de transformarse en un formato impreso, como RTF, PS o PDF.

Figura 3.1. Diagrama de publicación de documentos Docbook

Diagrama de publicación de documentos Docbook

Estructura de un documento Docbook

La especificación Docbook permite la creación de las siguientes categorías de elementos, siendo posible utilizar todas o sólo algunas para propósitos determinados. Se presenta, entre corchetes, el nombre del elemento en inglés cuando corresponda.

Conjuntos [Set]

Un conjunto puede contener uno más Libros. Es la jerarquía más alta de DocBook. Por ejemplo, permite agrupar a uno o más libros como una sola unidad

Libro [Book]

Es el elemento principal más común. Su definición es bastante general y flexible. Puede contener una mezcla de los siguientes componentes

Dedicatoria [Dedication]

Generalmente ubicada al inicio del libro

Navegación

Comprende la Tabla de Contenidos[ToC], de Títulos [LoT] (para imágenes, tablas, ejemplos,etc) y el Índice[Index]

Divisiones

Son los elementos que siguien en jerarquía a Libro. Puede contener Partes [Part] y Referencias [Reference]. Las partes, a su vez, pueden contener Componentes. El libro puede no tener Divisiones y estar compuesto directamente de Componentes

Componentes

Son los elementos que usualmente llamaríamos capítulos del libro

Componentes

Corresponden a lo que llamaríamos capítulos de un Libro o Parte: Prefacio [Preface], Capítulo [Chapter], Apéndice [Appendix], Glosario [Glossary] y Bibliografía [Bibliography]. En este nivel también podemos tener Artículos [Article], que usualmente son utilizados como elemento principal en textos más breves

Secciones

Existen distintos tipos de secciones en Docbook

Sect1...Sect5

Es el elemento más común para definir secciones. Deben estar anidadas correctamente, o sea, una Sect2 debe incluirse dentro de una Sect1

Sección [Section]

Es la alternativa a la nomenclatura anterior. Es recursiva, lo que indica que se permite incluir una Sección dentro de otra

Sección Simple [SimpleSect]

Es una sección terminal, sin número, que no contiene otras secciones en su interior

Meta Información

Todos los elementos antes nombrados y otros poseen adaptadores que permiten incluir meta-información sobre ellos, como el título [Title], autor [Author], editor [Publisher], etc.. Por ejemplo, Libro contiene un elemento Información de Libro [BookInfo]

Elementos de Bloque

A grandes rasgos, corresponden a los párrafos de información contenidos en alguna Sección. Se pueden en las siguientes categorías:

  • Listas numeradas, con viñeta, de definición de términos

  • Avisos

  • Secciones donde se preserva el formato de texto, para la presentación de código fuente

  • Ejemplos, figuras, tablas, ecuaciones, gráficos

  • Párrafos

Elementos en línea

Estos elementos son porciones de texto, incluidos dentro de algún bloque de texto, que no causan un salto de línea y que entregan alguna información particular. Se dividen en:

  • De publicación: Acrónimos, Énfasis, Notas al Pie, Citas, etc.

  • Referencias cruzadas: Link a un elemento interno o a una URL, referencias a otro elemento, con y sin creación de hipervínculos.

  • Marcado: Texto que debe ser presentado de manera especial para efectos de presentación: Literal, Frase extranjera, etc.

  • Interfaz de usuario: Identifica elementos de una interfaz de usuario, como Botones, Iconos, Menus, etc.

  • Lenguajes de programación y constructos: Identifica elementos relacionados con la programación, como Accion, Clase, Código de Error, etc..

  • Uso general: Identifica elementos misceláneos, como Email, Nombre de Archivo, Opcional, Símbolo, etc.

Esquema básico del manual

El manual que usted lee en estos momentos fue creado con Docbook. Por tanto, nada mejor que revise el código fuente disponible en la página web del autor. . De todos modos, a continuación se presentará la estructura del primer capítulo, para ejemplicar la forma típica de un libro Docbook.

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
"http://www.oasis-open.org/docbook/xml/4.3b2/docbookx.dtd" >
<book lang="es">
  <bookinfo>
    <title>Introducción a XML</title>
    <author>
      <firstname>Claudio</firstname>
      <surname>Bustos</surname>
    </author>
    <pubdate>2004</pubdate>
  </bookinfo>
  <chapter id="cap1">
    <title>Fundamentos de XML</title>
    <sect1 id="lenguajes_marcado">
      <title>Los lenguajes de marcado</title>
      <variablelist />
      <sect2 id="sgml">
        <title>SGML</title>
        <variablelist />
      </sect2>
      <sect2 id="html">
        <title>HTML</title>
        <itemizedlist />
        <example>
          <title>Código HTML</title>
          <programlisting />
        </example>
      </sect2>
      <sect2 id="justificacion_xml">
        <title>Justificación de XML</title>
        <itemizedlist />
      </sect2>
    </sect1>
    <sect1 id="xml">
      <title>Qué es XML</title>
      <sect2 id="xml_w3c">
        <title>Especificación W3C</title>
        <note>
        </note>
        <itemizedlist />
        <sect3 id="xml_w3c_documento">
          <title>Definición de documento XML</title>
        </sect3>
        <sect3 id="xml_w3c_parser">
          <title>Definición de procesador de XML (parser)</title>
        </sect3>
      </sect2>
      <sect2 id="xml_aplicaciones">
        <title>Aplicaciones más comunes para el uso de XML</title>
      </sect2>
      <sect2 id="xml_ventajas_limitaciones">
        <title>Ventajas y limitaciones de XML</title>
        <itemizedlist />
      </sect2>
    </sect1>
  </chapter>
</book>

Es necesario hacer notar que, para hacer más breve el ejemplo, se eliminaron todos los elementos <para> y el contenido de los distintos tipos de listas.

Se inicia el XML con la instrucción de proceso <?xml ?>. La declaración del DTD a utilizar a través del DOCTYPE es distinta a las que hemos visto antes, ya que se hace referencia a un documento público.

<!DOCTYPE elemento PUBLIC "identificador_publico"
"url" >

Tabla 3.2. DOCTYPE para identificadores públicos

Identificador público formal"-//OASIS//DTD DocBook XML V4.3//EN"Nombre global y abstracto, conforme al norma ISO 8879. En este caso, se señala que el DTD es propiedad de la compañía Oasis, que la versión del DTD que estamos ocupando es la 4.3, y que el lenguaje de las marcas está basado en el inglés
Identificador de sistema"http://www.oasis-open.org/docbook/xml/4.3b2/docbookx.dtd"Al igual que los DOCTYPE de tipo SYSTEM, se puede incorporar, aparte de la referencia públic, una referencia al documento DTD tanto de forma local, como a un URL.

Tras la definición del DOCTYPE, se abre el elemento book, raíz de todo el documento. Inmediatamente lo sigue el elemento bookinfo, que almacena meta-información sobre el libro. Para dividir al libro se utiliza como unidad mayor chapter, el cual consta de varias secciones anidadas (sect1,sect2 ysect3). Cada una de ellas cuenta con su título (title), y la mayoría del contenido se ubica dentro de elementos de párrafo (para), los cuales fueron omitidos, como ya se señaló.

Capítulo 4. Tecnologías asociadas a XML

Procesadores o Parsers

Si bien las capacidades que nos brinda XSLT para navegar y transformar textos son notables, esde luego no ofrece todas las capacidades que un programador pudiese desear. Por tanto, para los distintos lenguajes de computación se han desarrollado librerías o módulos, denominados parsers, que le permiten al desarrollador tener un acceso fácil al documento XML.

Existen dos grandes tipos de parsers, las del tipo SAX y las del tipo DOM.

SAX

Figura 4.1. Parser tipo SAX

Parser tipo SAX

Los procesadores SAX navegan en forma secuencial a través del archivo, generando callbacks a funciones determinadas por el desarrollador ante cada evento, como la apertura de un tag o su cierre. Su ventaja es que ocupan muy poca memoria y son muy rápidos. La desventaja es que todo el trabajo de determinar la estructura del archivo (ver que tag se incluye dentro de otro), corre por cuenta del desarrollador.

DOM

Figura 4.2. Parser tipo DOM

Parser tipo DOM

Los procesadores DOM, a diferencia de los SAX, guardan toda la información de estructura y contenido del documento XML en memoria. Su ventaja es que es muy fácil navegar a través del XML, subiendo o bajando a través de los nodos, pudiendo recopilar información de muchas etiquetas en una sola instrucción. El problema radica en que son más lentos y que, dependiendo del tamaño del documento, almacenar la estructura completa puede requerir mucha memoria.

Navegadores

Los distintos navegadores presentan enfoques disímiles para el procesamiento de XML. Como ejemplo, utilizaremos el documento XML que contiene la introducción al manual, el cual es procesado primero en forma directa y, luego, a través de hojas de estilo CSS, una tecnología que permite especificar el modo de presentación de las distintos elementos dentro de una página HTML o XML

A continuación se incluirá el código CSS que contiene la descripción de como debiera presentarse el XML

preface {
background:white;
border:1px solid black;
font-size:9pt;
}
preface > title {
display:block;
font-size:150%;
color:blue;
}

section {
border: 1px solid black;
padding:5 px;
display:block;
margin;2px;
margin:5px;
}
section > title {
display:block;
font-weight:bold;
margin:5px;
}
para {
display:block;
margin-bottom:10px;
}
itemizedlist {
display:block; margin-left:40px;
  list-style-type:disc;

}
listitem {
	display:list-item;
}

Internet Explorer

Internet Explorer puede presentar la estructura de un documento XML como un árbol y realizar validación de DTD sencillos

El enfoque preferido para trabajar en esta plataforma es el uso de XSLT, con sólo un mínimo de soporte para CSS sobre XML. En otras palabras, se supone que el desarrollador debe entregar un XSLT que transforme el contenido en HTML, sobre el cual se aplican los estilos definidos en el CSS. El problema radicaría en que el soporte XSLT de IE es bastante limitado

Figura 4.3. Documento XML en Internet Explorer, sin CSS y con CSS

Documento XML en Internet Explorer, sin CSS y con CSS

Mozilla - Firefox

Al igual que Internet Explorer, Mozilla y su derivado, Firefox, pueden presentar la estructura de un documento XML

El enfoque de Mozilla se centra en la utilización de CSS, siendo su implementación de los estándares W3C para CSS 1 bastante completa. Para cada elemento se puede definir de manera bastante precisa su modo de presentación, siendo especialmente útil el manejo de la propiedad block.

Figura 4.4. Documento XML en Firefox, sin CSS y con CSS

Documento XML en Firefox, sin CSS y con CSS

Editores de XML

XML se concibió como un formato de texto, no binario, para que fuese fácilmente editable. Hasta la plataforma más sencilla cuenta con alguna herramienta de edición de texto, por lo que es posible crear documentos XML incluso con el Block de Notas (notepad) de Windows, por dar un ejemplo. Ahora bien, para trabajar con documentos de cierta extensión es recomendable utilizar alguna herramienta más potente.

Existen dos grandes grupos de herramientas de desarrollo XML: los editores de texto propiamente tales y herramientas de edición gráfica. Estas últimas ocultan el marcado XML y lo representan de diversas maneras: estructuras en árbol, cajas anidades, presentación del texto con diversos colores o símbolos, etc.

Procesadores de texto adaptados a XML

Existe una infinidad de editores de texto, de los cuales resultan especialmente indicados para el desarrollo de XML aquellos que están dirigidos a los programadores. A continuación presentaremos algunas de las características que facilitan el trabajo con documentos XML; presentamos el nombre en inglés en aquellos casos donde no existe en castellano aún una forma común de denominarlas.

Tabla 4.1. Funcionalidades deseables en un editor de texto XML

NombreFuncionalidadVentaja
Syntax HighlightingDiferenciación por colores de los distintos objetos del marcado.Permite distinguir rápidamente un elemento del marcado de otro y hace inmediatamente visible errores como la omisión de comillas.
Case FoldingSe omite la presentación de ciertas secciones del código que se encuentran bajo determinado nivel jerárquico.Evita la saturación visual de elementos y hace extremadamente sencilla la tarea de mover o eliminar bloques completos
AutocompletaciónAl iniciarse el ingreso de un elemento de marcada, se presentan los nombres de marcas que tengan igual inicio. También incluye la habilidad de crear automáticamente el último elemento abierto y de presentar los posibles atributos que puede tener un elementoEs especialmente útil cuando se trabaja con DTD grandes, como docbook, donde es muy difícil recordar la nomenclatura exacta de los distintos objetos y en los documentos largos, donde es fácil perder la cuenta de los distintos elementos abiertos
Sangría automática (autoindenting)Se agrega automáticamente sangría a los distintos elementos, siendo mayores los espacios para los elementos que se encuentran dentro de otrosFacilita la inspección visual del documento, al hacer análogas la estructura lógica a la gráfica del documento.
Validación de DTDSe puede validar el documento dentro del mismo ambiente de desarrollo. Ante la presencia de un error, el programa marca de alguna manera el elemento erróneo o permite acceder directamente a la línea transgresora haciendo click sobre el reporte de error.Hace muy rápida la localización y corrección de errores.

Existe una infinidad de editores de texto, tanto gratuitos como comerciales, que ayudan al desarrollo de XML. Cómo escapa del alcance de este texto el hacer una reseña de estas herramientas, nos limitaremos a citar dos, las preferidas del autor del texto

jEdit

Es un editor de texto genérico, especialmente diseñado para desarrollar programas, escrito en Java bajo licencia GPL (código abierto). Si bien en un inicio estuvo orientando a la creación de programación en Java, con el tiempo se convertido en una excelente de uso general, debido a su arquitectura robusta y flexible. En el caso específico de XML, cuenta con todas las carácteres citadas en la Tabla 4.1, “Funcionalidades deseables en un editor de texto XML” a través de distintos plugins, además de la posibilidad de realizar transformaciones XSLT y de búsquedas vía XPath.

Su desventaja principal es la necesidad de contar con un equipo rápido y con mucha memoria. En documentos grandes y complejos, puede ser necesario desactivar algunos plug-ins para evitar una excesiva demora en la edición

URL: http://www.jedit.org

Editplus.

Editor genérico, escrito en Delphi. Es un producto comercial, de tipo shareware. Es extremadamente rápido y soporta muy bien la edición de documetos largos. Si bien sólo cuenta en forma nativa con la diferenciación de marcados por colores, es muy fácil implementar funciones de autocompletación, sangría y validación a través de herramientas externas. Si se cuenta con un computador con pocos recursos, es la opción preferida

URL: http://www.editplus.com/

Editores específicos de XML

Además de los editores genéricos de texto, existen muchas programas diseñados específicamente para la edición de XML. Si bien la experiencia del autor no ha sido muy positiva con este tipo de software, para determinados requerimientos pueden ser adecuados. Estas herramientas por lo general cuentan con opciones para verificar que el documento esté bien formado y que sea válido con respecto a una DTD.

Los siguientes son algunos de los editores gráficos XML más importantes:

Tabla 4.2. Lista de editores gráficos XML

NombreURLDescripción
xmlspyhttp://www.altova.com/dev_portal_xml_editing.htmlUno de los editores XML de pago más famosos, entre sus principales características se encuentra la posibilidad de visualizar los documentos en 5 formas distintas (grilla de texto, grilla, texto, Schema y navegador con compatibilidad XML-CSS), además de la posibilidad de crear plantillas XSLT a través de formularios y su completo soporte para XML Schema.
XMetalhttp://www.xmetal.com/Su principal característica es la creación de plantillas para la creación de XML, las cuales permiten realizar operaciones similares a las de procesadores de texto como Microsoft Word. Además, permite transformar documentos SGML, cuenta con compatibilidad con sistemas de manejo de base de datos y cuenta con exportación integrada a formatos como HTML y PDF.
Arbotexthttp://www.arbortext.com/Arbotext provee un conjunto de tecnologías para el desarrollo de XML, basadas en la interface de procesadores de texto. Provee de un modo de autoría simple basada en navegadores y puede exportar documentos XML a distintos formatos de manera simple.
Butterfly XMLwww.butterflyxml.orgUna alternativa Open Source. Destaca principalmente por su GUI, que muestra en todo momento la estructura del documento en un formato similar al Explorer de Windows, además de presentar el código fuente con abuntantes indicaciones visuales para un rápido reconocimiento y corrección de errores. Cuenta, además, con soporte completo para Docbook, XSL-FO y XSLT.

Herramientas auxiliares

Validadores de XML

Si bien lo recomendable es contar con un editor de XML que cuente con un validador DTD, en ocasiones puede ser necesario revisar en lote muchos documentos, para verificar que sean válidos. O, en otras, puede ser necesario validar un documento que está en Internet.

Para el primer caso, podemos utilizar el validador de Sun, que permite validar documentos XML contra distintos esquemas (XML Schema, DTD, Relax, Trex). Lo podemos descargar en http://wwws.sun.com/software/xml/developers/multischema/index.html

Si nos vemos en la necesidad de utilizar un servicio de validación en línea, tenemos los siguientes sitios a nuestro disposición.

Herramientas XSL

Existe una gran cantidad de software libre y propietario para el trabajo con la especificación XSL. En general, las herramientas propietarias tienden a realizar todo el "trabajo sucio" ellas solas, siendo deber del usuario entregar el documento XML en el formato adecuado. Las herramientas libres, en cambio, suelen especializarse en una sola tarea y es labor del usuario unirlas para lograr el resultado esperado.

Tomando en consideración el diagrama para publicación de Docbook, nombraremos las herramientas de código abierto que pueden ser utilizadas para este propósito. Aparecen remarcadas aquellos motores que cuentan con mejor soporte para Docbook.

Apéndice A. Instalación de jEdit

El procedimiento para instalar y usar jEdit con el fin de crear documentos Docbook es el siguiente

Procedimiento A.1. Procedimiento para instalar jEdit

  1. Instalar Java Runtime Enviroment: Dirigirse a la página de descargas de Sun, y buscar el último Java Runtime Enviroment (JRE) disponible, necesario para correr aplicaciones Java. Si se trabaja sobre plataforma linux, se puede ocupar alternativas como Blackdown

  2. Instalar jEdit: Dirigirse a la página de descargas de jEdit y descargar una versión de acuerdo a la plataforma. En Windows es altamente recomendable utilizar el formato ejecutable.

  3. Activar soporte para DTD Docbook en jEdit

    Nota

    El plug-in XML de jEdit incluye, a la fecha, el DTD para Docbook 4.2. Los pasos siguientes sólo son necesarios si se quiere instalar una versión más reciente

    1. Descargar el DTD de Docbook: El DTD de Docbook puede ser descargado desde la URL http://www.docbook.org/xml/index.html. Se debe seleccionar la versión estable más reciente, o sea, aquella que no tiene una b (beta) al final del número de versión. El archivo zip que se ofrece en la página debe descomprimirse en un lugar conocido, por ejemplo c:/docbook/dtd