Технология XSLT - [22]

Шрифт
Интервал

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

Набор таких интерфейсов получил название DOM (document object model, объектная модель документа). DOM-парсер обрабатывает документ, создавая при этом его внутреннее объектное представление. При этом DOM содержит только определения интерфейсов, никоим образом не регулируя внутреннюю реализацию самой модели документа. Все обращения к данным и структуре, которыми обладает документ, происходят посредством вызова методов, определенных в соответствующих интерфейсах.

Объектную модель документа полезно использовать там, где требуется работать с документом целиком, как с деревом. Представление всего документа будет занимать в памяти значительный объем, поэтому DOM резонно считается моделью, очень требовательной к ресурсам.

При выборе парсера необходимо хорошо понимать задачи, которые нужно будет решать при обработке документа. Во многих случаях совершенно необязательно целиком представлять документ в памяти. Будет вполне достаточным создать обработчик документа, и затем, при помощи SAX-парсера, произвести обработку без особых затрат ресурсов. Если же, напротив, при обработке важно иметь модель всего документа целиком, лучше использовать готовое решение в виде DOM-парсера.

Основные классы задач XML

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

Создание новых языков

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

Таким образом, каждый раз, когда мы описываем логическую схему документа, мы создаем новый язык с придуманной нами семантикой и XML-синтаксисом. Достоинством XML в данном случае является стандартность этого синтаксиса, поскольку заботиться о создании модуля для синтаксического разбора (парсера) уже не нужно.

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

Главным недостатком XML является громоздкость синтаксиса. Например, арифметическое выражение >2*2 может быть выражено в XML приблизительно как:

>

2

2

>

Очевидно, что с человеческой точки зрения это не самый компактный и элегантный способ.

На данный момент существует великое множество языков, созданных на основе XML. Мы перечислим несколько наиболее известных из них:

□ WML (Wireless Markup Language) — язык разметки для беспроводных устройств, основной формат данных для беспроводного протокола WAP;

□ SVG (Scalable Vector Graphics) — язык описания масштабируемой векторной графики;

□ XHTML — XML-совместимая версия языка гипертекстовой разметки документов;

□ SOAP (Simple Object Access Protocol) — XML-протокол для обмена информацией в распределенных системах;

□ RDF (Resource Description Framework) — система описания ресурсов;

□ XML/EDI (XML/Electronic Data Interchange) — XML-язык для представления сообщений EDI в системах В2В и электронной коммерции;

□ OML (Ontology Markup Language) — язык для описания онтологий и тезаурусов;

□ VoxML (Voice Markup Language) — язык разметки для голосовых приложений;

□ MathML (Mathematical Markup Language) — язык для описания математических выражений;

□ CML (Chemical Markup Language) — язык для описания химических формул;

□ UML exchange Format — XML-выражения языка UML (Unified Modeling Language);

□ CDF (Channel Description Format) — язык для описания данных для автоматической доставки клиенту (технология push-каналов).

Несмотря на то, что XML это язык разметки, он вполне подходит для создания языков программирования. Самым лучшим примером является язык XSLT, которому посвящена эта книга. Кроме того, существует множество менее известных языков, например XML-версия функционального языка Lisp, язык HaXML и другие.

Хранение данных

Практические всегда, когда приложение должно хранить данные во внешних файлах, неизбежны два процесса: парсинг (синтаксический разбор) при считывании данных и сериализация (создание физического выражения состояния объектов) при сохранении (рис. 1.2).

Рис. 1.2. Стандартная схема хранения данных

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


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.


Тотальное превосходство

Художник? любовник? убийца? адепт тайного знания?.. Герой романа знает о себе только одно, он должен добиться тотального превосходства во всем…Интеллектуальный триллер, колеблющийся между «Американской мечтой» Нормана Мейлера и «Шатунами» Юрия Мамлеева.Новый блестящий талант в «Мастер серии».


Наркокурьер Лариосик

Кинематографическая природа остросюжетной прозы Григория Ряжского очевидна — как несомненны и ее чисто литературные достоинства. Мир страшен и кровав — и страшнее всего, пожалуй, в заглавной повести «Наркокурьер Лариосик», — но и не восхититься его красотой нельзя.В литературу — с парадного подъезда престижной серии — входит зрелый мастер.


Месторождение ветра

Проза Марины Палей не поддается расчленению на внутреннее и внешнее, на сюжет и стиль. Суверенный мир, созданный этим писателем, существует благодаря виртуозному стилю и обусловлен разнообразием интонации. Огромный дар свободы не может ограничить себя одним героем, одной темой или одной страной.


Приемы создания интерьеров различных стилей

Книга по созданию трехмерных проектов интерьеров при помощи популярного редактора трехмерной графики 3ds Max позволит каждому, кто хочет заняться моделированием 3D-интерьеров, найти необходимую информацию для воплощения идеи в жизнь. Описывается моделирование элементов и стили оформления интерьеров, работа с материалами и текстурами, способы повышения реалистичности изображений, визуализация. Рассматриваются особенности создания интерьеров в различных стилях: минимализм, ренессанс, барокко, античный, рококо, хай-тек, техно и др.