Namespaces en XML
Quisiera saber que son, exactamente, los namespaces en xml, para que se utilizan y cual es su sintaxis
Los namespaces son un estandar del W3C que ofrecen una forma de nombrar/cualificar (qualifying) los nombres de elementos y atributos de documentos XML asociandolos con un URI.
Están definidos en una especificación (in English, o' course), que puedes ver aquÃ: http://www.w3.org/TR/REC-xml-names/
Su proposito principal es la de permitir el poder incluir elementos que puedan ser usados por diferentes aplicaciones dentro de un mismo documento XML. AsÃ, por ejemplo, uno podrÃa tener un documento en donde ciertos elementos guarden datos de un pedido de compras y otros elementos que guarden información de estilo sobre como renderear el documento en un reporte. Es como darle un apellido a un elemento o atributo.
¿Cómo defines un namespace? Puedes hacerlo de dos formas la primera es a través de un prefijo, que declaras antes de usar, asÃ:
<prex:documento xmlns:prex="http://www.uri.tld/pref">
<prex:titulo>El nombre del doc</prex:titulo>
<prex:autor>Yo</prex:autor>
</prex:documento>
Nota que la declaración (la parte xmlns:tuPrefijo) puede ir en cualquier elemento antes de usar el namespace por primera vez, dandole asà una especie de ámbito, pero por lo general siempre se declara en el elemento raiz.
Se puede declarar un namespace por default que nos ahorra el prefijo de esta manera:
<elemento xmlns="...">
<otroElemento/>
</elemento>
Quizá el ejemplo clásico de esto sean las hojas de estilos XSLT. Uno mezcla HTML bien formado (o XHTML) junto con los elementos de procesamiento de XSLT, usando namespaces que distingan a cada grupo de etiquetas:
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>
<xsl:template match="/">
<html>
<head>
<title> <xsl:value-of select="titulo"/> </title>
</head>
<body>
...
</body>
</html>
</xsl:template>
</xsl:stylesheet>
En este caso, las etiquetas con prefijo xsl son instrucciones para una herrmienta de transformacipon XSLT y el resto es marcado de HTML, que como no tiene prefijo usa el default, que por estar vacio, ya que no lo declaré, es interpretado como si las etiquetas HTML no tuvieran namespace.
Espero que esta información e sirva de algo, o al menos que no te confunda :-) cualquier duda contactame por e-mail
Jesús
Están definidos en una especificación (in English, o' course), que puedes ver aquÃ: http://www.w3.org/TR/REC-xml-names/
Su proposito principal es la de permitir el poder incluir elementos que puedan ser usados por diferentes aplicaciones dentro de un mismo documento XML. AsÃ, por ejemplo, uno podrÃa tener un documento en donde ciertos elementos guarden datos de un pedido de compras y otros elementos que guarden información de estilo sobre como renderear el documento en un reporte. Es como darle un apellido a un elemento o atributo.
¿Cómo defines un namespace? Puedes hacerlo de dos formas la primera es a través de un prefijo, que declaras antes de usar, asÃ:
<prex:documento xmlns:prex="http://www.uri.tld/pref">
<prex:titulo>El nombre del doc</prex:titulo>
<prex:autor>Yo</prex:autor>
</prex:documento>
Nota que la declaración (la parte xmlns:tuPrefijo) puede ir en cualquier elemento antes de usar el namespace por primera vez, dandole asà una especie de ámbito, pero por lo general siempre se declara en el elemento raiz.
Se puede declarar un namespace por default que nos ahorra el prefijo de esta manera:
<elemento xmlns="...">
<otroElemento/>
</elemento>
Quizá el ejemplo clásico de esto sean las hojas de estilos XSLT. Uno mezcla HTML bien formado (o XHTML) junto con los elementos de procesamiento de XSLT, usando namespaces que distingan a cada grupo de etiquetas:
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>
<xsl:template match="/">
<html>
<head>
<title> <xsl:value-of select="titulo"/> </title>
</head>
<body>
...
</body>
</html>
</xsl:template>
</xsl:stylesheet>
En este caso, las etiquetas con prefijo xsl son instrucciones para una herrmienta de transformacipon XSLT y el resto es marcado de HTML, que como no tiene prefijo usa el default, que por estar vacio, ya que no lo declaré, es interpretado como si las etiquetas HTML no tuvieran namespace.
Espero que esta información e sirva de algo, o al menos que no te confunda :-) cualquier duda contactame por e-mail
Jesús