ПРОСТРАНСТВО ИМЕН (NameSpace) XML

Г.Е. Берман berman@tversu.ru

Данная работа является лекцией курса " XML технологии", который читает автор студентам кафедры "Информационных систем и технологий" факультета "Прикладной математики" Тверского государственного университета.

 

Оглавление

Постановка проблемы

Понятие пространства имен

Задание пространства имен в XML документе

Связывание элементов и атрибутов XML документа с пространством имен.

Пример задания пространства имен.

Ссылки

 

Постановка проблемы

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

Возьмем известную всем с детства скороговорку: "Запер замок на замок, чтобы замок не замок". Мы видим – слово замок употребляется четыре раза, в трех совершенно разных смыслах: 1) здание; 2) устройство, обеспечивающее защиту входа; 3) результат действия попадания воды.

Еще один пример, но уже из английского языка. Возьмем слово down. Оно может обозначать существительное а) возвышенность; б)  центральную, деловую часть города, а также наречие вниз, которое несет противоположенную смысловую нагрузку варианту а). Также слово down может переводиться и как существительное пух  (например, тополиный пух).

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

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

Разбирая примеры, мы основывались на том, что человек интуитивно понимает, в каком контексте используется слово и скрывающееся за ним понятие, но компьютерная программа, которая будет обрабатывать XML документ не человек. Для нее контекст, определяющий понятия, которые используются в XML документе, должен быть задан четко. Все проблемы неясностей и коллизий имен должны быть решены.

Понятие пространства имен

В предыдущем разделе мы в основном говорили о контексте относительно конкретных слов и понятий. Однако контекст слова или понятия формируется не абстрактно, а зависит от предметной области, к которой он принадлежит. Например, если мы берем предметную область "локальные сети", то под словом сеть будет пониматься компьютерная сеть, охватывающая небольшую территорию, обладающая определенной топологией, скоростью передачи.

В XML технологии множество понятий (элементов, атрибутов), принадлежащих определенной предметной области, характеризуется понятием пространство имен (NameSpace). Согласно спецификации W3C http://www.w3.org/TR/1999/REC-xml-names-19990114 "пространство имен XML - это идентифицируемая с помощью ссылки URI [RFC2396] коллекция имен, используемых в XML документах для обозначения типов элементов и именования атрибутов" (перевод с www.online.ru/it/helpdesk/xnamsps.htm).

В предыдущих лекциях по технологии XML мы говорили, что типы элементов и атрибутов для XML документов задаются с помощью словарей, разработанных на основе спецификаций DTD (Document Type Definition) или XML Schema. Поэтому, казалось бы, определим через URI местоположение конкретного словаря и пространство имен задано. На самом деле все немного запутаннее.

Как видно из определения пространства имен, приведенного выше, оно идентифицируется ссылкой, т.е. ссылка в виде URI является не указателем местоположения DTD или Schema XML, а идентификатором, который фиксирует уникальность пространства имен. Поясним сказанное на примере. Предположим, нам необходимо задать пространство имен для XML документа, описывающего предметную область "программное обеспечение локальных сетей". Мы можем задать URI: "http://www.network.com/lan/soft"/. С точки зрения спецификации пространства имен это совсем не означает, что по указанному адресу находится словарь в виде DTD или XML Schema, описывающий необходимые элементы и атрибуты. Приведенный адрес - это уникальный идентификатор, который в XML документе будет однозначно квалифицировать имена, относящиеся к предметной области "программное обеспечение локальных сетей". В принципе, задать уникальный идентификатор можно и каким-либо другим способом, например, методом последовательных уточнений, используя в качестве разделителя точку: "network.lan.soft".

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

Задание пространства имен в XML документе

При задании пространства имен в XML документе необходимо иметь в виду следующее:

·       элементы и атрибуты связываются с пространством имен с помощью квалифицированных имен;

·       в одном XML документе может быть задано несколько пространств имен;

·       область действия пространства имен может распространяться:

o     на весь документ;

o     контейнер;

o     отдельный элемент или атрибут.

Область действия пространства имен распространяется на весь документ, когда оно задано в корневом элементе XML документа.

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

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

Пример для всех трех способов задания области действия пространства имен дан в следующем разделе.

Связывание элементов и атрибутов XML документа с пространством имен.

Для объявления пространства имен в XML документе используется ключевое слово xmlns. Синтаксис объявления имеет следующий формат:

