< Lenguaje XML

Prólogo

XML es un metalenguaje extensible de etiquetas desarrollado por el W3C. Es una simplificación y adaptación del SGML y permite definir la gramática de lenguajes específicos. Por lo tanto XML no es realmente un lenguaje en particular, sino una manera de definir lenguajes para diferentes necesidades.

Algunos de estos lenguajes que usan XML para su definición son XHTML, SVG y MathML.

Introducción

Antes de empezar este curso, es muy recomendable familiarizarse con el entorno del lenguaje, presentando algunos conceptos básicos que nos ayudarán a comprender mejor XML.

Documento válido

Un documento válido es aquel que cumple y se ajusta a las declaraciones de una DTD establecida. No es obligatorio poseer una DTD, en este caso no se habla de un documento inválido.

Documento bien-formado

ES aquel que respeta la sintaxis del lenguaje XML. Los documentos que no están bien-formados no pueden ser leídos por las aplicaciones.

Toma de contacto

Este es un pequeño ejemplo de un documento XML:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE SYSTEM contacto>
<contacto>
    <nombre>Alondra</nombre>
    <apellido>Jiménez Frías</apellido>
    <tel clase="casa">123 45 67</tel>
    <sexo valor="f"/>
    <direccion>
        <numero>1600</numero>
        <calle>Amphitheatre Parkway</calle>
        <ciudad>Mountain View</ciudad>
        <estado>CA</estado>
        <cp>94043</cp>
        <pais>Estados Unidos</país>
    </dirección>
</contacto>

El ejemplo anterior podría ser una tarjeta de contacto. Como se puede ver, tiene varios elementos: etiquetas, atributos, un prólogo, etc.

Para empezar, el elemento <contacto> contiene a todos los demás elementos. El elemento <nombre> contiene texto. El elemento <tel> también, pero además contiene un atributo (clase), el cual contiene un valor (casa). Si vamos más abajo, también veremos un elemento vacío (<sexo>), el cual contiene un atributo (valor). Por último, vemos al elemento <dirección>, el cual no contiene texto como los demás elementos, sino que contiene otros elementos.

Como se puede ver, un documento XML tiene varios tipos de elementos (y más que no vimos aquí). Éstos se irán viendo conforme se vayan avanzando en las lecciones de este wikilibro.

Normas básicas

Para crear un documento XML bien-formado, se deben de respetar algunas normas básicas de la sintaxis de este lenguaje:

Estructura jerárquica de los elementos

Esta es la más importante: dado que XML es para estructurar datos, todos los elementos deben de estar dentro de otro elemento definido, por ello, un elemento debe estar correctamente incluido dentro de otro de manera jerárquica. Si esto no es así, la jerarquía se rompe y el documento no estará bien-formado. Por ejemplo, esto es correcto:

<páginas><url>google.com</url><title>google</title></páginas>

No así esto:

<páginas><url>google.com<title></url>google</title></páginas>

Elemento raíz

En los documentos XML, debe de haber un solo elemento raíz. Esto quiere decir que solo debe haber un elemento que contenga a todos los demás. Este elemento debe llamarse según lo hayamos especificado es la declaración DTD. Por ejemplo, este código sería válido:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE SYSTEM contacto>
<contacto>
    <nombre>Alondra</nombre>
    <apellido>Jiménez Frías</apellido>
    <tel clase="casa">123 45 67</tel>
    <sexo valor="f"/>
</contacto>

Pero este no:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE SYSTEM contacto>
<contacto>
    <nombre>Alondra</nombre>
    <apellido>Jiménez Frías</apellido>
    <tel clase="casa">123 45 67</tel>
    <sexo valor="f"/>
</contacto>
<contacto>
    <nombre>Omar</nombre>
    <apellido>Altonar Gamas</apellido>
    <tel clase="casa">987 65 43</tel>
    <sexo valor="m"/>
</contacto>

Nombre de etiqueta

