Язык программирования 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>
Примечание:
Пример
Названия пространств имен следуют в виде префиксов к названиям элементов. Эти названия — не просто имена. Они соответствуют идентификаторам, которые должны быть заданы в виде 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 можно из документации.
Заключение
В этой лекции были рассмотрены варианты обработки текстовой информации трех достаточно распространенных форматов: CSV, Unix mailbox и XML. Конечно, форматов данных, даже основанных на тексте, гораздо больше, однако то, что было представлено, поможет быстрее разобраться с любым модулем для обработки формата или построить свой модуль так, чтобы другие могли понять ваши намерения.
8. Лекция: Разработка Web–приложений.
Одна из главных сфер применения языка Python — web–приложения — представляется в этой лекции на конкретных примерах. Кроме того, делается акцент на типичных слабых местах безопасности web–приложений.
Под web–приложением будет пониматься программа, основной интерфейс пользователя которой работает в стандартном WWW–браузере под управлением HTML и XML–документов. Для улучшение качества интерфейса пользователя часто применяют JavaScript, однако это несколько снижает универсальность интерфейса. Следует заметить, что интерфейс можно построить на Java–или Flash–апплетах, однако, такие приложения сложно назвать web–приложениями, так как Java или Flash могут использовать собственные протоколы для общения с сервером, а не стандартный для WWW протокол HTTP.
При создании web–приложений стараются отделить Форму (внешний вид, стиль), Содержание и Логику обработки данных. Современные технологии построения web–сайтов дают возможность подойти достаточно близко к этому идеалу. Тем не менее, даже без применения многоуровневых приложений можно придерживаться стиля, позволяющего изменять любой из этих аспектов, не затрагивая (или почти не затрагивая) двух других. Рассуждения на эту тему будут продолжены в разделе, посвященном средам разработки.
CGI–сценарии
Классический путь создания приложений для WWW — написание CGI–сценариев (иногда говорят — скриптов). CGI (Common Gateway Interface, общий шлюзовой интерфейс) - это стандарт, регламентирующий взаимодействие сервера с внешними приложениями. В случае с WWW, web–сервер может направить запрос на генерацию страницы по определенному сценарию. Этот сценарий, получив на вход данные от web–сервера (тот, в свою очередь, мог получить их от пользователя), генерирует готовый объект (изображение, аудиоданные, таблицу стилей и т.п.).
При вызове сценария Web–сервер передает ему информацию через стандартный ввод, переменные окружения и, для ISINDEX, через аргументы командной строки (они доступны через sys.argv).
Два основных метода передачи данных из заполненной в браузере формы Web–серверу (и CGI–сценарию) - GET и POST. В зависимости от метода данные передаются по–разному. В первом случае они кодируются и помещаются прямо в URL, например:Сценарий получает их в переменной окружения с именем QUERY_STRING. В случае метода POST они передаются на стандартный ввод.