xmlns[:prefix]="uri"

где:

prefix – это квалифицированное имя, посредством которого элементы и атрибуты XML документа связываются с пространством имен;

uri – это URI, задающий пространство имен, которое будет использоваться в XML документе.

В том случае, если параметр prefix не задан, то объявленное пространство имен будет использоваться как пространство имен по умолчанию.

Пример задания пространства имен.

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

Примечание 1. Данный пример не является реальным XML документом, и предназначен только для объяснения правил задания и области действия пространства имен.

Примечание 2. Цифры справа не являются частью примера, и служат для идентификации строк.

<?xml version="1.0" encoding="Windows-1251"?>

1

<network xmlns:net ="http://www.network.com/lan"

2

        xmlns ="http://www.server.com">

3

         <softlan>

4

                <net:protocol> … </net:protocol>

5

                <protocol> … <protocol>

6

               <firm_protocol xmlns:frm="http://firm.network.com">

7

                     <frm:protocol> … </frm:protocol>

8

                     <protocol> … </protocol>

9

              </firm_protocol>                                                        

10

              <server> … <server>

11

         </softlan>

12

         <hardlan xmlns:hard="http://www.hard.com/lan"

13

                        xmlns="http://www.firm.com">

14

              <hard:protocol>

15

                      <protocol net:lan="Ethernet">CSMA/CD</protocol>

16

             </hard:protocol>

17

         </hardlan>

18

</network>

19

 

Строки 2 и 3 представляют корневой элемент документа network, в котором заданы два пространства имен. Их действие распространяется на весь XML документ. Первое пространство имен идентифицируется префиксом net, второе пространство имен префикса не имеет, т.е. является пространством имен по умолчанию.

Строка 5 описывает элемент protocol, входящий в пространство имен http://www.network.com/lan, которое задано в строке 2, поскольку он идентифицируется префиксом net.

Строка 6 также описывает элемент protocol, но он не имеет префикса, следовательно, относится к пространству имен по умолчанию http://www.server.com, которое задано в строке 3.

Строка 7 задает пространство имен, идентифицируемое префиксом frm. Данное пространство имен распространяется на элемент firm и вложенные в него элементы и атрибуты.

Строка 8 описывает элемент protocol, который относится к пространству имен http://firm.network.com, которое задано в строке 7, т.к. идентифицируется префиксом frm.

Строка 9 описывает элемент protocol. Данный элемент protocol не имеет префикса, следовательно, он относится к пространству имен по умолчанию http://www.server.com, которое задано в строке 3.

Строки 13 и 14 представляют элемент hardlan, в котором заданы два пространства имен, действие которых распространяется элемент hardlan и все и вложенные в него элементы и атрибуты. Первое пространство имен идентифицируется префиксом hard. Второе пространство имен префикса не имеет, т.е. является пространством имен по умолчанию, которое в контейнере hardlan переопределяет пространство имен по умолчанию, заданное в строке 3.

Строка 15 описывает элемент protocol, который относится к пространству имен http://www.hard.com/lan, которое задано в строке 13, т.к. идентифицируется префиксом hard.

Строка 16 описывает элемент protocol. Данный элемент protocol не имеет префикса, следовательно, он относится к пространству имен по умолчанию. В этом месте XML документа действует пространство имен по умолчанию  http://www.firm.com, которое задано в строке 14. Атрибут lan со сначением Ethernet относится к пространству имен net.

Ссылки

Ниже представлен ряд ссылок на наиболее полезные документы по проблеме пространства имен. Следует иметь ввиду, что спецификации по XML технологиям обновляются часто, поскольку это очень быстро развивающееся направление. Ссылки приведены на последние версии документов, которые существовали на момент написания лекции.

Спецификация пространства имен W3C Working Draft 5 September 2002 находится по адресу: http://www.w3.org/TR/2002/WD-xml-names11-20020905.

На русском языке имеется перевод W3C Working Draft 14 January  1999, который находится по адресу: http://www.online.ru/it/helpdesk/xnamsps.htm.

Одна из лучших публикаций, посвященных объяснению проблем использования пространства имен – FAQ, поддерживаемый  Ronald Bourret. На момент написания данного документа опубликована версия с обновлениями от октября 2002. FAQ находится по адресу:

http://www.rpbourret.com/xml/NamespacesFAQ.htm.

 

Используются технологии uCoz