tutoriais mais recente desenvolvimento web
 

XML namespaces


Namespaces XML fornecem um método para evitar conflitos de nome do elemento.


Conflitos de nome

Em XML, os nomes dos elementos são definidos pelo desenvolvedor. Isso muitas vezes resulta em um conflito ao tentar misturar documentos XML a partir de aplicações XML diferentes.

Este XML carrega informações da tabela de HTML:

<table>
  <tr>
    <td>Apples</td>
    <td>Bananas</td>
  </tr>
</table>

Este XML contém informação sobre uma mesa (a piece of furniture) :

<table>
  <name>African Coffee Table</name>
  <width>80</width>
  <length>120</length>
</table>

Se estes fragmentos XML foram adicionados em conjunto, não haveria um conflito de nome. Ambos contêm um <table> elemento, mas os elementos têm conteúdo e significado diferente.

Um usuário ou um aplicativo XML não vai saber como lidar com essas diferenças.


Resolver o conflito nome usando um Prefixo

conflitos de nomes em XML pode ser facilmente evitada usando um prefixo de nome.

Este XML carrega informações sobre uma tabela HTML, e uma peça de mobiliário:

<h:table>
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

<f:table>
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>

No exemplo acima, não haverá nenhum conflito porque os dois <table> elementos ter nomes diferentes.


Namespaces XML - O xmlns Atributo

Ao usar prefixos em XML, um namespace devem ser definidos para o prefixo.

O espaço de nomes pode ser definido por um xmlns atributo na tag de abertura de um elemento.

A declaração namespace tem a seguinte sintaxe. xmlns: prefix =" URI " .

<root>

<h:table xmlns:h="http://www.w3.org/TR/html4/">
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

<f:table xmlns:f="http://www.w3ii.com/furniture">
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>

</root>

No exemplo acima:

Os xmlns atributo na primeira <table> elemento dá ao h: prefixo um namespace qualificado.

Os xmlns atributo na segunda <table> elemento dá a f: prefixo um namespace qualificado.

Quando um namespace é definido para um elemento, todos os elementos filho com o mesmo prefixo são associados com o mesmo namespace.

Namespaces também pode ser declarado no elemento raiz XML:

<root
xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3ii.com/furniture">

<h:table>
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

<f:table>
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>

</root>

Note: O namespace URI não é utilizado pelo analisador para procurar informações.

O objetivo de usar um URI é dar ao namespace um nome único.

No entanto, as empresas costumam usar o namespace como um ponteiro para uma página web que contém informações namespace.


Uniform Resource Identifier (URI)

Um Uniform Resource Identifier (URI) é uma cadeia de caracteres que identifica um recurso da Internet.

O URI mais comum é o Uniform Resource Locator (URL) que identifica um endereço de domínio da Internet. Outra, não tão comum tipo de URI é o Universal Resource Name (URN) .


namespaces padrão

Definindo um namespace padrão para um elemento nos poupa de usar prefixos em todos os elementos filho. Ele tem a seguinte sintaxe:

xmlns="namespaceURI"

Este XML carrega informações da tabela de HTML:

<table xmlns="http://www.w3.org/TR/html4/">
  <tr>
    <td>Apples</td>
    <td>Bananas</td>
  </tr>
</table>

Este XML contém informação sobre uma peça de mobiliário:

<table xmlns="http://www.w3ii.com/furniture">
  <name>African Coffee Table</name>
  <width>80</width>
  <length>120</length>
</table>

Namespaces em uso real

XSLT é uma linguagem que pode ser usada para transformar documentos XML em outros formatos.

O documento XML abaixo, é um documento utilizado para transformar XML em HTML.

O namespace "http://www.w3.org/1999/XSL/Transform" identifica elementos XSLT dentro de um documento HTML:

<?xml version="1.0" encoding="UTF-8 " ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
  <h2>My CD Collection</h2>
  <table border="1">
    <tr>
      <th style="text-align:left">Title</th>
      <th style="text-align:left">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>

Se você quiser saber mais sobre XSLT, leia o nosso Tutorial XSLT .