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

У меня была эта проблема с SOA-системой, написанной на Java. Я работал как с клиентом, так и с сервером на разных физических машинах, и они отлично работали в течение длительного времени, затем эти неприятные сбрасывания соединений появились в журнале клиентов, и в журнале сервера не было ничего странного. Перезапуск клиента и сервера не помогло решить проблему. Наконец, мы обнаружили, что куча на стороне сервера была довольно полной, поэтому мы увеличили доступную память для JVM: проблема решена! Обратите внимание, что в журнале не было OutOfMemoryError: память была просто скудной, а не исчерпанной.

393
задан ROMANIA_engineer 7 March 2017 в 22:42
поделиться

3 ответа

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

В вашем примере префикс пространства имен - « android », а URI пространства имен - « http://schemas.android.com / apk / res / android "

В документе вы видите такие элементы, как:

Считайте префикс пространства имен переменной с коротким псевдонимом для полного URI пространства имен. Это эквивалент записи в отношении того, что «означает», когда синтаксический анализатор XML читает документ.

ПРИМЕЧАНИЕ: Вы не можете фактически использовать полный URI пространства имен вместо префикса пространства имен в документе экземпляра XML.

Ознакомьтесь с этим руководством по пространствам имен: http://www.sitepoint.com/xml-namespaces-explained/

289
ответ дан 22 November 2019 в 23:41
поделиться

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

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

4
ответ дан 22 November 2019 в 23:41
поделиться

Это означает пространство имен 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 не заботится о том, что вы выбрали в качестве префикса, а только о пространстве имен, которое он отображает. 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>
653
ответ дан 22 November 2019 в 23:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: