|
María Jesús Lamarca Lapuente. Hipertexto: El nuevo concepto de documento en la cultura de la imagen. |
|
| ||||||||||
| capital | capital |
|
|
|
Ante la ambigüedad, surgió la pregunta de cómo combinar en un mismo documento varios vocabularios.
<país nombre=“España”>
<capital>2000€</capital>
Una posible solución era asignar un nombre único a cada
etiqueta creando una autoridad mundial que asignara dicho nombre, pero un
solución mucho más fácil era utilizar un mecanismo ya existente, por eso se
pensó en los
URIs. Un URI es un identificador global
único. Aquí no se trata de utilizar un URI como enlace,
ni tiene por qué tener contenido, los URI sólo se utilizan para que el nombre
sea único.
Los nombres de espacio (namespaces) establecidos en la especificación del W3 Consortium Namespaces in XML (http://www.w3.org/TR/REC-xml-names/) sirven para proveer un método simple para calificar los nombres que se usan en los documentos XML por asociación con los namespaces identificados por URI (Uniform Resource Identifier). Este Identificador de Recursos Uniforme es un método que combina URNs y URLs, esto es, nombres/direcciones y que sirve para identificar de forma universal recursos de todo tipo que existen la la World Wide Web.
En nuestro ejemplo, la solución estaría en asociar a cada etiqueta un URI que indicara a qué espacio de nombres pertenece:
Por ejemplo, de la siguiente forma:
<[http://www.bolsa.es]:inversiones>
<[http://www.geograf.com]:país
[http://www.geograf.com]:nombre=“España”>
<[http://www.geograf.com]:capital>Madrid
</[http://www.geograf.com]:capital>
<[http://www.bolsa.es]:capital>2000€
</[http://www.bolsa.es]:capital>
</[http://www.bolsa.es]:país>
. . .
</[http://www.bolsa.es]:inversiones>
Es muy importante tener en cuenta que los URIs sólo se utilizan para que el nombre sea único, no son enlaces, ni tienen que contener información, sin embargo, también los URIs sirven para acceder a recursos. Los XML Namespaces describen cómo se puede asociar una URI con cada etiqueta y atributo en un documento XML, si bien, para qué se utiliza el URI depende de la aplicación que lea el URI. Por ejemplo, RDF, (http://www.w3.org/TR/REC-rdf-syntax/) el estándar del W3C para metadatos, lo usa para enlazar cada metadato a un archivo definiendo el tipo de ese metadato).
En nuestro ejemplo, la solución está en asociar un alias a los elementos de un espacio de nombres dentro de un ámbito:
xmlns:alias define alias en el ámbito
de un elemento
<bolsa:inversiones
xmlns:bolsa=“http://www.bolsa.es”
xmlns:geograf=“http://www.geograf.com”>
<geograf:país
geograf:nombre=“España”>
<geograf:capital>Madrid</geograf:capital>
<bolsa:capital>2000€</bolsa:capital>
</geograf:país>
. . .
</bolsa:inversiones>
Además, es posible una asignación dinámica, esto es, ir asociando espacios de nombre a los elementos según van apareciendo:
<bolsa:inversiones
xmlns:bolsa=“http://www.bolsa.es”>
<geograf:país
xmlns:geograf=“http://www.geograf.com”
geograf:nombre=“España”>
<geograf:capital>Madrid</geograf:capital>
<bolsa:capital>2000€</bolsa:capital>
</geograf:país>
. . .
</bolsa:inversiones>
También es posible establecer un espacio de nombres por defecto (sin alias) mediante xmlns=“...”
<inversiones
xmlns=“http://www.bolsa.es”>
<geograf:país
xmlns:geograf=“http://www.geograf.com”
geograf:nombre=“España”>
<geograf:capital>Madrid</geograf:capital>
<capital>2000€</capital>
</geograf:país>
. . .
</inversiones>
Se refiere a
http://www.bolsa.es
Los espacios de nombre nacieron con posterioridad a los DTDs y por eso las Declaraciones de Tipo de Documento no dan soporte a los espacios de nombre. Si combinamos varios documentos, por ejemplo, una hoja de cálculo .xml con nombres de países y otra con inversiones (con sus correspondientes DTD), y queremos mezclar ambas páginas, habrá elementos que no se llamen igual, pero otros que sí (como capital). La única solución es que el autor de cada documento le diga al analizador o parser que estemos utilizando qué DTD usar cuando analice un elemento dado. Es decir, que para una etiqueta se especifica qué DTD usar, por lo que esto sólo tiene sentido si se usa más de un DTD. Entonces se usarían ambos DTD y utilizaríamos los espacios de nombre para distinguir aquellos elementos en los que no esté claro a qué DTD pertenecen. De esta forma, hay que definir los espacios de nombre usados para poderlos validar con DTDs:
<!DOCTYPE inversiones [
<!ELEMENT inversiones (geograf:país*)>
<!ELEMENT
geograf:país (geograf:capital,capital)
>
<!ELEMENT
geograf:capital
(#PCDATA)>
<!ELEMENT capital (#PCDATA)>
<!ATTLIST inversiones
xmlns
CDATA #FIXED "http://www.bolsa.es">
<!ATTLIST
geograf:país
geograf:nombre CDATA #REQUIRED
xmlns:geog
CDATA #FIXED "http://www.geograf.com">
]>
Así pues, los espacios de nombres se usan para combinar vocabularios y facilitan la incorporación de elementos no previstos inicialmente.
Los espacios de nombres se crearon para que no existieran colisiones entre los diferentes módulos de software que eran capaces de reconocer las marcaciones (etiquetas y atributos) del lenguaje XML ya que los diferentes documentos que contienen marcaciones de distintas fuentes independientes entre sí, solían tener problemas de reconocimiento cuando habían sido creados para otros programas de software que, sin embargo, utilizaban el mismo tipo de elemento o nombre de atributo.
Una de las motivaciones para esta modularidad es que, si existe un conjunto de marcaciones disponibles, que son entendibles y para las que existe software útil disponible, es mejor la reutilización de estas marcaciones que el hecho de reinventar unas nuevas. Así, se consideró que las construcciones de documentos debían tener nombres universales, cuyo ámbito se extendiera más allá del documento que las contuviera. La especificación Namespaces XML describe un mecanismo, los espacios de nombres XML, que lleva a cabo esta misión.
Un espacio de nombres XML es una colección de nombres, identificados por una referencia URI (RFC 2396), que se utiliza en los documentos XML como tipos de elementos (element types) y nombres de atributos (attribute names).
Los espacios de nombres se aplican tanto a atributos como a elementos. Para definir un espacio de nombres al que pertenece un elemento, es necesario añadir un atributo a la definición de elemento, donde el nombre del atributo sea xmlns ("xml namespace") y el valor puede ser una cadena cualquiera, aunque por convención suelen ser URLs. Por ejemplo, podemos hacer esto añadiendo una entrada como la siguiente en la lista de definición de atributos de un elemento title:
<!ELEMENT title (%inline;)*> <!ATTLIST title xmlns CDATA #FIXED "http://www.ejemplos.xml/muestra"
Los nombres de los espacios de nombres XML pueden aparecer como nombres calificados, que contienen el carácter "dos puntos", separando el nombre en un prefijo de espacio de nombres y su parte local. El prefijo, que es mapeado a un URI, selecciona un espacio de nombres. La combinación de los URIs de espacios de nombres universalmente gestionados y el espacio de nombres propio del documento produce unos identificadores que garantizan la unicidad universal.
Cuando un documento usa un nombre de elemento que existe sólo en uno de los archivos DTD que referencia, el nombre no necesita estar calificado, pero cuando se usa un nombre de elemento que tiene varias definiciones, se necesita algún tipo de calificación (por ejemplo, capital referido a países versus capital referido a inversiones).
Calificamos una referencia a un nombre de elemento especificando el atributo xmlns, como se ve a continuación:
< title xmlns="http://www.ejemplos.com/muestra" > Tutorial </title>
El espacio de nombres se aplica a ese elemento, y a cualquier elemento contenido dentro de él.
Usando el atributo xmls, cuando necesitamos una sola referencia a un espacio de nombres, la tarea es fácil, pero cuando necesitamos hacer la misma referencia varias veces, añadir dicho atributo se convierte en una tarea tediosa que también hace difícil cambiar el nombre del espacio de nombres, en caso de que se quiera modificar posteriormente.
La alternativa es definir un prefijo de espacio de nombres, que es tan sencillo como especificar xmlns:nombre del prefijo antes del valor del atributo, como se ve a continuación:
<mt:muestra xmlns:mt='http://www.ejemplos/muestra
...>
...
</mt:muestra>
Esta definición configura mt como un prefijo que puede usarse para calificar el nombre del elemento actual y cualquier elemento dentro de él. Como el prefijo puede usarse en cualquier elemento contenido, tiene más sentido definirlo en el elemento raíz del documento XML.
Cuando el prefijo se usa para calificar un nombre de elemento, la etiqueta o marca final también debe incluir el prefijo, tal y como se muestra en este ejemplo:
<mt:muestra xmlns:mt='http://www.ejemplos/muestra
...>
...
<uno>
<mt:title> Tutorial <mt:title>
</uno>
...
</mt:muestra>
También es posible definir varios prefijos en el mismo elemento, de la siguiente forma:
<mt:muestra xmlns:mt='http://www.ejemplos/muestra
xmlns:chtml="urn: ...">
...
</mt:muestra>
En el siguiente ejemplo, tenemos información sobre libros en XML, pero, a su vez, es posible usar HTML para mostrar la información:
<h:html xmlns:xdc="http://www.biblioteca.com/revistas"
xmlns:h="http://www.libreria.org/HTML/html">
<h:head><h:title>La revista ecologista</h:title></h:head>
<h:body>
<xdc:revistas>
<xdc:title>XML: A Primer</xdc:title>
<h:table>
<h:tr align="center">
<h:td>Author</h:td><h:td>Price</h:td>
<h:td>Pages</h:td><h:td>Date</h:td></h:tr>
<h:tr align="left">
<h:td><xdc:author>Pepe Lopez</xdc:author></h:td>
<h:td><xdc:price>4,5</xdc:price></h:td>
<h:td><xdc:pages>42</xdc:pages></h:td>
<h:td><xdc:date>2004/03</xdc:date></h:td>
</h:tr>
</h:table>
</xdc:revistas>
</h:body>
</h:html>
En el ejemplo anterior, los elementos que tiene el prefijo xdc están asociados a un espacio de nombres cuyo identificador es http://www.biblioteca.com/revistas, mientras que los que tienen el prefijo h están asociados con un espacio de nombres cuyo identificador es http://www.libreria.org/HTML/html.
Si no se especifica el carácter dos puntos y el nombre del espacio de nombres, entonces el nombre de espacio de nombres asociado es el del espacio de nombres por defecto en el ámbito del elemento al que está adjunto la declaración. El efecto de dicha declaración es anular cualquier declaración de nivel superior del espacio de nombres por defecto, estableciendo su valor a "nulo".
Ejemplo de declaración de espacio de nombres:
<?xml version="1.0"?>
<x xmlns:edi='http://ecommerce.org/schema'>
<!-- el espacio de nombres edi se aplica al elemento "x" y a su contenido -->
</x>
Se considera que la declaración de espacios de nombres es aplicable al elemento en que se especifica y a todos los elementos dentro del contenido de ese elemento, a menos que sea anulado por otra declaración de espacio de nombres, con la misma parte del prefijo:
<?xml version="1.0"?>
<!-- todo aquí esta explícitamente en el espacio de nombres HTML -->
<html:html xmlns:html='http://www.w3.org/TR/REC-html40'>
<html:head><html:title>Pronóstico</html:title></html:head>
<html:body><html:p>Movido
<html:a href='http://frob.com'>aquí</html:a></html:p></html:body>
</html:html>
Se pueden declarar múltiples prefijos de espacios de nombres como atributos de un único elemento, como se muestra en el siguiente ejemplo:
<?xml version="1.0"?>
<!-- ambos prefijos de espacio de nombres están disponibles a continuación -->
<lb:libro xmlns:lb='urn:loc.gov:libros'
xmlns:isbn='urn:ISBN:0-395-36341-6'>
<lb:titulo>Más barato que una Docena</lb:titulo>
<isbn:numero>1568491379</isbn:numero>
</lb:libro>
Un espacio de nombres por defecto se aplica al elemento donde está declarado (si ese elemento no posee prefijo de espacio de nombres), y a todos los elementos sin prefijo dentro del contenido del ese elemento. Los espacios de nombres por defecto no se aplican directamente a los atributos. El espacio de nombres de un atributo sin prefijo es una función del tipo del elemento al cual está adjunto, y al espacio de nombres (si hubiese alguno) de ese elemento.
<?xml version="1.0"?>
<!-- otra vez, todo está en el espacio de nombres HTML, por defecto -->
<html xmlns='http://www.w3.org/TR/REC-html40'>
<head><title>Pronóstico</title></head>
<body><p>Movido
<a href='http://frob.com'>aquí</a>.</p></body>
</html>
<?xml version="1.0"?>
<!-- los nombres no prefijados pertenecen a "libros" -->
<libro xmlns='urn:loc.gov:libros'
xmlns:isbn='urn:ISBN:0-395-36341-6'>
<titulo>Más barato que una Docena</titulo>
<isbn:numero>1568491379</isbn:numero>
</libro>
Canonical XML
Un documento XML es parte de un conjunto de documentos XML que son lógicamente equivalentes sin un contexto de aplicación, pero que varían en la representación física basada en los cambios sintácticos permitidos por XML 1.0 [XML] y Namespaces en XML [Names].
La especificación del W3C llamada Canonical XML (http://www.w3.org/TR/xml-c14n), describe un método para generar una representación física, la forma canónica, de un documento XML que dé cuenta de los cambios permitidos. Excepto en algunos casos inusuales, si dos documentos tienen la misma forma canónica, entonces los dos documentos son lógicamente equivalentes sin un contexto de aplicación dado. Nótese que dos documentos pueden tener diferentes formas canónicas aunque sigan siendo equivalentes en un contexto dado basado en unas reglas de equivalencia sobre una aplicación específica para la que no está generalizada la especificación XML.
En resumen, los espacios de nombres sirven para evitar las colisiones entre elementos del mismo nombre, y en general, para distinguir los distintos grupos de elementos en un mismo documento. Cada espacio de nombres se asocia con una URI, que sólo sirve como identificador único y no tiene por qué ser válida.
IETF
(Internet Engineering Task Force). RFC 2141: URN Syntax.
Mayo de 1997.
IETF (nternet Engineering Task Force).
RFC 2396. Uniform Resource Identifiers (URI): Generic Syntax.1995.
http://www.ietf.org/rfc/rfc2396.txt e
nternet RFC Archives.
http://www.faqs.org/rfcs/rfc2396.html
W3C.
Namespaces in
XML.
http://www.w3.org/TR/REC-xml-names/
(traducción al castellano: POZO, Juan R.
Espacios de Nombres en XML.
http://html.conclase.net/w3c/xml-names-es/
W3C.
Extensible Markup Language (XML) 1.0.
http://www.w3.org/TR/REC-xml
W3C. Canonical XML
http://www.w3.org/TR/xml-c14n
|
URL: http://www.hipertexto.info
Fecha de Actualización:
29/07/2018
|
|
|
|
|
|
Fundación Ricardo Lamarca, Ajedrez y cultura http://www.fundacionlamarca.es
|
|
Mapa de navegación / Tabla de contenido / Mapa conceptual / Tabla de documentos / Buscador / Bibliografía utilizada / Glosario de Términos / Índice Temático / Índice de Autores
|
|