Namespaces XML
Os Namespaces XML provêem um método para evitar conflitos com nomes de elementos.
Conflitos de Nomes
Como que os elementos em XML não são fixos, muito freqüentemente um conflito de nomes ocorrerá quando dois documentos diferentes usarem os mesmos nomes descrevendo dois tipos diferentes de elementos.
Este documento XML contém informação em uma tabela (table em inglês):
<table>
<tr>
<td>Maçãs</td>
<td>Bananas</td>
</tr>
</table>
|
Este documento XML contém informação sobre uma mesa [table também em inglês] (uma peça de mobília):
<table>
<nome>Mesa de Café Africana</nome>
<largura>80</largura>
<altura>120</altura>
</table>
|
Se estes dois documentos XML forem adicionados juntos, haveria um conflito de nomes de elementos porque ambos os documentos contém um elemento <table> com diferentes conteúdo e definição.
Solucionando Conflitos de Nomes usando um Prefixo
Este documento XML contém informação em uma tabela:
<h:table>
<h:tr>
<h:td>Maçãs</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
|
Este documento XML document contém informação sobre uma peça de mobília:
<f:table>
<f:nome>Mesa de Café Africana</f:nome>
<f:largura>80</f:largura>
<f:altura>120</f:altura>
</f:table>
|
Agora o conflito de nomes de elementos desapareceu porque os dois documentos usam nomes diferentes para os seus elementos <table> (<h:table> e <f:table>).
Usando um prefixo, criamos dois tipos diferentes de elementos <table>.
Usando Namespaces
Este documento XML contém informação em uma tabela:
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Maçãs</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
|
Este documento XML document contém informação sobre uma peça de mobília:
<f:table xmlns:f="http://www.w3schools.com/mobília">
<f:nome>Mesa de Café Africana</f:nome>
<f:largura>80</f:largura>
<f:altura>120</f:altura>
</f:table>
|
Em vez de usar somente prefixos, um atributo xmlns foi adicionado à tag <table> para dar ao prefixo do elemento um nome qualificado associado com um namespace.
O Atributo Namespace
O atributo namespace é colocado no tag de abertura de um elemento e tem a seguinte sintaxe:
xmlns:namespace-prefix="namespace"
|
No exemplo acima, o próprio namespace é definido usando um endereço na Internet:
xmlns:f="http://www.w3schools.com/mobília"
|
A especificação do namespace do W3C estabelece que o próprio namespace deve ser um Uniform Resource Identifier (URI) [Identificador de Recursos Uniforme].
Quando um namespace é definido na tag de abertura de um elemento, todos os elementos filhos com o mesmo prefixo são associados com o mesmo namespace.
Observe que o endereço usado para identificar o namespace, não é usado pelo parser para buscar informação. O único propósito é dar ao namespace um nome único. Entretanto, muito freqüentemente as companias usam o namespace como um ponteiro para uma página Web real contendo informação sobre o namespace.
Tente ir para http://www.w3.org/TR/html4/.
Uniform Resource Identifiers
Um Uniform Resource Identifier (URI) [Identificador de Recursos Uniforme] é uma seqüência (string) de caracteres que identificam um Recurso na Internet. O URI mais comum é o Uniform Resource Locator (URL) [Localizador de Recursos Uniforme] que identifica um endereço de domínio na Internet. Outro tipo de URI, não tão comum, é o Universal Resource Name (URN) [Nome de Recurso Universal]. Em nossos exemplos usaremos somente URLs.
Como o nosso exemplo da mobília usa um endereço na internet para identificar o seu namespace, podemos ter certeza que o nosso namespace é único.
Namespaces Padrões
Definir um namespace padrão para um elemento nos poupa de usar prefixos em todos os elementos filhos. Ele tem a seguinte sintaxe:
<element xmlns="namespace">
|
Este documento XML contém informação em uma tabela:
<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
|
Este documento XML document contém informação sobre uma peça de mobília:
<table xmlns="http://www.w3schools.com/mobília">
<nome>Mesa de Café Africana</nome>
<largura>80</largura>
<altura>120</altura>
</table>
|
Namespaces em Uso Real
Quando você começar a usar a XSL, você logo verá os namespaces em uso real. As folhas de estilo XSL são usadas para transformar documentos XML em outros formatos como HTML.
Se você olhar atentamente para o documento XSL abaixo, verá que muitas das tgas são HTML. As tags que não são tags da HTML tem o prefixo xsl, identificadas pelo namespace "http://www.w3.org/TR/xsl":
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/xsl">
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="CATALOG/CD">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="ARTIST"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
|
|