Какова цель создания пространств имен XML?
Пространства имен XML созданы для того, чтобы присваивать каждому элементу и атрибуту уникальное имя. Это позволяет выполнять целый ряд действий, таких как:
- объединять фрагменты различных документов без возникновения конфликтов имен (см. пример ниже);
- писать модули кодов, которые могут многократно использоваться и вызываться для определенных элементов и атрибутов. Уникальные имена гарантируют, что такие модули будут вызываться только для необходимых элементов и атрибутов;
- определять элементы и атрибуты, которые могут использоваться в других схемах или реальных документах без опасности вызвать конфликт имен. Например, элементы XHTML могут использоваться в каталоге запчастей для их описания, а нулевые атрибуты, определенные в схемах XML, - для обозначения пропущенных значений.
Автор советует обратить внимание на следующий пример. Представленная проблема состоит в том, что элемент Address появляется в двух отдельных документах в двух различных контекстах и при этом имеет различные значения.
В таком случае возникает следующий вопрос:
Это не является проблемой, пока данные типы элементов существуют только в отдельных документах. Но что произойдет, если они будут объединены в рамках одного документа, например, списка отделов с адресами и web-серверами?
Это - постановка проблемы, а ниже приведен пример разрешения неоднозначности общего элемента при объединении двух документов.
Объединенный документ выглядит следующим образом.
Листинг 1. Объединенный документ с пространствами имен
<Department> <Name>DVS1</Name> <addr:Address xmlns:addr="http://www.tu-darmstadt.de/ito/addresses"> <addr:Street>Wilhelminenstr. 7</addr:Street> <addr:City>Darmstadt</addr:City> <addr:State>Hessen</addr:State> <addr:Country>Germany</addr:Country> <addr:PostalCode>D-64285</addr:PostalCode> </addr:Address> <serv:Server xmlns:serv="http://www.tu-darmstadt.de/ito/servers"> <serv:Name>OurWebServer</serv:Name> <serv:Address>123.45.67.8</serv:Address> </serv:Server> </Department>
А вот тот же самый документ без пространств имен. В нем отчетливо видны проблемы, связанные с распознаванием и конфликтом имен.
Листинг 2. Объединенный документ без пространств имен
<Department> <Name>DVS1</Name> <Address> <Street>Wilhelminenstr. 7</Street> <City>Darmstadt</City> <State>Hessen</State> <Country>Germany</Country> <PostalCode>D-64285</PostalCode> </Address> <Server> <Name>OurWebServer</Name> <Address>123.45.67.8</Address> </Server> </Department>
Справедливости ради стоит подчеркнуть, что второй документ выглядит менее двусмысленным, а различные использования элемента Address вряд ли способны внести путаницу в программное обеспечение.