XML - статьи

Более интересные примеры


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

Первый вариант - использование пространств имен как метода идентификации типов документов или управления их версиями. Достаточно распространенными являются следующие конструкции: <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">

Это пример самого верхнего тэга сообщения SOAP 1.2. Здесь пространство имен выполняет важную задачу. Оно информирует потребителя, что данный элемент XML является конвертом SOAP, связан с международным консорциумом W3C (World Wide Web Consortium) и соответствует версии спецификации, принятой в мае 2003 г. Это, безусловно, более информативно, чем альтернативный тэг без пространства имени: <Envelope>.

Итак, данный пример выглядит как один из случаев оправданного использования пространств имен. Но так ли это? Идентификация, безусловно, необходима, но ее можно осуществить и без пространств имен. Все, что для этого требуется, - атрибут и соглашение, подобное следующему: идентифицировать документы с помощью атрибута documentIdentifier в самом верхнем тэге: <Envelope documentIdentifier="http://www.w3.org/2003/05/soap-envelope">

Можно рассмотреть другой пример. Пространства имен широко используются для обеспечения уникальных идентификаторов типов. Нередко встречаются фрагменты XML, подобные следующему: <element name="cost" type="xsd:float"/>

или <element name="greeting" type="SOAP-ENC:string"/>

Здесь xsd и SOAP-ENC - идентификаторы пространства имен, которые относятся к типам схемы XML (XSD) и кодировки SOAP, соответственно. Таким образом, cost является элементом типа float, определяемого в соответствии с XSD, а greeting - элементом типа string, определяемого в соответствии со спецификацией кодировки SOAP. Вот еще похожий пример: <cost xsi:type="xsd:float">29.95</cost>


Эта запись обозначает, что элемент cost имеет определенный тип, определяемый XSI, а также то, что float является типом, определяемым XSD. Ключевым моментом является то, что каждому типу действительно требуются исключительные идентификаторы, не привязанные к контексту. Здесь не происходит объединения одного документа с другим, имеющим кодировку XSD или SOAP. Просто определенные элементы в каждой из спецификаций, используемых в документе, имеют собственные обозначения. Спецификация даже не обязательно должна быть написана на XML, поскольку речь идет о плоской структуре, просто списке типов. Если структура типа является иерархической, тогда нужно полностью указать путь к нему: <cost xsi:type="xsd:/types/simple/float">29.95</cost>

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

Возможно, и этот пример не является достаточно обоснованным случаем для использования пространств имен XML, но все-таки некоторая их польза очевидна. Это можно обобщить следующим образом: метод для установления связи между атрибутами элементов и внешними ориентирами представляется полезным. Сам элемент не нуждается в пространстве имен, но для его атрибутов это может быть необходимо.

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


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