Cuando se crea un elemento en XML, este debe de llevar un nombre. Según la especificación 1.0, los nombres deben de cumplir las siguientes características:

  • Los nombres deben empiezan una letra o uno o más signos de puntuación.
  • Pueden contener —pero no necesariamente empezar con ello— letras, números, guiones, rayas, dos puntos o puntos.
  • Los nombres que empiezan con la cadena "xml", en ninguna de sus variantes mayúsculas y minúsculas, no se pueden utilizar para nombrar un elemento, ya que estos se reservan para la estandarización de esta o de futuras versiones de XML.
  • Los demás caracteres, como espacios en blanco, no se pueden usar.

Por ejemplo, estos nombres son válidos:

<elemento>
<etiqueta1>
<mi-etiqueta>

Pero no estos:

<etiqueta nueva>
<2periodo>

Comillas en los atributos

Todos los valores de los atributos deben de estar encerrados entre comillas simples () o dobles (""). En otros lenguajes de marcado, como HTML, se tolera el no encerrar un atributo entre comillas, en XML no. Por ejemplo, esto es válido:

<sexo valor="m"/>

Pero no esto:

<sexo valor=m/>

Espacios en blanco

XML permite utilizar un grupo de caracteres conocidos como «espacios en blanco» para separar los elementos, y permitir una mejor legibilidad del código. En general son ignorados, aunque no dentro de un elemento de texto o mixto. Estos caracteres son los siguientes:

CaracterCódigo Unicode
EspaciosU+032
TabuladoresU+009
Retornos de carroU+013
Saltos de líneaU+010

Espacios de nombre

Lenguaje XML/Sintaxis/Espacios de nombre

Espacios en blanco

Lenguaje XML/Sintaxis/Espacios en blanco

Elementos del lenguaje

Introducción

XML define varios tipos de elementos para ser utilizados. Cada elemento tiene una función, y puede contener otros tipos de elementos, dependiendo del tipo de elemneto en cuestión. Todos los elementos se definen en una DTD, donde se ajustarán las reglas de aparición y número.

Prólogo

El prólogo es la parte más importante de un documento XML. Es lo que le dice al programa (y a nosotros), que el documento es un documento XML. A continuación veremos la estructura de un prólogo.

Declaración XML

La declaración XML es la cadena que va al principio de un documento XML, y define la versión de XML usada, la codificación de caracteres, y opcionalmente, una declaración de documento autónomo. No es obligatorio usar la etiqueta, pero si se incluye, se debe de incluir el atributo version, que especifica la versión de XML. Por ahora solo hay una, la 1.0.

Si se quiere incluir la codificación de caracteres, se hace con el atributo encoding, que debe ir después del atributo version.

Standalone

Por último, aunque no es común, se puede incluir un tercer atributo, standalone, que indica si un documento es autónomo, es decir, si depende de algún documento o DTD. Puede tomar los valores "yes" y "no".

Declaración de tipo de documento

La declaración de tipo de documento va seguida de la declaración XML, y es la responsable de definir una DTD contra la cual se validará el documento. Aunque no es obligatoria, es muy recomendable usarla para definir la estructura del documento.

Ejemplo

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE MENSAJE SYSTEM "mensaje.dtd">

En este ejemplo la primera línea es la declaración XML. Nos dice que se está usando la versión 1.0, con la codificación de caracteres UTF-8, y que es un documento autónomo.

La segunda línea, la declaración de tipo de documento, nos indica que se está usando la DTD "mensaje.dtd", que proveerá el sistema.

Elementos

Lenguaje XML/Elementos del lenguaje/Elementos

Atributos

Lenguaje XML/Elementos del lenguaje/Atributos

Comentarios

Lenguaje XML/Elementos del lenguaje/Comentarios

Secciones CDATA

Lenguaje XML/Elementos del lenguaje/Secciones CDATA

Definición de tipo de documento

Introducción

Una definición de tipo de documento, o DTD (siglas en inglés de Document Type Definition) sirve para declarar la estructura de un documento SGML o XML, elemento por elemento. Esta información se usa para validar un documento XML o SGML. Un documento XML es válido cuando no incumple ninguna de las normas establecidas en su DTD.

Las DTDs nos ayudan a usar una misma estructura para muchos documentos. Esta se puede incluir en un fichero aparte, de modo que en nuestros documentos solo debemos añadir una línea para hacer referencia a la DTD.

