
- •Лабораторная работа № 14 Язык xml (extensible Markup Language, расширяемый язык разметки)
- •Листинг 14.1. Пример xml - документа
- •Листинг 14.2. Пример xml-документа с атрибутами в открывающем теге
- •Пространство имен тегов
- •Строки символов
- •Дата и время
- •Объединение
- •Описание элементов и их атрибутов
- •Определение сложных типов
- •Определение типа пустого элемента
- •Определение типа элемента с простым телом
- •Определение типа вложенных элементов
- •Определение типа со сложным телом
- •Пространства имен языка xsd
- •Листинг 14.5. Схема документа xml с целевым пространством имен
- •Включение файлов схемы в другую схему
- •Связь документа xml со своей схемой
- •Другие языки описания схем
- •Инструкции по обработке
- •Анализ документа xml
Другие языки описания схем
Даже из приведенного выше краткого описания языка XSD видно, что он получился весьма сложным и запутанным.
Есть и другие, более простые языки описания схемы документа XML. Наибольшее распространение получили следующие языки:
Schematron — http://www.ascc.net/xnil/resource/schematron/,
RELAX NG (Regular Language Description for XML, New Generation, регулярный язык описания XML нового поколения) — http://\vww.oasis- open.orft/comniittees/relax-ng/; этот язык возник как слияние языков Relax и TREX,
Relax —http://www.xml.gr.jp/relax/,
TREX (Tree Regular Expressions for XML, древовидные регулярные выражения для XML) — http://wwH.thaiopensource.com/trex/,
DDML (Document Definition Markup Language, язык разметки определения документа), известный еще как XSchema — http://purl.0cIc.0rg/N KT/ddml/.
Менее распространены языки DCD (Document Content Description, описание содержания документа), SOX (One's Schema for Object-Oriented XML, схема для объектно-ориентированного XML), XDR (XML-Data Reduced, редуцированные XМL-данные).
Все эти языки позволяют более или менее полно описывать схему документа. Возможно, они вытеснят язык XSD, возможно, будут существовать совместно.
Инструкции по обработке
Упомянем еще одну конструкцию языка XML— инструкции по обработке (processing instructions). Инструкции по обработке позволяют передать анализатору или другой программе-обработчику документа дополнительные сведения для обработки. Инструкция по обработке выглядит так:
<? сведения для анализатора ?>
Первая часть пролога документа XML — первая строка ХМL-файл а — это как раз инструкция по обработке. Она передает анализатору документа версию языка XML и кодировку символов, которыми записан документ.
Первая часть работы закончена. Документы XML и их схемы написаны. Теперь надо подумать о том, каким образом они будут отображаться на экране дисплея, на листе бумаги, на экране сотового телефона, то есть, надо подумать о визуализации документа XML.
Прежде всего, документ надо разобрать, проанализировать (parse) его структуру.
Анализ документа xml
На первом этапе разбора проводится лексический анализ (lexical parsing) документа XML. Документ разбивается на отдельные неделимые элементы (tokens), которыми являются теги, служебные слова, разделители, текстовые константы. Проводится проверка полученных элементов и их связей между собой. Лексический анализ выполняют специальные программы — сканеры (scanners).
Затем выполняется грамматический анализ (grammar parsing). При этом анализируется логическая структура документа, составляются выражения, выражения объединяются в блоки, блоки — в модули, которыми могут являться абзацы, параграфы, пункты, главы. Грамматический анализ проводят программы-анализаторы, так называемые парсеры (parsers).
Создание сканеров и парсеров — любимое развлечение программистов. За недолгую историю XML написаны десятки, если не сотни XML-парсеров. Все парсеры можно разделить на две группы.
В первую группу входят парсеры, проводящие анализ, основываясь на структуре дерева, отражающего вложенность элементов документа (tree- based parsing). Такие парсеры проще реализовать, но создание дерева требует большого объема оперативной памяти, ведь размер документов XML не ограничен. Необходимость частого просмотра дерева замедляет работу парсера.
Во вторую группу входят парсеры, проводящие анализ, основываясь на событиях (event-based parsing). Событием считается появление какого-либо элемента XML: открывающего или закрывающего тега, текста, содержащегося в теле элемента. При возникновении события вызывается какой - либо метод его обработки: startElement (), endElement (), characters()
Такие парсеры сложнее в реализации, зато они не строят дерево в оперативной памяти и могут анализировать не весь документ, а его отдельные элементы вместе с вложенными в них элементами. Фактическим стандартом здесь стал свободно распространяемый набор классов и интерфейсов SAX (Simple API for XML Parsing, простой API для анализа XML), созданный Давидом Меггинсоном (David Megginson). Основной сайт этого проекта http://www.saxproject.org/. Сейчас применяется второе поколение этого набора, называемое SAX2. Набор SAX2 входит во многие парсеры, например, Xerces2.