Vi la siguiente línea en un archivo XML:
xmlns:android="http://schemas.android.com/apk/res/android"
También he visto xmlns
en muchos otros archivos XML que he encontrado.
¿Qué es?
Vi la siguiente línea en un archivo XML:
xmlns:android="http://schemas.android.com/apk/res/android"
También he visto xmlns
en muchos otros archivos XML que he encontrado.
¿Qué es?
Respuestas:
Define un espacio de nombres XML .
En su ejemplo, el prefijo del espacio de nombres es " android " y el URI del espacio de nombres es " http://schemas.android.com/apk/res/android "
En el documento, ve elementos como: <android:foo />
Piense en el prefijo del espacio de nombres como una variable con un alias de nombre corto para el URI del espacio de nombres completo. Es el equivalente de escribir <http://schemas.android.com/apk/res/android:foo />
con respecto a lo que "significa" cuando un analizador XML lee el documento.
NOTA: en realidad no puede utilizar el URI de espacio de nombres completo en lugar del prefijo de espacio de nombres en un documento de instancia XML.
Consulte este tutorial sobre espacios de nombres: http://www.sitepoint.com/xml-namespaces-explained/
<LinearLayout
trabajos sin prefijo?
Significa espacio de nombres XML .
Básicamente, cada elemento (o atributo) en XML pertenece a un espacio de nombres, una forma de "calificar" el nombre del elemento.
Imagina que tú y yo inventamos nuestro propio XML. Inventa XML para describir personas, yo invento el mío para describir ciudades. Ambos incluimos un elemento llamado name
. El tuyo se refiere al nombre de la persona, y el mío al nombre de la ciudad. De acuerdo, es un poco artificial.
<person>
<name>Rob</name>
<age>37</age>
<homecity>
<name>London</name>
<lat>123.000</lat>
<long>0.00</long>
</homecity>
</person>
Si nuestros dos XML se combinaran en un solo documento, ¿cómo distinguiríamos los dos nombres? Como puede ver arriba, hay dos name
elementos, pero ambos tienen significados diferentes.
La respuesta es que usted y yo asignaríamos un espacio de nombres a nuestro XML, que haríamos único:
<personxml:person xmlns:personxml="http://www.your.example.com/xml/person"
xmlns:cityxml="http://www.my.example.com/xml/cities">
<personxml:name>Rob</personxml:name>
<personxml:age>37</personxml:age>
<cityxml:homecity>
<cityxml:name>London</cityxml:name>
<cityxml:lat>123.000</cityxml:lat>
<cityxml:long>0.00</cityxml:long>
</cityxml:homecity>
</personxml:person>
Ahora que hemos calificado completamente nuestro XML, no hay ambigüedad en cuanto a lo name
que significa cada elemento. Todas las etiquetas que comienzan personxml:
son etiquetas que pertenecen a su XML, todas las que comienzan cityxml:
son mías.
Hay algunos puntos a tener en cuenta:
Si excluye cualquier declaración de espacio de nombres, se considera que las cosas están en el espacio de nombres predeterminado.
Si declara un espacio de nombres sin el identificador, es decir xmlns="http://somenamespace"
, en lugar de xmlns:rob="somenamespace"
, especifica el espacio de nombres predeterminado para el documento.
El espacio de nombres en sí, a menudo un IRI , no tiene ninguna consecuencia real. Debe ser único, por lo que las personas tienden a elegir un IRI / URI que poseen, pero no tiene mayor significado que eso. A veces las personas colocan el esquema (definición) para el XML en el IRI especificado, pero eso es una convención de algunas personas solamente.
El prefijo tampoco tiene consecuencias. Lo único que importa es en qué espacio de nombres se define el prefijo. Varias etiquetas que comienzan con diferentes prefijos, todas las cuales se asignan al mismo espacio de nombres se consideran iguales.
Por ejemplo, si los prefijos personxml
y mycityxml
ambos se asignan al mismo espacio de nombres (como en el fragmento a continuación), entonces no importaría si prefijaste un elemento dado con personxml
o mycityxml
, ambos serían tratados como lo mismo por un analizador XML . El punto es que a un analizador XML no le importa lo que haya elegido como prefijo, solo el espacio de nombres que asigna. El prefijo es solo una indirección que apunta al espacio de nombres.
<personxml:person
xmlns:personxml="http://example.com/same/url"
xmlns:mycityxml="http://example.com/same/url" />
Los atributos pueden ser calificados pero generalmente no lo son. También hacen no heredan su espacio de nombres del elemento que se encuentran, en contraposición a los elementos (véase más adelante).
Además, los espacios de nombres de elementos se heredan del elemento padre. En otras palabras, también podría haber escrito el XML anterior como
<person xmlns="http://www.your.example.com/xml/person">
<name>Rob</name>
<age>37</age>
<homecity xmlns="http://www.my.example.com/xml/cities">
<name>London</name>
<lat>123.000</lat>
<long>0.00</long>
</homecity>
</person>
Creo que la mayor confusión es que el espacio de nombres xml apunta a algún tipo de URL que no tiene ninguna información. Pero la verdad es que la persona que inventó debajo del espacio de nombres:
xmlns:android="http://schemas.android.com/apk/res/android"
También podría llamarlo así:
xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il"
Esto es solo un identificador único. Sin embargo, se establece que debe colocar una URL que sea única y que potencialmente pueda apuntar a la especificación de etiquetas / atributos usados en ese espacio de nombres. No es necesario aunque.
¿Por qué debería ser único? Debido a que el propósito de los espacios de nombres es tenerlos únicos para que el atributo, por ejemplo llamado fondo de su espacio de nombres, pueda distinguirse del fondo de otro espacio de nombres.
Debido a esa singularidad, no debe preocuparse de que si crea su atributo personalizado tendrá colisión de nombres.
xmlns: espacio de nombres xml. Es solo un método para evitar conflictos de nombres de elementos. Por ejemplo:
<config xmlns:rnc="URI1" xmlns:bsc="URI2">
<rnc:node>
<rnc:rncId>5</rnc:rncId>
</rnc:node>
<bsc:node>
<bsc:cId>5</bsc:cId>
</bsc:node>
</config>
Dos node
elementos diferentes en un archivo xml. Sin espacios de nombres, este archivo no sería válido.
Tiene espacios de nombre para que pueda tener elementos únicos a nivel mundial. Sin embargo, el 99% de las veces esto realmente no importa, pero cuando lo pones en la perspectiva de la Web Semántica , comienza a ser importante.
Por ejemplo, puede hacer una combinación XML de diferentes esquemas simplemente usando el apropiado xmlns
. Por ejemplo, mezcla a un amigo con vCard , etc.