Язык программирования Python

       

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


Еще одной интересной особенностью XML, о которой нельзя не упомянуть, являются пространства имен. Они позволяют составлять XML-документы из кусков различных схем. Например, таким образом в XML-документ можно включить кусок HTML, указав во всех элементах HTML принадлежность особому пространству имен.

Следующий пример XML-кода показывает синтаксис пространств имен (файл foaf.rdf):

<?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xmlns:dc="http://http://purl.org/dc/elements/1.1/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" > <rdf:Description rdf:nodeID="_:jCBxPziO1"> <foaf:nick>donna</foaf:nick> <foaf:name>Donna Fales</foaf:name> <rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"/> </rdf:Description> </rdf:RDF>

Примечание:

Пример позаимствован из пакета cwm, созданного командой разработчиков во главе с Тимом Бернерс-Ли, создателем технологии WWW. Кстати, cwm тоже написан на Python. Пакет cwm служит обработчиком данных общего назначения для семантической сети - новой идеи, продвигаемой Тимом Бернерс-Ли. Коротко суть идеи состоит в том, чтобы сделать современный "веб" много полезнее, формализовав знания в виде распределенной базы XML-документов, по аналогии с тем как WWW представляет собой распределенную базу документов. Отличие глобальной семантической сети от WWW в том, что она даст машинам возможность обрабатывать знания, делая логические выводы на основании заложенной в документах информации.

Названия пространств имен следуют в виде префиксов к названиям элементов. Эти названия - не просто имена. Они соответствуют идентификаторам, которые должны быть заданы в виде URI (Universal Resource Locator, универсальный указатель ресурса). В примере выше упоминаются пять пространств имен (xmlns, dc, rdfs, foaf и rdf), из которых только первое не требует объявления, так как является встроенным.
Из них реально использованы только три: (xmlns, foaf и rdf).

Пространства имен позволяют выделять из XML-документа части, относящиеся к различным схемам, что важно для тех инструментов, которые интерпретируют XML.

В пакете xml есть методы, понимающие механизм пространств имен. Обычно такие методы и атрибуты имеют в своем имени буквы NS.

Получить URI, который соответствует пространству имен данного элемента, можно с помощью атрибута namespaceURI.

В следующем примере печатается URI элементов:

import xml.dom.minidom dom = xml.dom.minidom.parse("ex.xml")

def output_ns(node): if node.nodeType == node.ELEMENT_NODE: print node.nodeName, node.namespaceURI for child in node.childNodes: output_ns(child)

output_ns(dom)

Пример выведет:

rdf:RDF http://www.w3.org/1999/02/22-rdf-syntax-ns# rdf:Description http://www.w3.org/1999/02/22-rdf-syntax-ns# foaf:nick http://xmlns.com/foaf/0.1/ foaf:name http://xmlns.com/foaf/0.1/ rdf:type http://www.w3.org/1999/02/22-rdf-syntax-ns#

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

Подробнее узнать о работе с пространствами имен в xml-пакетах для Python можно из документации.


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