Опубликован: 08.08.2007 | Доступ: свободный | Студентов: 1670 / 176 | Оценка: 3.86 / 3.76 | Длительность: 11:46:00
Специальности: Программист
Лекция 3:

Синтаксис XML

< Лекция 2 || Лекция 3: 123 || Лекция 4 >

Инструкции по обработке.

Инструкции по обработке содержат указания программе анализатору документа XML. Инструкции по обработке заключаются между символами <? и ?>. Сразу за начальным вопросительным знаком записывается имя программного модуля, которому предназначена инструкция. Затем, через пробел, идет сама инструкция, передаваемая программному модулю. Сама инструкция это обычная строка, которая не должна содержать набор символов "?>", означающий конец инструкции. Примером инструкции по обработке может служить строка объявления XML:

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

Эта инструкция предназначена программе, обрабатывающей документ XML. Инструкция передает ей номер версии и кодировку, в которой записан документ.

Эпилог

В эпилог XML могут входить комментарии, инструкции по обработке и/или пустое пространство.

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

Атрибуты.

Открывающие теги либо теги пустых элементов в XML могут содержать атрибуты, представляющие собой пару имя=значение. В одном открывающем теге разрешается использовать только один экземпляр имени атрибута. Атрибуты могут содержать ссылки на объекты, ссылки на символы, текстовые символы. В отличие от языка HTML, в XML значения атрибутов обязательно надо заключать в апострофы ('), либо в кавычки ("). Таким образом, атрибут может быть записан в одном из двух форматов:

имя_атрибута="значение_атрибута"
имя_атрибут='значение_атрибута'.

Атрибуты используются, для того чтобы связать некоторую информацию с элементом, а не просто включить ее в содержание последнего. Однозначного ответа на вопрос что лучше выбрать элемент или атрибут не существует. Каждый выбирает то, что ему больше нравится. Атрибуты удобно использовать для описания простых значений или для указания типа элемента. Например, мы можем ввести в открывающий тег <city> атрибут type ( который может принимать одно из значений: город, поселок, деревня) тогда данный тег может выглядеть следующим образом:

<city type="город"> Новосибирск </city>

Помимо атрибутов, которые можно определять самим, существуют еще два специальных атрибута, чьи роли в языке XML фиксированы. В рекомендациях XML 1.0 определены два специальных атрибута - xml:space и xml:lang.

Атрибут xml:space

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

Атрибут xml:space может принимать значения "preserve" и "default". Значение "preserve" предписывает сохранять пробельные символы в неприкосновенности. Значение "default" оставляет пробельные символы на усмотрение программы-обработчика.

Значение атрибута применяется не только к содержащему его элементу, но и ко всем его потомкам.

Пустые пространства.

В языке XML пустым пространством считаются только четыре символа: горизонтальная табуляция ( HT ), перевод строки ( LF ), возврат каретки ( CR ), символ пробела ASCII. В стандарте Unicode также определено несколько других типов пустых пространств, но ни один из них не считается таковым в контексте разметки XML.

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

Атрибут xml:lang

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

Атрибут xml:lang как и все остальные атрибуты необходимо продекларировать в DTD. Данный атрибут может принимать значения определенные в документе IETF (Internet Engineering Task Force) RFC 1766: Тэги для идентификации языков, редактор H. Alvestrand. 1995. (http://www.ietf.org/rfc/rfc1766.txt.) или наследующих его стандартах IETF. Значение атрибута применяется не только к содержащему его элементу, но и ко всем его потомкам и атрибутам.

Как и в случае xml: space, приложение вовсе не обязано реагировать на атрибут xml: lang.

Правильно оформленные и верные документы.

Все объекты данных (документы), соответствующие спецификации XML, называются правильно оформленными ( well-formed ) документами. Правильно оформленный документ XML:

  1. содержит один или несколько элементов (ограниченных открывающим и закрывающим тегами), правильно вложенными друг в друга;
  2. существует только один корневой элемент, который содержит все остальные элементы документа.
  3. все элементы образуют простое иерархическое дерево, так что единственным непосредственным отношением между элементами является отношение типа "родитель-потомок".

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

Концепция правильно оформленных документов позволяет использовать данные XML без необходимости конструировать внешние описания данных и ссылаться на них.

Однако кроме проверки на формальное соответствие грамматике языка, в документе могут присутствовать средства контроля над содержанием документа: DTD - определения (Document Type Definition) и схемы данных (Semantic Schema). Прочитав формализованное описание и узнав из него схему документа, программа-анализатор может проверить соответствие каждого документа - его схеме и сделать вывод, верен этот документ или нет. Для того, чтобы обеспечить проверку корректности XML- документов, необходимо использовать анализаторы, производящие такую проверку.

Анализаторы.

Помимо определения синтаксиса XML, в рекомендации W3C описан так же процессор или анализатор XML. Существуют два типа анализаторов:

  • non-validating (не проверяющий на допустимость) - анализатор просто проверяет, чтобы объект данных был правильно оформленным документом XML
  • validating (проверяющий на допустимость) - с помощью определения DTD анализатор проверяет допустимость формы и содержания правильно оформленного документа XML

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

Событийно управляемые анализаторы.

Один из подходов в обработке данных XML связан с событийно управляемыми анализаторами. В этом случае анализатор осуществляет обратное обращение (call-back) к приложению для каждого класса данных XML: элементы (с атрибутами), символьные данные, команды обработки, нотации или комментарии. Приложение осуществляет всю дальнейшую обработку данных XML, полученных в результате обратных обращений, - анализатор не обслуживает древовидную структуру элемента или любые анализируемые данные. Даже для чрезвычайно больших документов анализатор XML расходует очень небольшое количество системных ресурсов; кроме того, вследствие его простого низкоуровневого доступа к данным XML, он позволяет чрезвычайно гибко работать с данными в приложении XML.

Древовидные анализаторы.

Одной из самых распространенных структур в конструировании программного обеспечения является простое иерархическое дерево. Все правильно оформленные данные XML должны представлять собой такое дерево, и потому для путешествия по узлам документа, поиска его содержания и/или редактирования можно использовать распространенные хорошо разработанные алгоритмы. Эти алгоритмы в течение десятилетий разрабатывались и использовались в академической и коммерческой среде. Использующие этот подход анализаторы XML, как правило, соответствуют предложенной консорциумом W3C объектной модели документа ( DOM ).

Средства тестирования анализаторов.

Два разработчика недавно создали набор тестов для анализаторов XML (XML parser benchmark tests), применив их затем к различным анализаторам в системах Linux и Solaris. Результаты этих тестов показывают, что наиболее быстрыми являются анализаторы, написанные на языке С, за ними следуют те, что написаны на языке Java, а затем - на языках сценариев ( Perl и Python ).

< Лекция 2 || Лекция 3: 123 || Лекция 4 >