Языки информационного обмена

       

Декларация пространства имен


Поскольку в разных языках разметок - реализациях XML - могут встретится одни и те же имена тегов и их атрибутов, имеющие совершенно разный смысл, надо иметь возможность их как-то различать. Для этого имена тегов и атрибутов снабжают кратким префиксом, который отделяется от имени двоеточием. Префикс имени связывается с идентификатором, определяющим пространство имен (namespace). Все имена тегов и атрибутов, префиксы которых связаны с одним и тем же идентификатором, образуют одно пространство имен, в котором имена должны быть уникальны.

Поскольку необходимо, чтобы, встретив декларацию пространства имен каждый мог распознать ее, для него зарезервируем специальное слово. В соответствии с рекомендацией пространств имен, это слово xmlns. Значением атрибута является идентификатор URI, определяющий используемое пространство имен. Часто это адрес URL определения DTD, но так должно быть не всегда. Префикс и идентификатор пространства имен определяются атрибутом xmlns следующим образом:

<ntb:notebook xmlns:ntb = "http://some.firm.com/2003/ntbml">

Как видите, префикс ntb только что определен, но его уже можно использовать в имени ntb:notebook. В дальнейшем имена тегов и атрибутов, которые мы хотим отнести к пространству имен http://some.firm.com/2003/ntbml, снабжаются префиксом ntb, например:

<ntb:city ntb:type="поселок">Горелово</ntb:city>

Кроме того, в одном теге могут встречаться сразу несколько пространств имен. Ниже приводится пример смешения нескольких пространств имен:

<catalog:book order:ISBN = "1-861003-11-0">

Элемент book взят из пространства имен catalog, а атрибут ISBN - из order.

Имя вместе с префиксом, например

ntb:notebook

или

ntb:city

называется расширенным, уточенным или квалифицированным именем (OName. Qualified Name). Часть имени, записанная после двоеточия, называется локальной частью (local part) имени.

Номенклатура названий Web-ресурсов может запутать. Универсальный указатель ресурса (Uniform Resource Locator, URL) указывает на ресурс в терминах протокола доступа и расположения в сети.
Универсальный идентификатор ресурса ( Uniform Resource Identifier, URI) представляет собой уникальное имя некоторого ресурса. Смотрите на URI просто как на уникальную строку символов, идентифицирующую пространство имен.

По правилам SGML и XML, двоеточие может применяться в именах как обычный символ, поэтому имя с префиксом - это просто фокус, всякая программа, "не знающая" пространства имен, анализируя документ, рассматривает уточненное имя как обычное имя. Отсюда следует, в частности, что в объявлении типа документа (Document Type Declaration) нельзя опускать префиксы имен.

Атрибут xmlns может появиться в любом элементе XML, а не только в корневом. Определенный им префикс можно применять в том элементе, в котором записан атрибут xmlns, и во всех вложенных в него элементах. Более того, в одном элементе можно определить несколько пространств имен.

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

Появление имени тега без префикса в документе, использующем пространство имен, означает, что имя принадлежит пространству имен по умолчанию (default namespace).

Хорошо оформленный документ должен использовать пространств имен для всех своих элементов.

Префиксы, начинающиеся с символов xml с любым регистром букв, зарезервированы за самим языком XML. Префикс xmlns используется для связи другого, определяемого, префикса с идентификатором его пространства имен. Префикс xmlns не нужно определять, он введен рекомендацией "Namespaces in XML" и связан там с идентификатором пространства имен http://www.w3.ori/2000 /xmlns/.

Еще один префикс, xml, связан в той же рекомендации с идентификатором http://www.w3.org/XML/1998/namespace. Его тоже не надо определять в документе XML. Никакой другой префикс не может быть связан с этими идентификаторами.

Пока есть только два атрибута с префиксом xml. Для каждого элемента верного документа, в котором используются эти атрибуты, они должны быть объявлены в описании DTD (Document Type Definition).

Атрибут xml:lang определяет язык, используемый в содержимом элемента. Например, xml:lang="us", xml:lang="en-US", xml:lang="ru-RU". Атрибут можно использовать так:

<р xml:lang="ru_RU" >3апись на русском языке</р>

Атрибут xml:space указывает программе-обработчику, как следует обрабатывать пробельные символы (пробелы, знаки горизонтальной табуляции и символы перевода строки), записанные в содержимом элемента. У атрибута есть всего два значения. Значение preserve предписывает сохранять пробельные символы в неприкосновенности. Это важно для некоторых текстов, например, программных кодов. Значение default оставляет пробельные символы на усмотрение программы-обработчика.


Содержание раздела