Введение
Метод предоставления уникальных элементов и атрибутов в документе XML
XML namespaces are used for providing uniquely named elements and attributes in an XML document. They are defined in a W3C recommendation. An XML instance may contain element or attribute names from more than one XML vocabulary. If each vocabulary is given a namespace, the ambiguity between identically named elements or attributes can be resolved. A simple example would be to consider an XML instance that contained references to a customer and an ordered product. Both the customer element and the product element could have a child element named id. References to the id element would therefore be ambiguous; placing them in different namespaces would remove the ambiguity.
Пространства имен XML используются для обеспечения уникальности имен элементов и атрибутов в документе XML. Они определены в рекомендации W3C. Экземпляр XML может содержать имена элементов или атрибутов из нескольких словарей XML. Если каждому словарю присвоено пространство имен, то неоднозначность между элементами или атрибутами с одинаковыми именами может быть устранена. Простым примером может служить экземпляр XML, содержащий ссылки на клиента и заказанный продукт. И элемент "клиент", и элемент "продукт" могут иметь дочерний элемент с именем id. Ссылки на элемент id были бы неоднозначными; помещение их в разные пространства имен позволило бы устранить эту неоднозначность.
XML namespaces are used for providing uniquely named elements and attributes in an XML document. They are defined in a W3C recommendation. An XML instance may contain element or attribute names from more than one XML vocabulary. If each vocabulary is given a namespace, the ambiguity between identically named elements or attributes can be resolved. A simple example would be to consider an XML instance that contained references to a customer and an ordered product. Both the customer element and the product element could have a child element named id. References to the id element would therefore be ambiguous; placing them in different namespaces would remove the ambiguity.
Имена пространства имен
Имя пространства имен — это идентификатор единого ресурса (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 документа. Результатом дискуссии стало решение W3C о том, что использование относительных URI не рекомендуется. Распространено использование URI в форме URL-адресов со схемой http (например, http://www.w3.org/1999/xhtml), несмотря на отсутствие какой-либо формальной связи с протоколом HTTP. Спецификация Namespaces не определяет, что должно произойти, если такой URL-адрес будет разрешен (то есть, если программное обеспечение попытается получить документ по этому адресу). Некоторые пользователи приняли практику размещения документа RDDL по этому адресу. Однако в целом пользователи должны исходить из того, что URI пространства имен — это просто имя, а не адрес документа в сети.
Пространства имен в API и XML-моделях объектов
Различные спецификации применяют различные подходы к представлению информации о пространствах имен приложениям. Практически во всех моделях программирования можно получить имя элемента или узла атрибута в виде трех частей: локальное имя, префикс пространства имен и URI пространства имен. Приложениям следует избегать придания какого-либо значения выбору префикса, однако эта информация предоставляется, поскольку она может быть полезна для людей, читающих код. Имена считаются равными, если URI пространства имен и локальное имя совпадают. Кроме того, большинство моделей предоставляют способ определения, какие пространства имен были объявлены для данного элемента. Эта информация необходима, поскольку некоторые XML-словари допускают использование квалифицированных имен (содержащих префиксы пространств имен) как в содержимом элементов или атрибутов, так и в их именах. Существует три основных способа предоставления этой информации:
В виде узлов атрибутов с именами "xmlns" или "xmlns:xxx", точно так же, как пространства имен записаны в исходном XML-документе. Это модель, реализованная в DOM. В виде деклараций пространств имен: они отличаются от атрибутов, но соответствуют один к одному соответствующим атрибутам в исходном XML-документе. Это модель, реализованная в JDOM. В виде связей пространств имен в области видимости: в этой модели приложение может определить, какие пространства имен находятся в области видимости для любого данного элемента, но не может определить, какие элементы содержат фактические объявления. Это модель, используемая в XPath, XSLT и XQuery.