Разработчику. Сборник рецептов PHP
Задавайте вопросы

XML

Вернуться назад

Введение

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

Теги XML предоставляют разработчикам способ структурированной разметки данных, объединенных в древовидную иерархию. Язык XML можно рассматривать как «CSV на стероидах». Действительно можно использовать XML для обычного хранения записей, состоящих из последовательности полей. Только вместо простого отделения полей друг от друга запятыми в XML можно указать имя поля, тип и атрибуты непосредственно рядом с информацией.

С другой стороны, XML – это язык представления документов. Книга разделена на главы, каждая глава разделена на рецепты, а каждый рецепт состоит из разделов «Задача», «Решение» и «Обсуждение». Содержимое разделов состоит из абзацев, таблиц, рисунков и примеров. Точно так же статья, опубликованная на веб-странице, может быть разделена на название страницы, заголовок, автора фрагмента, собственно повествование, различные боковые панели, сопутствующие ссылки и дополнительное содержание.

Внешне XML очень напоминает HTML. Оба языка используют для разметки текста теги, заключенные в угловые скобки < и >. Но язык XML одновременно и более строг, и более свободен, чем HTML. Большая строгость XML проявляется в том, что он требует закрытия всех тегов контейнеров. Не допускается открытие элементов без соответствующего закрывающего тега. Свобода XML в том, что он не ограничен использованием конечного списка тегов, таких как <a>, <img> и <h1>. Наоборот, вы вправе использовать последовательности любых имен тегов, которые наилучшим образом подходят для описания ваших данных.

Следующими ключевыми отличиями XML от HTML являются чувствительность к регистру, обязательное заключение атрибутов в кавычки и обработка пробелов. Если в HTML теги <B> и <b> это один и тот же тег выделения полужирным шрифтом, то в XML они будут представлять собой два разных тега. В HTML можно зачастую опустить кавычки при указании значений для атрибутов, синтаксис XML требует обязательного указания кавычек в этом случае. Поэтому в XML всегда следует писать:

<element attribute="value">

Кроме того, анализаторы HTML, как правило, игнорируют пробелы, поэтому ряд из 20 последовательных пробелов трактуется ими как один пробел. Анализаторы XML сохраняют пробельный символ, если только не получают на этот счет других прямых указаний. Поскольку все элементы должны быть закрыты, пустые элементы должны заканчиваться символами />. Например, в HTML конец строки обозначается тегом <br>, в то же время в XML он записывается как <br/>(*)

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

Теперь, после краткого знакомства с основными правилами, приведем небольшой пример: если вы библиотекарь и хотите перевести ваш бумажный карточный каталог в XML-представление, начните с такого базового множества тегов:

<book>
    <title>PHP Cookbook</title>
    <author>Sklar, David and Trachtenberg, Adam</author>
    <subject>PHP</subject>
</book>

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

Первые три рецепта этой главы посвящены созданию и чтению XMLдокументов. Рецепт (Генерация XML вручную) показывает, как создавать XML без применения дополнительных инструментов. В рецепте (Генерация XML с применением DOM) объясняется использование расширения DOM XML для созданияXML-документов в стандартной манере. Чтение XML с применением DOM будет предметом рецепта (Анализ XML с помощью DOM).

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

С помощью XSLT можно, используя страницу стиля, преобразовать XML-документ в удобный для просмотра вывод.(*) Отделяя таким образом содержание документа от его представления, можно создать одну страницу стиля для веб-броузеров, другую для PDA, третью для сотовых телефонов, и все это без изменения собственно содержимого документа. Такие преобразования являются предметом рецепта (Преобразование XML с помощью XSLT).

Применяя такие протоколы, как XML-RPC или SOAP, можно организовать обмен сообщениями между вашим персональным компьютером и сервером, или, наоборот, самому поработать в качестве сервера. Таким способом вы сможете разместить свою картотеку в Интернете и дать возможность другим пользователям запрашивать ее и извлекать записи об отдельных книгах в том формате, который подходит для анализа и отображения этих данных в их приложениях. Другим применением могло бы стать создание RSS-рассылки, обновляемой всякий раз, когда в библиотеку поступает новая книга. Клиенты и серверы XML-RPC рассматриваются в рецептах (Посылка запросов XML-RPC) и (Прием запросов XML-RPC) соответственно. Рецепты (Посылка SOAP-запросов) и (Прием SOAP-запросов) посвящены клиентам и серверам на основе протокола SOAP. WDDX, формат обмена информацией, порожденный языком ColdFusion, станет темой рецепта (Обмен данными с помощью WDDX). Чтению RSS-рассылок, популярному формату синдикации заголовков, основанному на XML, посвящен рецепт (Чтение RSS-рассылок).

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

И все же мы постарались документировать эти функции, т. к. в настоящее время планируется их включение в версию PHP 4.3. Поскольку работа с XML превращается в важную область программирования, не имеет смысла исключать эти рецепты из книги. Кроме того, мы хотели обеспечить использование самых новых функций в наших примерах. Это, однако, может привести к трудностям, если имена и прототипы функций изменятся. Обнаружив, что рецепт не работает так, как вы ожидали, пожалуйста, обратитесь к онлайн-версии руководства по PHP или к разделу Errata на странице http://www.oreilly.com/catalog/phpckbk.


XSLT, или XML Style Language Transformations, – язык преобразований, основанный на языке стилей XML. Но XSLT – это не просто этап форматирования, он представляет собой инструмент XML-обработки и применяется как для преобразования одной разновидности XML в другую, так и для преобразования XML в другой формат, например в HTML или обычный текст.


Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