Что означает" xmlns " в XML?


Я видел следующую строку в XML-файле:

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

Я тоже видел xmlns во многих других XML-файлах, с которыми я столкнулся.

что это?

6 364

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".