Eu vi a seguinte linha em um arquivo XML:
xmlns:android="http://schemas.android.com/apk/res/android"
Também vi xmlns
em muitos outros arquivos XML que me deparei.
O que é isso?
xml
xml-namespaces
user88637
fonte
fonte
Respostas:
Ele define um espaço para nome 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:
<android:foo />
Pense no prefixo do espaço para nome como uma variável com um alias de nome abreviado para o URI do espaço para nome completo. É o equivalente a escrever
<http://schemas.android.com/apk/res/android:foo />
com relação ao que "significa" quando um analisador XML lê o documento.NOTA: Na verdade, você não pode usar o URI do espaço para nome completo no lugar do prefixo do espaço para nome em um documento de instância XML.
Confira este tutorial em namespaces: http://www.sitepoint.com/xml-namespaces-explained/
fonte
<LinearLayout
funciona sem prefixo?Isso significa espaço para nome XML .
Basicamente, todo elemento (ou atributo) no XML pertence a um espaço para nome, uma maneira de "qualificar" o nome do elemento.
Imagine que você e eu inventamos nosso próprio XML. Você inventa XML para descrever pessoas, eu inveno o meu para descrever cidades. Nós dois incluímos um elemento chamado
name
. O seu refere-se ao nome da pessoa e o meu ao nome da cidade - OK, é um pouco artificial.Se nossos dois XMLs fossem combinados em um único documento, como distinguiríamos os dois nomes? Como você pode ver acima, existem dois
name
elementos, mas ambos têm significados diferentes.A resposta é que você e eu atribuímos um namespace ao nosso XML, que tornaríamos únicos:
Agora que qualificamos totalmente nosso XML, não há ambiguidade quanto ao
name
significado de cada elemento. Todas as tags que começam compersonxml:
pertencem ao seu XML, todas as que começam comcityxml:
são minhas.Há alguns pontos a serem observados:
Se você excluir quaisquer declarações de espaço para nome, as coisas serão consideradas no espaço para nome padrão.
Se você declarar um namespace sem o identificador, isto é,
xmlns="http://somenamespace"
em vez dexmlns:rob="somenamespace"
, ele especifica o namespace padrão para o documento.O próprio espaço para nome em si, geralmente um IRI , não tem conseqüências reais. Deve ser único, para que as pessoas tendam a escolher uma IRI / URI que possuem, mas não tem um significado maior que isso. Às vezes, as pessoas colocam o esquema (definição) para o XML no IRI especificado, mas isso é uma convenção apenas para algumas pessoas.
O prefixo também não tem importância. A única coisa que importa é em qual namespace o prefixo é definido. Várias tags que começam com prefixos diferentes, todas mapeadas para o mesmo espaço para nome são consideradas iguais.
Por exemplo, se os prefixos
personxml
e osmycityxml
dois foram mapeados para o mesmo espaço para nome (como no trecho de código abaixo), não importaria se você prefixasse um determinado elemento compersonxml
oumycityxml
, 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 com o namespace que ele mapeia. O prefixo é apenas um indireto apontando para o espaço para nome.Os atributos podem ser qualificados, mas geralmente não são. Eles também não herdam seu espaço de nome do elemento em que estão, ao contrário dos elementos (veja abaixo).
Além disso, os espaços para nome do elemento são herdados do elemento pai. Em outras palavras, eu poderia igualmente escrever o XML acima como
fonte
Acho que a maior confusão é que o espaço para nome 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 espaço para nome:
também poderia chamá-lo assim:
Este é apenas um identificador exclusivo. No entanto, está estabelecido que você deve colocar um URL exclusivo e potencialmente apontar para a especificação de tags / atributos usados nesse espaço para nome. Não é necessário tho.
Por que deveria ser único? Como o objetivo dos espaços para nome é torná-los exclusivos, para que o atributo, por exemplo, chamado segundo plano do seu espaço para nome, possa ser diferenciado do segundo plano de outro espaço para nome.
Por causa dessa singularidade, você não precisa se preocupar que, se você criar seu atributo personalizado, terá colisão de nomes.
fonte
xmlns - espaço para nome xml. É apenas um método para evitar conflitos de nome de elemento. Por exemplo:
Dois
node
elementos diferentes em um arquivo xml. Sem espaços para nome, esse arquivo não seria válido.fonte
Você tem espaços de nome para poder ter elementos globalmente exclusivos. No entanto, 99% do tempo isso realmente não importa, mas quando você o coloca na perspectiva da Web Semântica , ele começa a se tornar importante.
Por exemplo, você pode fazer um mash-XML de diferentes esquemas usando o apropriado
xmlns
. Por exemplo, mash up amigo de um amigo com vCard , etc.fonte