Я увидел следующую строку в файле XML:
xmlns:android="http://schemas.android.com/apk/res/android"
Я также видел xmlns
во многих других XML-файлах, которые мне попадались.
Что это?
Я увидел следующую строку в файле XML:
xmlns:android="http://schemas.android.com/apk/res/android"
Я также видел xmlns
во многих других XML-файлах, которые мне попадались.
Что это?
Ответы:
Он определяет пространство имен XML .
В вашем примере префикс пространства имен - « android », а URI пространства имен - « http://schemas.android.com/apk/res/android »
В документе вы видите такие элементы, как: <android:foo />
Думайте о префиксе пространства имен как о переменной с коротким псевдонимом имени для полного URI пространства имен. Это эквивалентно написанию в <http://schemas.android.com/apk/res/android:foo />
отношении того, что это «означает», когда XML-парсер читает документ.
ПРИМЕЧАНИЕ. На самом деле нельзя использовать полный URI пространства имен вместо префикса пространства имен в документе экземпляра XML.
Ознакомьтесь с этим руководством по пространствам имен: http://www.sitepoint.com/xml-namespaces-explained/
<LinearLayout
работает без префикса?
Это означает пространство имен XML .
По сути, каждый элемент (или атрибут) в XML принадлежит пространству имен, способу «квалифицировать» имя элемента.
Представь, что мы с тобой изобретаем свой собственный XML. Вы изобретаете XML, чтобы описывать людей, я изобретаю мой, чтобы описывать города. Мы оба включаем элемент под названиемname
. Ваше имя относится к имени человека, а мое - к названию города - хорошо, это немного надумано.
<person>
<name>Rob</name>
<age>37</age>
<homecity>
<name>London</name>
<lat>123.000</lat>
<long>0.00</long>
</homecity>
</person>
Если бы наши два XML-файла были объединены в один документ, как бы мы разделили два имени? Как вы можете видеть выше, есть два name
элемента, но оба они имеют разные значения.
Ответ заключается в том, что мы с вами оба назначим пространство имен нашему XML, которое мы сделаем уникальным:
<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>
Теперь мы полностью определили наш XML, нет никакой двусмысленности относительно того, что каждый name
означает элемент. Все теги, которые начинаются с, personxml:
являются тегами, принадлежащими вашему XML, все, что начинаются с cityxml:
моего.
Есть несколько моментов, на которые следует обратить внимание:
Если вы исключите какие-либо объявления пространства имен, считается, что все находится в пространстве имен по умолчанию.
Если вы объявляете пространство имен без идентификатора, то есть xmlns="http://somenamespace"
вместо xmlns:rob="somenamespace"
него указывается пространство имен по умолчанию для документа.
Само фактическое пространство имен, часто IRI , не имеет реальных последствий. Он должен быть уникальным, поэтому люди склонны выбирать собственный IRI / URI, но он не имеет большего значения, чем этот. Иногда люди помещают схему (определение) для XML в указанный IRI, но это соглашение только некоторых людей.
Префикс также не имеет значения. Единственное, что имеет значение, - это то, в каком пространстве имен указан префикс. Несколько тегов, начинающихся с разных префиксов, все из которых отображаются в одно и то же пространство имен, считаются одинаковыми.
Например, если префиксы personxml
и mycityxml
оба преобразуются в одно и то же пространство имен (как в приведенном ниже фрагменте), то не имеет значения, если вы префиксили данный элемент с помощью personxml
или mycityxml
, они оба будут обрабатываться синтаксическим анализатором XML как одно и то же. , Дело в том, что синтаксический анализатор XML не заботится о том, что вы выбрали в качестве префикса, а только отображает пространство имен, которое он отображает. Префикс - это просто косвенное указание на пространство имен.
<personxml:person
xmlns:personxml="http://example.com/same/url"
xmlns:mycityxml="http://example.com/same/url" />
Атрибуты могут быть квалифицированными, но обычно это не так. Они также не наследуют свое пространство имен от элемента, на котором они находятся, в отличие от элементов (см. Ниже).
Кроме того, пространства имен элемента наследуются от родительского элемента. Другими словами, я мог бы написать вышеупомянутый XML как
<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>
Я думаю, что самая большая путаница в том, что пространство имен xml указывает на какой-то URL, который не содержит никакой информации. Но правда в том, что человек, который изобрел ниже пространства имен:
xmlns:android="http://schemas.android.com/apk/res/android"
можно также назвать это так:
xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il"
Это просто уникальный идентификатор. Однако установлено, что вы должны поместить туда уникальный URL-адрес, который может указывать на спецификацию используемых тегов / атрибутов в этом пространстве имен. Это не обязательно, хотя.
Почему он должен быть уникальным? Поскольку пространство имен предназначено для того, чтобы они были уникальными, то атрибут, например, названный background, из вашего пространства имен можно отличить от фона. из другого пространства имен.
Из-за этой уникальности вам не нужно беспокоиться о том, что если вы создадите свой собственный атрибут, у вас будет конфликт имен.
xmlns - пространство имен xml. Это просто метод, позволяющий избежать конфликтов имен элементов. Например:
<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>
Два разных node
элемента в одном XML-файле. Без пространств имен этот файл был бы недействительным.
У вас есть пространства имен, чтобы вы могли иметь глобально уникальные элементы. Тем не менее, в 99% случаев это на самом деле не имеет значения, но когда вы рассматриваете это с точки зрения Семантической паутины , оно начинает становиться важным.
Например, вы можете создать XML-схему различных схем, просто используя соответствующие xmlns
. Например, разомкнуть друга друга с помощью vCard и т. Д.