Aparte de las DTDs, existen otros métodos que también permiten validar documentos XML, como por ejemplo XML Schema o RELAX NG, aunque son menos utilizadas y conocidas.

La W3C provee la especificación de XML y DTD en la página http://www.w3.org/TR/xml/, y es el sitio donde recomendamos se consulten dudas, ya que ésta es la referencia oficial del lenguaje XML (y DTD).

Declaración de tipo de documento

Las DTDs pueden ser incluidas en un documento XML directamente, o a través de una referencia. Ahora bien, en ambos casos hay que escribir una declaración DOCTYPE (Document Type Declaration, en español Declaración de Tipo de Documento) para asociar una DTD al documento XML. Un archivo DTD puede ser asociado a miles de documentos XML, y de la misma forma, un solo documento XML puede tener asociados varias DTDs.

DTDs internas

Las DTDs asociadas dentro del mismo documento XML solo funcionan dentro de ese documento XML. Es como si incluyeramos código CSS dentro de un documento HTML mediante la etiqueta <style>. Tienen la siguiente sintaxis:

<!DOCTYPE elemento-raíz [
declaraciones
]>

donde elemento-raíz es el nombre que identifica al tipo de documento, y que también es el nombre que llevará la etiqueta raíz de nuestro XML. Y declaraciones son las declaraciones a incluir. Por ejemplo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE marcadores [
   <!ELEMENT marcadores (pagina)*>
   <!ELEMENT pagina (nombre, descripcion, url)>
   <!ELEMENT nombre (#PCDATA)>
   <!ELEMENT descripcion (#PCDATA)>
   <!ELEMENT url (#PCDATA)>
]>
<marcadores>
   <pagina>
      <nombre>Wikilibros</nombre>
      <descripcion>Libros libres para un mundo libre.</descripcion>
      <url>http://www.wikilibros.org/</url>
   </pagina>
   <pagina>
      <nombre>Wikipedia</nombre>
      <descripcion>La enciclopedia libre.</descripcion>
      <url>http://www.wikipedia.org/</url>
   </pagina>
   <pagina>
      <nombre>Wikicionario</nombre>
      <descripcion>El diccionario libre.</descripcion>
      <url>http://www.wiktionary.org/</url>
   </pagina>
</marcadores>

DTDs externas

Las DTDs asociadas mediante una referencia en el documento XML pueden ser enlazadas a tantos documentos como se quiera. Es como si incluyeramos código CSS dentro de un documento HTML mediante la etiqueta <link>. Tienen la siguiente sintaxis:

<!DOCTYPE elemento-raiz SYSTEM "ubicación-dtd">

donde elemento-raíz es el nombre que identifica al tipo de documento, y que también es el nombre que llevará la etiqueta raíz de nuestro XML. Y ubicación-dtd es la ruta absoluta al documento XML. Por ejemplo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE marcadores SYSTEM "http://example.com/dtd/marcadores.dtd">
<marcadores>
   <pagina>
      <nombre>Wikilibros</nombre>
      <descripcion>Libros libres para un mundo libre.</descripcion>
      <url>http://www.wikilibros.org/</url>
   </pagina>
   <pagina>
      <nombre>Wikipedia</nombre>
      <descripcion>La enciclopedia libre.</descripcion>
      <url>http://www.wikipedia.org/</url>
   </pagina>
   <pagina>
      <nombre>Wikicionario</nombre>
      <descripcion>El diccionario libre.</descripcion>
      <url>http://www.wiktionary.org/</url>
   </pagina>
</marcadores>

y marcadores.dtd tendría la siguiente estructura:

<!ELEMENT marcadores (pagina)*>
<!ELEMENT pagina (nombre, descripcion, url)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT descripcion (#PCDATA)>
<!ELEMENT url (#PCDATA)>

Elementos

Lenguaje XML/Definición de tipo de documento/Elementos

Atributos

Lenguaje XML/Definición de tipo de documento/Atributos

Entidades

Lenguaje XML/Definición de tipo de documento/Entidades

Notaciones

Lenguaje XML/Definición de tipo de documento/Notaciones

Secciones condicionales

Lenguaje XML/Definición de tipo de documento/Secciones condicionales

Estilos

Introducción

Las hojas de estilo CSS se desarrollaron para utilizarse junto con el lenguaje de marcas HTML, pero un documento XML también puede hacer referencia a una hoja de estilo CSS y visualizarse en el navegador.

Las hojas de estilo pueden ser añadidas con la instrucción de procesamiento <?xml-stylesheet ?>. Por ejemplo:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="stylesheet.css"?>
<libro>
  <titulo>La iportancia de llamarse Ernesto</titulo>
  <autor>Oscar Wilde</autor>
  <fechaPublicacion año="1895"/>
</libro>

Podemos agregar atributos a esta instrucción para modificar su comportamiento. Por ejemplo, el atributo title, que nos sirve para identificar varias hajas de estilo de un documento. Ejemplo:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="stylesheet.css"?>
<?xml-stylesheet href="stylesheet2.css" title="Blanco y negro"?>
<?xml-stylesheet href="stylesheet3.css" title="Móvil"?>
<libro>
  <titulo>La iportancia de llamarse Ernesto</titulo>
  <autor>Oscar Wilde</autor>
  <fechaPublicacion año="1895"/>
</libro>

Con ese código, podemos seleccionar qué hoja de estilo queremos visualizar en el dispositivo usado, por ejemplo, en el navegador web.

CSS

Lenguaje XML/Estilos/CSS

XSL

Lenguaje XML/Estilos/XSL

DOM

  • Introducción
  • DOM en Java
  • DOM en Visual Basic
  • DOM en Python
  • DOM en PHP
  • DOM en JavaScript

Introducción

Ejemplo de DOM

El DOM, o Document Object Model (Modelo de Objeto de Documento), es una interfaz que nos permite representar cualquier documento HTML o XML, siguiendo una estructura jerárquica. Nosotros utilizaremos el DOM en diferentes lenguajes de programación para acceder a cualquier elemento de un documento fácilmente.

DOM en Java

Lenguaje XML/DOM/DOM en Java

DOM en Visual Basic

Lenguaje XML/DOM/DOM en Visual Basic

DOM en Python

Lenguaje XML/DOM/DOM en Python

DOM en PHP

Lenguaje XML/DOM/DOM en PHP

DOM en JavaScript

Lenguaje XML/DOM/DOM en JavaScript

Edición de XML

  • Editores de texto
  • Parsers
  • Bibliotecas

Editores de texto

Lenguaje XML/Edición de XML/Editores de texto

Parsers

Existen muchos analizadores sintácticos (parsers en inglés) usados para validar documentos XML.

Uno de los más usados es xmllint, su sintaxis básica es:

xmllint --schema schema.xsd xml.xml

En el caso que se quiera validar un XML con un schema XML

Bibliotecas

Lenguaje XML/Edición de XML/Bibliotecas

Aplicaciones prácticas

Aplicaciones prácticas

Introducción

XML, al ser un metalenguaje para describir etiquetas, es usado como base para muchos otros lenguajes de marcado. Muchos de ellos son conocidos, otros no tanto, pero todos ellos heredan las caracteríssticas de XML. Aquí veremos algunos de ellos.

XHTML

Lenguaje XML/Aplicaciones prácticas/XHTML

MathML

Lenguaje XML/Aplicaciones prácticas/MathML

SVG

Lenguaje XML/Aplicaciones prácticas/SVG

RSS

Lenguaje XML/Aplicaciones prácticas/RSS

Sitemaps

Lenguaje XML/Aplicaciones prácticas/Sitemaps

Conclusión

  • Creando un lenguaje propio
  • ¿Y ahora qué?
  • Autores

Creando un lenguaje propio

Lenguaje XML/Conclusión/Creando un lenguaje propio

¿Y ahora qué?

Lenguaje XML/Conclusión/¿Y ahora qué?

Autores

Lenguaje XML/Conclusión/Autores

Enlaces

GNU Free Documentation License

Este artículo ha sido escrito por Wikibooks. El texto está disponible bajo la licencia Creative Commons - Atribución - CompartirIgual. Pueden aplicarse cláusulas adicionales a los archivos multimedia.