Пространства имен XML используются для предоставления уникально именованных элементов и атрибутов в документе XML . Они определены в рекомендации W3C . [1] [2] Экземпляр XML может содержать имена элементов или атрибутов из более чем одного словаря XML. Если каждому словарю дано пространство имен , неоднозначность между одинаково именованными элементами или атрибутами может быть разрешена.
Простым примером может служить рассмотрение экземпляра XML, содержащего ссылки на клиента и заказанный продукт. Как элемент клиента, так и элемент продукта могут иметь дочерний элемент с именем id . Поэтому ссылки на элемент id будут неоднозначными; размещение их в разных пространствах имен устранит неоднозначность.
Имя пространства имен — это унифицированный идентификатор ресурса (URI). Обычно URI, выбранный для пространства имен данного словаря XML, описывает ресурс, находящийся под контролем автора или организации, определяющей словарь, например URL веб-сервера автора. Однако спецификация пространства имен не требует и не предполагает, чтобы URI пространства имен использовался для извлечения информации; он просто обрабатывается парсером XML как строка. Например, документ по адресу http://www.w3.org/1999/xhtml сам по себе не содержит никакого кода. Он просто описывает пространство имен XHTML для людей-читателей. Использование URI (например, "http://www.w3.org/1999/xhtml") для идентификации пространства имен вместо простой строки (например, "xhtml") снижает вероятность того, что разные пространства имен будут использовать дублирующие идентификаторы.
Хотя термин URI пространства имен широко распространен, Рекомендация W3C ссылается на него как на имя пространства имен . Спецификация не полностью предписывает точные правила для имен пространств имен (она явно не говорит, что парсеры должны отклонять документы, в которых имя пространства имен не является допустимым унифицированным идентификатором ресурса ), и многие парсеры XML позволяют использовать любую строку символов. В версии 1.1 рекомендации имя пространства имен становится интернационализированным идентификатором ресурса , который лицензирует использование не-ASCII символов, которые на практике уже были приняты почти всем программным обеспечением XML. Термин URI пространства имен сохраняется, однако, не только в популярном использовании, но и во многих других спецификациях от W3C и других источников.
После публикации рекомендации Namespaces начались интенсивные дебаты о том, как следует обрабатывать относительный URI, при этом некоторые активно утверждали, что его следует просто рассматривать как строку символов, а другие убежденно утверждали, что его следует превратить в абсолютный URI, разрешив его относительно базового URI документа. [3] Результатом дебатов стало решение W3C об устарелости относительных URI. [4]
Использование URI в форме URL в схеме http (например, http://www.w3.org/1999/xhtml ) является обычным явлением, несмотря на отсутствие какой-либо формальной связи с протоколом HTTP. В спецификации пространств имен не говорится, что должно произойти, если такой URL разыменовывается (то есть, если программное обеспечение пытается получить документ из этого местоположения). Одно из соглашений, принятых некоторыми пользователями, заключается в размещении документа RDDL в этом местоположении. [5] Однако в целом пользователи должны предполагать, что URI пространства имен — это просто имя, а не адрес документа в Интернете.
Пространство имен XML объявляется с помощью зарезервированного атрибута XML xmlns
или , значение которого должно быть допустимым именем пространства имен.xmlns:prefix
Например, следующее объявление сопоставляет префикс «xhtml:» с пространством имен XHTML:
xmlns:xhtml="http://www.w3.org/1999/xhtml"
Любой элемент или атрибут, имя которого начинается с префикса «xhtml:», считается находящимся в пространстве имен XHTML, если он или его предок имеет указанное выше объявление пространства имен.
Также возможно объявить пространство имен по умолчанию. Например:
xmlns="http://www.w3.org/1999/xhtml"
В этом случае любой элемент без префикса пространства имен считается находящимся в пространстве имен XHTML, если он или его предок имеет указанное выше объявление пространства имен по умолчанию.
Если в области действия нет объявления пространства имен по умолчанию, имя пространства имен не имеет значения. [6] В этом случае элемент без явного префикса пространства имен считается не находящимся ни в одном пространстве имен.
Атрибуты никогда не подчиняются пространству имен по умолчанию. Атрибут без явного префикса пространства имен считается не находящимся ни в одном пространстве имен.
Различные спецификации используют разные подходы к представлению информации о пространстве имен в приложениях.
Почти все модели программирования позволяют извлекать имя элемента или узла атрибута как трехкомпонентное имя: локальное имя, префикс пространства имен и URI пространства имен. Приложениям следует избегать придания какого-либо значения выбору префикса, но информация предоставляется, поскольку она может быть полезна для людей-читателей. Имена считаются равными, если URI пространства имен и локальное имя совпадают.
Кроме того, большинство моделей предоставляют некоторый способ определения того, какие пространства имен были объявлены для данного элемента. Эта информация необходима, поскольку некоторые словари XML позволяют квалифицированным именам (содержащим префиксы пространств имен) появляться в содержимом элементов или атрибутов, а также в их именах. Существует три основных способа предоставления этой информации: