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

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

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

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

Что это?

Ответ 1

Он определяет пространство имен XML.

В вашем примере Префикс пространства имен - это "андроид", а 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/

Ответ 2

Это означает пространство имен 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>

Ответ 3

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 файле. Без пространств имен этот файл недействителен.

Ответ 4

Я думаю, что самая большая путаница в том, что пространство имен xml указывает на какой-то URL-адрес, который не имеет никакой информации. Но правда в том, что человек, который придумал ниже пространства имен:

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

также может называть его следующим:

xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il"

Это просто уникальный идентификатор. Однако установлено, что вы должны поместить туда уникальный URL-адрес, который может указывать на спецификацию используемых тегов/атрибутов в этом пространстве имен. Это не требуется.

Почему он должен быть уникальным? Поскольку целью пространств имен является их уникальность, поэтому атрибут, например, называемый фоном из вашего пространства имен, можно отличить от фона из другого пространства имен.

Из-за этой уникальности вам не нужно беспокоиться о том, что если вы создадите свой собственный атрибут, у вас будет столкновение имен.

Ответ 5

У вас есть пространства имен, поэтому вы можете иметь глобально уникальные элементы. Тем не менее, в 99% случаев это не имеет особого значения, но когда вы ставите его в точку зрения The Semantic Web, он начинает становятся важными.

Например, вы можете создать XML-разметку различных схем, используя соответствующий xmlns. Например, перепутайте друга друга с vCard и т.д.

Ответ 6

Пространства имен XML предоставляют метод, позволяющий избежать конфликтов имен элементов. В XML имена элементов определяются разработчиком. Это часто приводит к конфликту при попытке объединить XML-документы из разных приложений XML.

Конфликты имен в XML можно легко избежать, используя префикс имени. При использовании префиксов в XML необходимо определить пространство имен для префикса.

Пространство имен может быть определено атрибутом xmlns в начальном теге элемента. Объявление пространства имен имеет следующий синтаксис. XMLNS:. Префикс = "URI"