O que significa “xmlns” em XML?

Eu vi a seguinte linha em um arquivo XML:

xmlns:android="http://schemas.android.com/apk/res/android" 

Eu também vi xmlns em muitos outros arquivos XML que eu encontrei.

O que é isso?

   

    Define um namespace XML .

    No seu exemplo, o Prefixo do namespace é ” android ” e o URI do namespace é ” http://schemas.android.com/apk/res/android

    No documento, você vê elementos como:

    Pense no prefixo do namespace como uma variável com um apelido de nome curto para o URI de namespace completo. É o equivalente a escrever com relação ao que “significa” quando um analisador XML lê o documento.

    Observação: você não pode realmente usar o URI de namespace completo no lugar do prefixo de namespace em um documento de instância XML.

    Confira este tutorial sobre namespaces: http://www.sitepoint.com/xml-namespaces-explained/

    Isso significa namespace XML .

    Basicamente, todo elemento (ou atributo) em XML pertence a um namespace, uma forma de “qualificar” o nome do elemento.

    Imagine que você e eu inventamos nosso próprio XML. Você inventa o XML para descrever pessoas, eu invento o meu para descrever cidades. Nós dois incluímos um elemento chamado name . O seu se refere ao nome da pessoa e ao nome da cidade – OK, é um pouco inventado.

      Rob 37  London 123.000 0.00   

    Se nossos dois XMLs fossem combinados em um único documento, como distinguiríamos os dois nomes? Como você pode ver acima, existem dois elementos de name , mas ambos têm significados diferentes.

    A resposta é que você e eu atribuiríamos um namespace ao nosso XML, o que tornamos exclusivo:

      Rob 37  London 123.000 0.00   

    Agora nós qualificamos totalmente nosso XML, não há ambigüidade quanto ao significado de cada elemento de name . Todas as tags que começam com personxml: são tags pertencentes ao seu XML, todas as que começam com cityxml: são minhas.

    Existem alguns pontos a serem observados:

    • Se você excluir quaisquer declarações de namespace, as coisas serão consideradas no namespace padrão.

    • Se você declarar um namespace sem o identificador, ou seja, xmlns="http://somenamespace" , em vez de xmlns:rob="somenamespace" , ele especificará o namespace padrão do documento.

    • O próprio namespace, geralmente um IRI , não tem nenhuma consequência real. Deve ser único, então as pessoas tendem a escolher uma IRI / URI que possuem, mas não tem um significado maior do que isso. Às vezes, as pessoas colocam o esquema (definição) para o XML no IRI especificado, mas isso é uma convenção de apenas algumas pessoas.

    • O prefixo também é irrelevante. A única coisa que importa é o espaço de nomes onde o prefixo é definido. Várias tags que começam com prefixos diferentes, todas mapeadas para o mesmo namespace, são consideradas iguais.

      Por exemplo, se os prefixos personxml e mycityxml mapeados para o mesmo namespace (como no snippet abaixo), não importaria se você personxml um determinado elemento com personxml ou mycityxml , ambos seriam tratados como a mesma coisa por um analisador XML. O ponto é que um analisador XML não se importa com o que você escolheu como prefixo, apenas o namespace que ele mapeia também. O prefixo é apenas uma indireta apontando para o namespace.

        
    • Atributos podem ser qualificados, mas geralmente não são. Eles também não herdam seu namespace do elemento em que estão, ao contrário dos elementos (veja abaixo).

    Além disso, os namespaces de elemento são herdados do elemento pai. Em outras palavras, eu poderia igualmente ter escrito o XML acima

      Rob 37  London 123.000 0.00   

    xmlns – namespace xml. É apenas um método para evitar conflitos de nome de elemento. Por exemplo:

       5   5   

    Dois elementos de node diferentes em um arquivo xml. Sem namespaces, esse arquivo não seria válido.

    Acho que a maior confusão é que o namespace xml está apontando para algum tipo de URL que não possui nenhuma informação. Mas a verdade é que a pessoa que inventou abaixo do namespace:

     xmlns:android="http://schemas.android.com/apk/res/android" 

    Também poderia chamá-lo assim:

     xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il" 

    Este é apenas um identificador único. No entanto, é estabelecido que você deve colocar o URL que é único e pode potencialmente apontar para a especificação de tags / atributos usados ​​nesse namespace. Não é necessário tho.

    Por que deveria ser único? Como o objective dos namespaces é tê-los exclusivos, o atributo, por exemplo, chamado background do seu namespace, pode ser distinguido do background de outro namespace.

    Por causa dessa singularidade, você não precisa se preocupar que, se criar seu atributo personalizado, você terá a colisão de nomes.

    Você tem espaços de nome para poder ter elementos exclusivos globalmente. No entanto, 99% do tempo isso não importa, mas quando você coloca na perspectiva da Web Semântica , ela começa a se tornar importante.

    Por exemplo, você poderia fazer um mash-up XML de esquemas diferentes apenas usando os xmlns apropriados. Por exemplo, mash amigo de um amigo com vCard , etc.

    Namespaces XML fornecem um método para evitar conflitos de nome de elemento. Em XML, os nomes dos elementos são definidos pelo desenvolvedor. Isso geralmente resulta em um conflito ao tentar misturar documentos XML de diferentes aplicativos XML.

    Conflitos de nomes em XML podem ser facilmente evitados usando um prefixo de nome. Ao usar prefixos em XML, um namespace para o prefixo deve ser definido.

    O namespace pode ser definido por um atributo xmlns na tag de início de um elemento. A declaração de namespace tem a seguinte syntax. xmlns: prefixo = “URI” .