Curso de XML

Una de las pruebas del �xito del XML es la gran cantidad de vocabularios XML (DTD) que est�n apareciendo. En algunas ocasiones al realizar nuestros documentos XML nos podremos encontrar en la necesidad de utilizar varios de estos vocabularios. Es posible que estemos escribendo un art�culo cient�fico en formato XML y que tengamos la necesidad de incorporar f�rmulas matem�ticas. Podemos perfectamente desarrollar nuestras propias etiquetas, pero �por qu� no utilizar las que nos proporciona el vocabulario MathML? Sin duda, es mejor la reutilizaci�n de estas marcaciones que el hecho de reinventar unas nuevas.

Por tanto, estos documentos XML que contendr�n elementos de m�ltiples fuentes independientes entre s�, pueden tener problemas de reconocimiento y colisi�n. Puede ser que estemos utilizando dos vocabularios que utilizan el mismo tipo de elemento o nombre de atributo. Por ejemplo:

<?xml version=1.0" encoding="iso-8859-1"?>
<direccion>
  <calle>Avd. Diagonal 8</calle>
  <ciudad>Barcelona</ciudad>
  <provincia>Barcelona</ciudad>
  <pais>Espa�a</pais>
</direccion>
<?xml version=1.0" encoding="iso-8859-1"?>
<servidor>
  <url>http://www.palotes.com</url>
  <direccion>123.45.67.8</direccion>	
</servidor>

Los dos documentos XML anteriores tienen en com�n el elemento direccion. Por el momento son dos vocabularios diferentes pero puede ser que en alg�n momento tengamos que integrarlos en un mismo documento XML. Supongamos que ambos documentos juntos nos ofrecen informaci�n sobre la localizaci�n de una empresa: su direcci�n f�sica y su direcci�n en Internet. Est� claro que el elemento direcci�n va a provocar problemas. Podr�amos renombrarlo y en el segundo documento XML llamarlo ip-servidor, pero no es una buena soluci�n. Una posible soluci�n es ponerlo de la siguiente manera:

<?xml version=1.0" encoding="iso-8859-1"?>
<empresa>
  <nombre>Palotes S.A.</nombre>
  <dirfis:direccion xmlns:dirfis="http://www.palotes.com/direccionfisica">
    <dirfis:calle>Avd. Diagonal 8</dirfis:calle>
    <dirfis:ciudad>Barcelona</dirfis:ciudad>
    <dirfis:provincia>Barcelona</dirfis:ciudad>
    <dirfis:pais>Espa�a</dirfis:pais>
  </dirfis:direccion>
  <dirserv:servidor xmlns:dirserv="http://www.palotes.com/direccionservidor">
    <dirserv:url>http://www.palotes.com</dirserv:url>
    <dirserv:direccion>123.45.67.8</dirserv:direccion>	
  </dirserv:servidor>
</empresa>

En la que como podemos observar los elementos de ambos vocabularios est�n bien diferenciados.

Tambi�n puede ocurrir que sean diferentes, pero que el software que trabaja con ellos necesite diferenciarlos claramente, ya que su procesamiento requiere comportamientos diferentes.

Por ejemplo, esto es un documento XHTML que incorpora el vocabulario MathML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Ejemplo de documento MathML</title>
  <meta http-equiv="Content-Type" content="text/html" />
</head>

<body>
<p>Ecuaci�n de segundo grado escrita con MathML</p>
<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mrow>
    <mi>a</mi>
    <msup>
      <mi>x</mi>
      <mn>2</mn>
    </msup>
    <mo>+</mo>
    <mi>bx</mi>
    <mo>+</mo>
    <mi>c</mi>
    <mo>=</mo>
    <mn>0</mn>
    <mi></mi>
    <mo>,</mo>
    <mi>con a</mi>
    <mo>></mo>
    <mn>0</mn>
  </mrow>
</math>
</body>
</html>

Hemos diferenciado los elementos del vocabulario XHTML y MathML para que luego,por ejemplo el buscador Amaya sea capaz de pintarlos adecuadamente.

O,por ejemplo, una XSLT (la estudiaremos en los pr�ximos cap�tulos) es un vocabulario XML mediante el cual convertimos un documento XML en otro XML. El c�digo del documento XML de salida va impl�cito en la XSLT, que a su vez es un vocabulario XML. Por tanto,es evidente diferenciar un vocabulario de tal manera que el procesador de XSLT sea capaz de identificar qu� elementos pertenecen al lenguaje XSLT para procesarlos. La forma de hacerlo es la siguiente:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="direccion">
  <!-- El elemento direccion no pertenece al vocabulario de la XSLT -->
  <direccion>
    <xsl:apply-templates/>
  </direccion>
</xsl:stylesheet>

Estas consideraciones requieren ,por tanto, que las construcciones de documentos posean nombres universales, cuyo �mbito se extienda m�s all� del documento que las contiene. Por tanto el mecanismo mediante el cual se puede llevar a cabo esta identificaci�n es lo que se describe en la especificaci�n de los namespaces (traducido podr�a ser "espacios de nombre").

.��Qu� es exactamente un "namespace"?

.�Definici�n de "namespace"

Por tanto, un "namespace" XML es una colecci�n de nombres, identificados por un URI, que se utiliza en los documentos XML para identificar los nombres de los elementos y atributos.

.�Declaraci�n de un "namespace"

Como podemos observar en el ejemplo, la declaraci�n del "namespace" se realiza mediante el atributo xmlns, cuyo valor es un URI que identifica de forma un�voca el nombre.

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

El atributo xmlns puede ir seguido del car�cter dos puntos :, opcional, y el nombre del "namespace":

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

Entonces este nombre xsl, ser� el prefijo de los elementos de este vocabulario XML xsl:template.

Si no colocamos el car�cter dos puntos y este nombre, entonces el nombre del "namespace" es indicado por el nombre del elemento que tiene el atributo xmlns.

<math xmlns="http://www.w3.org/1998/Math/MathML">

En este caso, el nombre del namespace es math

Cada elemento se identifica con el namespace de dos maneras:

  • Incluy�ndolo como prefijo del nombre del elemento.
  • <dirfis:direccion xmlns:dirfis="http://www.palotes.com/direccionfisica">
      <dirfis:calle>Avd. Diagonal 8</dirfis:calle>
    
  • En el caso de no declararlo implicitamente, se considera que es un"namespace" por defecto y en tal caso el elemento en el que se especifica y todos los elementos que contiene llevar�n asociados ese "namespace".
  • <math xmlns="http://www.w3.org/1998/Math/MathML">
      <mrow>
        ......
      </mrow>
    </math>	
    	

.�Ambito del "namespace"

Denominamos �mbito del "namespace" al grupo de elementos y atributos a los que afecta el "namespace". Por regla general el "namespace" es aplicable al elemento en que se especifica y a todos los elementos dentro del contenido de ese elemento.

<dirserv:servidor xmlns:dirserv="http://www.palotes.com/direccionservidor">
  <dirserv:url>http://www.palotes.com</dirserv:url>
  <dirserv:direccion>123.45.67.8</dirserv:direccion>	
</dirserv:servidor>

Siempre y cuando no sea anulado por otra declaraci�n de "namespace"

[<![CDATA[<html xmlns="http://www.w3.org/1999/xhtml">
.....
<body>
...
<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mrow>
    .....
  </mrow>
</math>
</body>
</html>

El "namespace" html afecta al elemento body pero no al elemento mrow al tener como padre el elemento math, en el cual se ha definido el "namespace" por defecto math.

.�Direcciones

Para m�s informaci�n sobre el tema, pod�is visitar las siguientes direcciones:

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO