Объектная модель XML-документа

Взаимодействие PHP и XML

Введение

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

В качестве примера рассмотрим XML -файл, содержащий описания личностей, и попытаемся научиться добавлять, удалять и находить личность или отдельные элементы ее описания в этом файле с помощью PHP.

XML

Основные понятия

XML (Extensible Markup Language) – это расширяемый язык разметки, являющийся подмножеством языка SGML и поэтому имеющий общие с ним цели – разметка любого типа документов.

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

Для отображения данных, хранящихся в XML -формате, используются различного рода преобразователи, например язык трансформаций XSLT. Комбинация XML + преобразователь позволяет достичь того же результата, что и использование HTML-форматированного отображения документа пользователю. Однако в случае использования XML и преобразователя данные хранятся отдельно от их представления, т. е. от инструкций о том, как они должны отображаться.

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

<?xml version='1.0' encoding='UTF-16'

standalone='yes' ?>

которая указывает на версию языка XML (атрибут version), кодировку текста в этом документе (атрибут encoding ) и показывает, существует ли документ сам по себе или зависит от других файлов (атрибут standalone ).

Приведем пример XML-документа.

Пусть у нас имеется письмо. Содержащуюся в нем информацию можно хранить в следующем виде:

<?xml version='1.0' encoding='KOI8-R'

standalone='yes' ?>

<note title="Письмо">

<to>Маша Петрова</to>

<body>Привет, Маша!

Как у тебя дела?

У меня все хорошо.

Собираюсь приехать

к тебе в гости.</body>

<from>Вася Иванов</from>

</note>

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

С помощью XML можно создать документ для описания любой информации. Для того чтобы другие разработчики могли создавать документы в этом же XML -языке (т.е. используя те же теги) и чтобы можно было проверить правильность созданного документа (его соответствие выбранному XML -языку), нужно формально описать используемый XML -язык. Это делается с помощью механизмовDTD (Document Type Definition) или Schemas, которые дают возможность создавать шаблоны для новых типов документов. Для экспериментов в домашних условиях создавать DTD -описания необязательно. Важно понимать, что XML на самом деле вовсе не язык, а стандарт для создания языков, отвечающих критериям XML.

Между XML-документами могут быть установлены ссылки, один документ может включать в себя другой, т.е. структура документаможет быть сколь угодно сложной.

Элементы в XML -документах могут быть связаны между собой отношениями родитель/потомок или родственник/родственник. В нашем примере <note> является родителем <to>, который в свою очередь является потомком <note>, а <to>, <body> и<from> являются родственниками. Собственно текст тоже является потомком элемента, например, " Вася Иванов " – потомокэлемента <from>. Такая структура называется деревом; любые части дерева, имеющие потомков, называются ветвями, а не имеющие – листьями.

Объектная модель XML-документа

Структура XML-документа очень напоминает объектную модель: она иерархична, одни элементы могут быть потомками других. Любой XML -документ можно представить в качестве объектной модели. При этом одни элементы (например, теги) становятся объектами, другие (атрибуты и текстовые элементы ) – их свойствами. Например, для документа

<parent>

<child id="text">Добрый день!</child>

</parent>

объектная модель может выглядеть как показано на рис. 14.1

Прямоугольниками изображены объекты, овалом – свойства объектов.


Рис. 14.1.Пример объектной модели

Для каждого конкретного XML -документа можно создать свою объектную модель, но есть более общая объектная модель, применимая для любого XML -документа, вне зависимости от его структуры. Эта модель называется DOM (Document Object Model).

Обычно DOM добавляется как слой между XML -парсером и приложением, которому требуется информация из документа. То естьпарсер берет данные из документа и передает их в DOM. Затем DOM используется приложениями более высокого уровня.

Хотя DOM расшифровывается как "объектная модель документа", работает DOM преимущественно с интерфейсами, а не с объектами. Интерфейс – это соглашение, по которому поддерживаются определенные свойства и методы, применяемые к некоему объекту. Нарис. 14.2 показано, как приведенный выше XML -документ представляется в DOM:


Рис. 14.2.Пример DOM (Document Object Model)

Каждый прямоугольник представляет собой объект, имена в прямоугольниках соответствуют интерфейсам, которые будут реализованы каждым объектом. Каждый объект может реализовывать несколько подходящих интерфейсов. Например, объект представляющий символьные данные " Hello,World!", реализует интерфейсы Text, CharacterData, Node.

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

Но вернемся к технологии XML. Для чего она используется? В основном для хранения и передачи данных. В последнее времяхранение данных в виде набора XML-файлов рассматривается даже как альтернатива реляционным базам данных. Но наиболее прогрессивные разработчики стремятся задействовать совместно XML и базы данных, пользуясь достоинствами обеих технологий. В частности, XML удобнее использовать для передачи данных, а базу данных – для их хранения и обработки.

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

 

 

Взаимодействие PHP и XML

Расширения SAX и DOM XML

Для работы с XML -документами можно использовать язык PHP. В PHP для этого существует два модуля, реализующие два разных стандарта обработки XML -данных: SAX (Simple API for XML) и DOM (Document Object Model).

Стандарт SAX (http://www.saxproject.org) не является стандартом W3C и описывает метод обработки XML -документов для получения из них данных. То есть этот метод обработки XML -документов позволит только прочитать данные из XML -документа, и не более того. Создавать и изменять XML -документы с его помощью невозможно.

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

Другим стандартом для обработки XML -данных является DOM – стандарт W3C, спецификацию которого можно найти на сайте консорциума (http://www.w3c.org/DOM). В отличие от SAX, этот метод позволяет производить любые операции с XML -данными в достаточно удобной форме – представляя XML -документ как дерево объектов.

Модуль, реализующий этот стандарт, называется DOM XML. Он не входит в основной набор модулей PHP, но может быть установлен как расширение. API этого модуля старается как можно более точно следовать стандарту DOM level 2. Кроме того, существует множество дополнительных функций. Эти функции включены для совместимости с предыдущими версиями расширения, и использовать их в новых скриптах не рекомендуется. Кроме того, у расширения DOM XML есть проблемы с русской кодировкой.Парсер обрабатывает текст только в кодировке UTF-8, поэтому текст нужно каждый раз перекодировать с помощью функцииiconv. Отсюда и необходимость установки расширения iconv вместе с DOM XML.

Модуль DOM XML является мощным и удобным в использовании средством обработки XML -документов. В данной лекции мы будем рассматривать именно его.



/footer.php"; ?>