Что означает" xmlns " в XML?
Я видел следующую строку в XML-файле:
xmlns:android="http://schemas.android.com/apk/res/android"
Я тоже видел xmlns
во многих других XML-файлах, с которыми я столкнулся.
что это?
6 ответов:
Он определяет пространство имен XML.
в вашем примере Префикс Пространства Имен это "android" и пространство имен URI is "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/
значит пространство имен 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>
если бы наши два XMLs были объединены в один документ, как бы мы различали эти два имени? Как вы можете видеть выше, есть два
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"
, он определяет пространство имен по умолчанию для документ.само фактическое пространство имен, часто a Мико, не имеет никакого реального значения. Он должен быть уникальным, поэтому люди склонны выбирать ИРИ/Ури, которыми они владеют, но это не имеет большего значения, чем это. Иногда люди будут размещать схему (определение) для 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>
пространство имен 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-файле. Без пространств имен этот файл не будет действительным.
Я думаю, что самая большая путаница заключается в том, что пространство имен xml указывает на какой-то URL-адрес, который не имеет никакой информации. Но правда в том, что человек, который придумал ниже пространство имен:
xmlns:android="http://schemas.android.com/apk/res/android"
можно также назвать это так:
xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il"
Это просто уникальный идентификатор. Однако установлено, что вы должны поместить туда URL-адрес, который является уникальным и потенциально может указывать на спецификацию используемых тегов/атрибутов в этом пространстве имен. Это не обязательно даже.
почему он должен быть уникальным? Потому что цель пространств имен - иметь их уникальными, поэтому атрибут, например, называется фон из пространства имен можно отличить от фон из другого пространства имен.
из-за этой уникальности вам не нужно беспокоиться, что если вы создаете свой собственный атрибут у тебя будет конфликт имен.
у вас есть пространства имен, так что вы можете иметь глобально уникальные элементы. Однако в 99% случаев это действительно не имеет значения, но когда вы ставите его в перспективе Семантический Веб, Это начинает становиться важным.
например, вы можете сделать XML-месиво из разных схем, просто используя соответствующий
xmlns
. Например, помять друга друга с vCard и т. д.
пространства имен XML укажите метод, позволяющий избежать конфликтов имен элементов. В XML-документах имена элементов не определено разработчиком. Это часто приводит к конфликту при попытке смешать XML-документы из разных XML-приложений.
конфликты имен в XML можно легко избежать, используя префикс имени.При использовании префиксов в XML необходимо определить пространство имен для префикса.
пространство имен может быть определено атрибутом xmlns в начальном теге элемента.Этот объявление пространства имен имеет следующий синтаксис. xmlns: prefix= "URI".