Скачать презентацию Мировые информационные ресурсы Лекция 10 Язык разметки XML Скачать презентацию Мировые информационные ресурсы Лекция 10 Язык разметки XML

МИР_10_PHP.ppt

  • Количество слайдов: 61

Мировые информационные ресурсы Лекция 10. Язык разметки XML. Обработка XML-документов при помощи PHP Мировые информационные ресурсы Лекция 10. Язык разметки XML. Обработка XML-документов при помощи PHP

Язык разметки XML - документы выполняют роль универсального формата для обмена информацией между отдельными Язык разметки XML - документы выполняют роль универсального формата для обмена информацией между отдельными компонентами большой программы (полезен для разработки сложных информационных систем, с большим количеством приложений, связанных потоками информации с различной структурой). Дополнение к HTML для распространения в Web "нестандартной" информации. (химических, математических, физических формул, медицинских рецептов, нотных записей, и т. д). Хранение и обработка структурированных данных в едином формате. 2

Язык разметки XML является конгломератом из трех отдельных спецификаций: XML (Extensible Markup Language) — Язык разметки XML является конгломератом из трех отдельных спецификаций: XML (Extensible Markup Language) — спецификация, определяющая базовый синтаксис; XSL (Extensible Style Language) — спецификация, направленная на отделение визуального оформления страницы от ее содержимого за счет применения к документу стилей (style sheets), определяющих конкретные атрибуты форматирования; XLL (Extensible Linking Language) — спецификация, определяющая представление ссылок на другие ресурсы. 3

Синтаксис XML Пример документа XML Spaghetti alla Carbonara This traditional Italian dish is sure to please even the most discriminating critic. 2 large eggs 1 clove garlic . . . 4

Синтаксис XML Пример документа XML (окончание) <step>Combine oil and bacon in large skillet over Синтаксис XML Пример документа XML (окончание) Combine oil and bacon in large skillet over medium heat. Cook until bacon is brown and crisp. Whisk eggs in bowl. Set aside. Cook pasta in large pot of boiling water to taste, stirring occasionally. Add salt as necessary. Drain pasta and return to pot, adding whisked eggs. Stir over medium-low heat for 2 -3 minutes. Mix in bacon. Season with salt and pepper to taste. 5

Синтаксис XML Документ XML состоит из компонент: пролог XML; теги; атрибуты; ссылки на сущности; Синтаксис XML Документ XML состоит из компонент: пролог XML; теги; атрибуты; ссылки на сущности; инструкции по обработке; комментарии. 6

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

Элементы Служебные элементы XML - заключены в угловые скобки (как в разметке HTML). - Элементы Служебные элементы XML - заключены в угловые скобки (как в разметке HTML). - элемент может быть пустым или содержащим информацию; в этом случае элемент содержит открывающий и закрывающий теги. - если элемент не пуст, то в теги включаются имена, описывающие природу данных. - непустые элементы должны содержать как открывающий, так и закрывающий тег. - в элементах, которые логически не могут иметь закрывающего тега, используется альтернативная форма синтаксиса <элемент />. - элементы XML должны находиться на правильном уровне вложенности. - в элементах XML различается регистр символов (например, теги , и считаются разными тегами). Первый элемент называется корневым элементом (root element), поскольку в эту пару тегов заключены все остальные теги документа. 8

Атрибуты - содержат дополнительную информацию о содержании, которая в дальнейшем используется при форматировании или Атрибуты - содержат дополнительную информацию о содержании, которая в дальнейшем используется при форматировании или обработке XML. - значения атрибутов присваиваются в формате «имя=значение» . - в отличие от HTML, атрибуты XML должны быть заключены в апострофы или кавычки. 9

Инструкции по обработке (processing instructions, PI) - представляют собой внешние команды, которые выполняются приложением, Инструкции по обработке (processing instructions, PI) - представляют собой внешние команды, которые выполняются приложением, работающим с документом XML. В общем случае синтаксис PI выглядит так: Атрибут приложение указывает, какой программе адресованы последующие инструкции. Например, для выполнения команды РНР в документе XML можно воспользоваться следующей конструкцией: Инструкции по обработке удобны тем, что они позволяют нескольким приложениям совместно работать с одним документом. 10

Комментарии - в XML используется тот же синтаксис комментариев, что и в HTML: <!-- Комментарии - в XML используется тот же синтаксис комментариев, что и в HTML: 11

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

Определение типа документа (DTD) DTD можно включить 1. непосредственно в документ XML, 2. сослаться Определение типа документа (DTD) DTD можно включить 1. непосредственно в документ XML, 2. сослаться на него по URL 3. использовать комбинацию этих двух способов. 1. Непосредственное включение DTD в документ XML - определение DTD располагается сразу же после пролога: Атрибут имя_корневого_элемента соответствует имени корневого элемента в тегах, содержащих весь документ XML. В секции прочих объявлений находятся определения элементов, 13 атрибутов и т. д.

Определение типа документа (DTD) 2. Размещение DTD в отдельном файле Ссылка на внешний DTD Определение типа документа (DTD) 2. Размещение DTD в отдельном файле Ссылка на внешний DTD в документе XML: - имя_корневого_элемента должно соответствовать имени корневого элемента в тегах, содержащих весь документ XML. - атрибут SYSTEM указывает на то, что some_dtd. dtd находится на локальном сервере. - на файл some_dtd. dtd также можно сослаться по его абсолютному URL. - в кавычках указывается URL внешнего DTD, расположенного на локальном или на удаленном сервере. 14

- cookbook является именем корневого" src="https://present5.com/presentation/3737549_48585741/image-15.jpg" alt="Определение типа документа (DTD) - cookbook является именем корневого" /> Определение типа документа (DTD) - cookbook является именем корневого элемента, a cookbook. dtd — именем DTD-файла. Содержимое DTD: ]> 15

Объявления элементов Все элементы, используемые в документе XML, должны быть определены в DTD, прилагаемом Объявления элементов Все элементы, используемые в документе XML, должны быть определены в DTD, прилагаемом к документу. - описывает элемент XML, в данном случае — корневой элемент cookbook. - recipe, заключенное в круглые скобки означает, что в теги cookbook заключается вложенный тег с именем recipe. Знак + говорит о том, что в родительских тегах cookbook находится одна или несколько пар тегов recipe. Полный список операторов элементов: ? Ноль или ровно один экземпляр * Ноль или несколько экземпляров + Один или несколько экземпляров Ровно один экземпляр | Один из элементов , Перечисление элементов 16

Объявления элементов <!ELEMENT recipe (title, description, ingredients. process)> - в тег recipe входят четыре Объявления элементов - в тег recipe входят четыре вложенных тега: title, description, ingredients и process. Поскольку после имен тегов не указываются признаки повторения, внутри тегов recipe должна быть заключена ровно одна пара каждого из перечисленных тегов. - определение тега, который не содержит вложенных тегов. В соответствии с определением он содержит #PCDATA, то есть произвольные символьные данные, не считающиеся частью разметки. - содержит один или несколько тегов с именем ingredient. 17

Объявления элементов Определение элемента при помощи логических операторов. <!ELEMENT ingredient (pasta+, (cheese | meat)+)> Объявления элементов Определение элемента при помощи логических операторов. - элемент pasta обязательно должен присутствовать в элементе ingredient, он указывается с признаком повторения +. Затем следует либо элемент cheese, либо элемент meat; альтернативы разделяются вертикальной чертой и заключаются в круглые скобки со знаком +, поскольку в ingredient всегда входит либо одно, либо другое. 18

Объявления атрибутов Атрибуты элементов описывают значения, связываемые с элементами. Элементы XML, как и элементы Объявления атрибутов Атрибуты элементов описывают значения, связываемые с элементами. Элементы XML, как и элементы HTML, могут иметь ноль, один или несколько атрибутов. Общий синтаксис объявления атрибутов: Имя_элемента определяет имя элемента, включаемое в тег. Затем перечисляются атрибуты, связанные с данным элементом. Объявление каждого атрибута состоит из трех основных компонентов: имени, типа данных и флага, определяющего особенности данного атрибута. Вместо многоточия (. . . ) могут быть расположены объявления других атрибутов. - элемент recipe содержит атрибут category, который определяет общую категорию Italian. В определении ATTLIST указывается как имя элемента, так и имя атрибута, при этом атрибут объявляется обязательным (#REQUIRED). 19

Объявления атрибутов Одновременное объявление нескольких атрибутов <!ATTLIST recipe category CDATA #REQUIRED difficulty CDATA #REQUIRED> Объявления атрибутов Одновременное объявление нескольких атрибутов - в дополнение к атрибуту category с элементом recipe связан дополнительный атрибут difficulty. - оба атрибута объявляются в одном списке, - оба атрибута являются обязательными, т. е. следующий тег будет считаться неверным: , потому что в нем отсутствует атрибут category. Правильный тег: Флаги атрибутов #FIXED - Во всех экземплярах элемента в документе атрибуту может присваиваться только одно конкретное значение #IMPLIED - Если атрибут не указан в элементе, используется значение по умолчанию #REQUIRED - Атрибут является обязательным и должен присутствовать во 20 всех экземплярах элемента в документе

Объявления атрибутов Типы атрибутов Атрибут элемента может объявляться с определенным типом. Атрибуты CDATA - Объявления атрибутов Типы атрибутов Атрибут элемента может объявляться с определенным типом. Атрибуты CDATA - содержат общие символьные данные. Атрибуты ID, IDREF и IDREFS — для однозначного представления данных посредством идентификаторов и создания перекрестных ссылок между документами. 21

Объявления атрибутов Атрибут ID Идентификаторы элементов присваиваются атрибуту ID. Пример: связать с каждым элементом Объявления атрибутов Атрибут ID Идентификаторы элементов присваиваются атрибуту ID. Пример: связать с каждым элементом recipe уникальный идентификатор Объявление элемента recipe в документе: Spaghetti alla Carbonara 22

Объявления атрибутов Атрибут IDREF Атрибуту присваивается идентификатор, используемый для ссылок на элемент, — по Объявления атрибутов Атрибут IDREF Атрибуту присваивается идентификатор, используемый для ссылок на элемент, — по аналогии с тем, как URL используется для идентификации страницы в гиперссылке. Пример: В процессе обработки документа XML элемент заменяется более наглядной ссылкой на recipe с указанным идентификатором. 23

Объявления атрибутов Перечисляемые атрибуты При объявлении атрибута можно перечислить все допустимые значения, принимаемые атрибутом: Объявления атрибутов Перечисляемые атрибуты При объявлении атрибута можно перечислить все допустимые значения, принимаемые атрибутом:

Объявления атрибутов Перечисляемые атрибуты со значением по умолчанию Пример: если атрибут recipe будет часто Объявления атрибутов Перечисляемые атрибуты со значением по умолчанию Пример: если атрибут recipe будет часто относиться к категории Italian, то категорию Italian можно назначить по умолчанию: Если атрибут category не задан явно, по умолчанию ему присваивается значение Italian. 25

Объявления атрибутов Атрибуты ENTITY и ENTITIES Данные в документах XML не всегда являются текстовыми Объявления атрибутов Атрибуты ENTITY и ENTITIES Данные в документах XML не всегда являются текстовыми — документ может содержать и двоичную информацию (например, графику). На такие данные можно ссылаться при помощи атрибута ENTITY. Пример: в описании элемента description можно указать атрибут recipe. Picture с графическим изображением: Также можно объявить сразу несколько сущностей, заменив ENTITY на ENTITIES. Значения разделяются пробелами. 26

Объявления атрибутов Атрибуты NMTOKEN и NMTOKENS - представляют собой строки из символов, входящих в Объявления атрибутов Атрибуты NMTOKEN и NMTOKENS - представляют собой строки из символов, входящих в ограниченный набор. Объявление атрибута с типом NMTOKEN предполагает, что значение атрибута соответствует установленным ограничениям. Как правило, значение атрибута NMTOKEN состоит из одного слова: Можно объявить сразу несколько атрибутов, заменив NMTOKEN на NMTOKENS. Значения разделяются пробелами. 27

Ссылки на сущности Концепция сущности (entity) упрощает сопровождение документа, обеспечивая возможность ссылки на некоторое Ссылки на сущности Концепция сущности (entity) упрощает сопровождение документа, обеспечивая возможность ссылки на некоторое содержание по ключевым словам. Ключевое слово может относиться как к простейшему фрагменту вроде расширения аббревиатуры, так и к совершенно новому фрагменту кода XML. Сущности удобны тем, что они могут многократно использоваться в документах XML. При последующей обработке документа все ссылки на сущность заменяются конкретным содержанием, указанным при объявлении сущности. Объявление сущности включается в DTD документа XML. Чтобы сослаться на некоторую сущность в документе HTML, следует указать ее имя с префиксом «амперсанд» (&) и суффиксом «точка с запятой» (; ). 28

Ссылки на сущности Пример: если объявлена сущность с информацией об авторских правах, то на Ссылки на сущности Пример: если объявлена сущность с информацией об авторских правах, то на данную сущность можно ссылаться следующим образом: &Соруright; При этом строка документа XML может выглядеть так:

. . . прочие данные колонтитула. . . &Copyright;
Существует два вида сущностей: внутренние и внешние. Внутренние сущности удобны в ситуациях, когда планируется использовать сущность в относительно небольшом количестве документов XML. Внешними сущностями лучше воспользоваться при большом количестве документов. 29

Ссылки на сущности 1. Внутренние сущности - напоминают строковые переменные, связывающие имя с фрагментом Ссылки на сущности 1. Внутренние сущности - напоминают строковые переменные, связывающие имя с фрагментом текста. Пример: В процессе обработки документа все экземпляры &Соруright заменяются текстом «Copyright 2000 Your. Company. Name. All Rights Reserved» . Весь код XML в заменяющем тексте обрабатывается так, словно он присутствовал в исходном документе. 30

Ссылки на сущности 2. Внешние сущности - используются для ссылок на содержание, находящееся в Ссылки на сущности 2. Внешние сущности - используются для ссылок на содержание, находящееся в другом файле. Сущности этого типа могут содержать текстовую информацию, но также могут ссылаться и на двоичные данные (например, графику). Пример: При последующей обработке документа XML все ссылки &Соруright заменяются содержимым документа copyright. xml. Весь код XML в заменяющем тексте обрабатывается так, словно он присутствовал в исходном документе. 31

Ссылки на сущности Внешние сущности также удобно использовать для ссылок на графические изображения. Например, Ссылки на сущности Внешние сущности также удобно использовать для ссылок на графические изображения. Например, если вы хотите включить в документ XML графический логотип, создайте внешнюю сущность: Как и в предыдущем примере, все ссылки &food_picture заменяются графическим изображением, на которое указывает ссылка. Поскольку данные являются двоичными, а не текстовыми, они не интерпретируются. 32

РНР и ХМL Для работы с XML в РНР используется пакет Джеймса Кларка (James РНР и ХМL Для работы с XML в РНР используется пакет Джеймса Кларка (James Clark) Expat (XML Parser Toolkit). Expat включается в поставку Apache. Чтобы воспользоваться функциональными возможностями XML в РНР, необходимо настроить РНР с ключом -with-xml. Компоненты документа XML: открывающие теги; атрибуты; символьные данные; закрывающие теги; инструкции по обработке; синтаксические объявления; внешние ссылки на сущности; необработанные сущности; прочие компоненты (комментарии, объявления XML и т. д. ). 33

РНР и ХМL Для эффективной обработки документов XML необходимо определить пользовательские функцииобработчики (handlers), обрабатывающие РНР и ХМL Для эффективной обработки документов XML необходимо определить пользовательские функцииобработчики (handlers), обрабатывающие каждый из перечисленных компонентов. Определенные функции подключаются к процессу обработки XML стандартными средствами РНР. 34

Общий процесс обработки кода XML в РНР Определить пользовательские функции. Для постоянной работы с Общий процесс обработки кода XML в РНР Определить пользовательские функции. Для постоянной работы с документами XML, эти функции достаточно написать всего один раз и в дальнейшем вносить в них необходимые изменения. Создать анализатор (parser) кода XML, который будет использоваться для обработки документа. Анализатор создается вызовом функции xml_parser_create( ). При помощи стандартных функций зарегистрировать созданные функции в анализаторе XML. Открыть файл XML, прочитать содержащиеся в нем данные и передать их анализатору XML. Обработка данных выполняется простым вызовом xml_parse( ). В процессе своей работы эта функция обеспечивает косвенный вызов всех определенных вами обработчиков. Уничтожить анализатор XML, чтобы освободить задействованные им ресурсы. 35

Подключение пользовательских функций к обработке XML Функция xml_set_character_data_handler() - регистрирует пользовательскую функцию для работы Подключение пользовательских функций к обработке XML Функция xml_set_character_data_handler() - регистрирует пользовательскую функцию для работы с символьными данными. Синтаксис: xml_set_character_data_handler(анализатор, обработчик_символьных_данных) Первый параметр — анализатор XML, второй — имя пользовательской функции, используемой при обработке символьных данных. Определение функции-обработчика должно выглядеть так: function обработчик_символьных_данных (анализатор, данные) { . . . } Первый параметр определяет анализатор XML, а второй — символьные данные, подлежащие обработке. 36

Подключение пользовательских функций к обработке XML Функция xml_set_default_handler( ) - регистрирует пользовательскую функцию для Подключение пользовательских функций к обработке XML Функция xml_set_default_handler( ) - регистрирует пользовательскую функцию для всех незарегистрированных компонентов документа XML. В частности, к числу таких компонентов относятся пролог XML и комментарии. Синтаксис: xml_set_default_handler(анализатор, обработчик_по_умолчанию) Первый параметр определяет анализатор XML, а второй — имя пользовательской функции, используемой по умолчанию. Определение функции-обработчика должно выглядеть так: function обработчик_по_умолчанию (анализатор, данные) { . . . } Первый параметр определяет анализатор XML, а второй — символьные данные, подлежащие обработке. 37

Подключение пользовательских функций к обработке XML Функция xml_set_element_handler( ) - регистрирует пользовательские функции для Подключение пользовательских функций к обработке XML Функция xml_set_element_handler( ) - регистрирует пользовательские функции для обработки открывающих и закрывающих тегов элементов. Синтаксис: xml_set_element_handler(анализатор, обработчик_открывающих_тегов, обработчик_закрывающих_тегов) Первый параметр - анализатор XML. Второй и третий параметры - имена функций, используемых для обработки, соответственно, открывающих и закрывающих тегов. Определение обработчика открывающих тегов должно выглядеть так: function обработчик_открывающих_тегов (анализатор, имя_тега, атрибуты[ ]) {. . . } Обработчик закрывающих тегов определяется следующим образом: function обработчик_закрывающих_тегов (анализатор, имя_тега) {. . . } Первый параметр - анализатор XML, второй — имя закрывающего тега для 38 анализируемого элемента.

Подключение пользовательских функций к обработке XML Функция xml_set_external_entity_ref_handler( ) - регистрирует пользовательскую функцию для Подключение пользовательских функций к обработке XML Функция xml_set_external_entity_ref_handler( ) - регистрирует пользовательскую функцию для обработки внешних ссылок на сущности. Синтаксис: xml_set_external_entity_ref_handler(анализатор, обработчик_внешних_ссылок) Первый параметр - анализатор XML, а второй — имя пользовательской функции, используемой при обработке внешних ссылок. Определение функции-обработчика должно выглядеть так: function обработчик_внешних_ссылок (анализатор, ссылка, база, системный_идентификатор, открытый_идентификатор) { . . . } Первый параметр - анализатор XML. Второй параметр - имя ссылки, четвертый — системный идентификатор ссылки на сущность, а пятый — открытый идентификатор ссылки. Третий параметр, база, в настоящее время не используется, однако его 39 объявление обязательно.

Подключение пользовательских функций к обработке XML Функция xml_set_notation_decl_handler ( ) - регистрирует пользовательскую функцию Подключение пользовательских функций к обработке XML Функция xml_set_notation_decl_handler ( ) - регистрирует пользовательскую функцию для обработки синтаксических объявлений. Синтаксис: xml_set_notation_decl_handler(анализатор, обработчик_синтаксических_обьявлений) Первый параметр - анализатор XML, а второй — имя пользовательской функции, используемой при обработке синтаксических объявлений. Определение функции-обработчика: function обработчик_синтаксических_обьявлений (анализатор, ссылка, база, системный_идентификатор, открытый_идентификатор) {. . . } Первый параметр - анализатор XML. Второй параметр - имя объявления, четвертый — системный идентификатор, а пятый — открытый идентификатор объявления. Третий параметр, база, в настоящее время не используется, однако его объявление все равно обязательно. 40

Подключение пользовательских функций к обработке XML Функция xml_set_object( ) - ассоциирует анализатор XML с Подключение пользовательских функций к обработке XML Функция xml_set_object( ) - ассоциирует анализатор XML с некоторым объектом. Синтаксис: xml_set_object(анализатор, object &о 6 ъект) Первый параметр определяет анализатор XML, а второй содержит ссылку на объект, методы которого будут использоваться для обработки компонентов XML. Таким образом, функция xml_set_object связывает анализатор с объектом. Как правило, она вызывается в конструкторе объекта перед определениями функций-обработчиков: 41

Подключение пользовательских функций к обработке XML class xml. DB { VAR $xmlparser: function xml. Подключение пользовательских функций к обработке XML class xml. DB { VAR $xmlparser: function xml. DB( ) { $this->xmlparser = xml_parser_create(); // Связать анализатор с объектом xml_set_object($this->xmlparser &$this); // Определить функции-обработчики xml_set_element_handler($this->xmlparser, "start. Tag", "end. Tag"); xml_set_character_data($this->xmlparser, "character. Data"); } . . . Определения функций-обработчиков start. Tag, end. Tag, character. Data и т. д. . } // class xml. DB 42

Подключение пользовательских функций к обработке XML Функция xml_set_processing_instruction_handler( ) - регистрирует пользовательскую функцию для Подключение пользовательских функций к обработке XML Функция xml_set_processing_instruction_handler( ) - регистрирует пользовательскую функцию для работы с Piинструкциями. Синтаксис: xml_set_processing_instruction_handler(анализатор, обработчик_инструкций) Первый параметр определяет анализатор XML, а второй — имя пользовательской функции, используемой при обработке Pi-инструкций. Определение функции-обработчика должно выглядеть так: function обработчик_инструкций (анализатор, приложение, инструкция) { . . . } Первый параметр определяет анализатор XML, второй — имя приложения, выполняющего инструкции, а третий — инструкцию, 43 передаваемую приложению.

Подключение пользовательских функций к обработке XML Функция xml_set_unparsed_entity_decl_handler( ) - регистрирует пользовательскую функцию для Подключение пользовательских функций к обработке XML Функция xml_set_unparsed_entity_decl_handler( ) - регистрирует пользовательскую функцию для необработанных внешних ссылок на сущности. Синтаксис: xml_set_external_entity_ref_handler(анализатор, обработчик_внешних_ссылок) Первый параметр определяет анализатор XML, а второй — имя пользовательской функции, используемой для обработки необработанных внешних ссылок. 44

Подключение пользовательских функций к обработке XML Функция xml_set_unparsed_entity_decl_handler( ) Определение функции-обработчика должно выглядеть так: Подключение пользовательских функций к обработке XML Функция xml_set_unparsed_entity_decl_handler( ) Определение функции-обработчика должно выглядеть так: function обработчик_внешних_ссылок (анализатор, сущность, база, системный_идентификатор, открытый_идентификатор, имя_объявления) {. . . } Первый параметр — анализатор XML, второй параметр — ссылки, третий параметр (база) в настоящее время не используется, однако его объявление все равно обязательно, четвертый — системный идентификатор ссылки на сущность, пятый — открытый идентификатор ссылки. шестой параметр — имя синтаксического объявления. 45

Функции обработки кода XML Функция xml_parser_create( ) Перед обработкой документа XML необходимо предварительно создать Функции обработки кода XML Функция xml_parser_create( ) Перед обработкой документа XML необходимо предварительно создать анализатор. Синтаксис: xml_parser_create([кодировка]) Необязательный параметр определяет кодировку исходного текста. В настоящее время поддерживаются три варианта кодировки: UTF-8; US-ASCII; ISO-8859 -1 (используется по умолчанию). По аналогии с тем, как функция fopen( ) возвращает манипулятор открытого файла, функция xml_parser_create( ) возвращает манипулятор, используемый для вызова различных функций в процессе обработки XML. При одновременной обработке нескольких документов 46 можно создать сразу несколько анализаторов.

Функции обработки кода XML Функция xml_parse( ) - выполняет обработку документа XML. Синтаксис: xml_parse(анализатор, Функции обработки кода XML Функция xml_parse( ) - выполняет обработку документа XML. Синтаксис: xml_parse(анализатор, данные [завершение]) Первый параметр определяет анализатор XML (используется значение, возвращаемое при вызове xml_parser_create( )). Если необязательный параметр завершение равен TRUE, передаваемый фрагмент данных является последним. Как правило, это происходит при достижении конца обрабатываемого файла. 47

Функции обработки кода XML Функция xml_parser_free( ) - освобождает ресурсы, выделенные для работы анализатора. Функции обработки кода XML Функция xml_parser_free( ) - освобождает ресурсы, выделенные для работы анализатора. Синтаксис: xml_parser_free(анализатор) Параметр функции определяет анализатор XML. 48

Другие полезные функции Функция xml_get_error_code( ) - получает код ошибки, возникшей в процессе обработки Другие полезные функции Функция xml_get_error_code( ) - получает код ошибки, возникшей в процессе обработки XML. Код ошибки передается функции xml_error_string( ) для интерпретации. Синтаксис: xml_error_code(анализатор) Параметр функции определяет анализатор XML. Функция xml_error_string( ) - возвращает текстовое описание ошибки по ее коду. Ошибкам, возникающим в процессе анализа кода XML, присваиваются числовые коды. Синтаксис: xml_error_string(код) В параметре функции передается код ошибки, полученный при вызове функции xml_get_error_code( ). 49

Другие полезные функции Функция xml_get_current_line_number( ) - возвращает номер текущей строки, обрабатываемой анализатором XML. Другие полезные функции Функция xml_get_current_line_number( ) - возвращает номер текущей строки, обрабатываемой анализатором XML. Синтаксис: xml_get_current_line_number(анализатор) Параметр функции определяет анализатор XML. Пример: while ($line = fread($fh, 4096)) : if (! xml_parse($xml_parser, $line, feof($fh))); $err_string = xml_error_string(xml_get_error_code($xml_parser)); $line_number = xml_get_current_line_number($xml_parser); print "Error! [Line $line_number]: $err_string"; endif; endwhile; Например, если ошибка была обнаружена в шестой строке файла, определяемого манипулятором $fh, сообщение будет выглядеть примерно так: Error! [Line 6]: mismatched tag 50

Другие полезные функции Функция xml_get_current_colunin_number( ) может использоваться в сочетании с xml_get_current_line_number( ) для Другие полезные функции Функция xml_get_current_colunin_number( ) может использоваться в сочетании с xml_get_current_line_number( ) для определения точного местонахождения ошибки в документе XML. Синтаксис: xml_get_current_column_number(анализатор) Параметр функции определяет анализатор XML. Пример: while ($line = fread($fh. 4096)) : if (! xml_parse($xml_parser, $line, feof($fh))): $err_string = xml_error_string(xml_get_error_code($xml_parser)); $line_number = xml_get_current_line_number($xml_parser); $column_number = xml_get_current_column_number($xml_parser) print "Error! [Line $line_nuimber, Column $column_number]: $err_string"; endif; endwhile; Например, если ошибка была обнаружена в шестой строке файла, определяемого манипулятором $fh, сообщение будет выглядеть примерно так: Error! [Line 6 Column 2]: mismatched tag 51

Параметры анализатора XML В настоящее время в РНР поддерживаются два параметра, влияющих на работу Параметры анализатора XML В настоящее время в РНР поддерживаются два параметра, влияющих на работу анализатора XML: XML_OPTION_CASE_FOLDING — автоматическое преобразование имен тегов к верхнему регистру; XML_OPTION_TARGET_ENCODING — кодировка документа на выходе анализатора XML. В настоящее время поддерживаются кодировки UTF 8, ISO-8859 -1 и US-ASCII. Для получения текущих значений и модификации этих параметров применяются, соответственно, функции xml_parser_get_option( ) и xml_parser_set_option( ). 52

Параметры анализатора XML Функция xml_parser_get_option( ) - получает текущее значение параметра анализатора XML. Синтаксис: Параметры анализатора XML Функция xml_parser_get_option( ) - получает текущее значение параметра анализатора XML. Синтаксис: xml_parser_get_option(анализатор, параметр) Первый параметр функции определяет анализатор XML, а второй — имя интересующего параметра. Пример: $setting = xml_parser_get_option($xml_parser, XML_OPTION_CASE_FOLDING); print "Case Folding: $setting"; Если параметру XML_OPTION_CASE_FOLDING не присваивалось другое значение, функция вернет значение по умолчанию. В этом случае будет выведен следующий результат: Case Folding: 1 53

Параметры анализатора XML Функция xml_parser_set_option() - задает значение параметра анализатора XML. Синтаксис: xml_parser_set_option(анализатор, параметр, Параметры анализатора XML Функция xml_parser_set_option() - задает значение параметра анализатора XML. Синтаксис: xml_parser_set_option(анализатор, параметр, значение) Первый параметр функции определяет анализатор XML, второй — имя интересующего параметра, а третий — его новое значение. Пример: $setting = xml_parser_set_option($xml_parser, XML_OPTION_TARGER_ENCODING. "UTF-8"): В результате выполнения этой команды выходная кодировка документа изменяется с ISO-8859 -1 на UTF-8. 54

Преобразование XML в HTML Предположим, имеется документ XML bookmarks. xml, содержащий список ссылок: <? Преобразование XML в HTML Предположим, имеется документ XML bookmarks. xml, содержащий список ссылок: Epicurious http: //www. epicurious. com Epicurious is a great online cooking resource, providing tutorials. recipes, forums and more. Задача: преобразовать bookmarks. xml и вывести его содержимое в формате, совместимом с форматом браузера. 55

Преобразование XML в HTML Скрипт: Преобразование XML в HTML Class XMLHTML { VAR $xmlparser: Преобразование XML в HTML Скрипт: Преобразование XML в HTML Class XMLHTML { VAR $xmlparser: VAR $tagcolor ="#800000"; VAR $datacolor ="#0000 ff"; function XMLHTML( ) { $this->xmlparser = xml_parser_create(); xml_set_object($this->xmlparser. &$this); xml_set_element_handler($this->xmlparser, "start. Tag", "end. Tag"); xml_set_character_data_handler($this->xmlparser. "character. Data"); } 56

Преобразование XML в HTML // Функция отвечает за обработку всех открывающих тегов. function start. Преобразование XML в HTML // Функция отвечает за обработку всех открывающих тегов. function start. Tag($parser, $tagname, $attributes) { GLOBAL $tagcolor; print "&1 t ; $tagname> ; " ; // Функция отвечает за обработку всех символьных данных. function character. Data($parser, $character. Data) { GLOBAL $datacolor; print "  $character. Data "; 57

Преобразование XML в HTML // Функция отвечает за обработку всех закрывающих тегов. function end. Преобразование XML в HTML // Функция отвечает за обработку всех закрывающих тегов. function end. Tag(Sparser, $tagname) { GLOBAL $tagcolor; print "< / $tagname> "; } function parse($fp) { xml_parse($this->xmlparser, $data); 58

Преобразование XML в HTML // Обработать файл XML while ( $line = fread($fp, 4096) Преобразование XML в HTML // Обработать файл XML while ( $line = fread($fp, 4096) ) : // При возникновении ошибки прервать обработку и вывести сообщение об ошибке. if ( ! xml_parse($this->xmlparser, $line, feof($fp))) : die(sprintf("XML error: %s at line %d", xml_error_sthng(xml_get_error_code($this->xmlparser)), xml_get_curren_line_number($this->xml parser))); endif; endwhile; }} 59

Преобразование XML в HTML // Открыть файл XML для обработки $xml_file = Преобразование XML в HTML // Открыть файл XML для обработки $xml_file = "bookmarks. xml"; $fp = f open ($xml_flie, "r"); // Создать новый объект $xml_parser = new XMLHTML; // Обработать $xml_file $xml_parser->parse($fp); ? > 60

Преобразование XML в HTML В результате преобразования файл bookmarks. xml выводится в браузере в Преобразование XML в HTML В результате преобразования файл bookmarks. xml выводится в браузере в следующем виде: Epicurious http: //www. epicurious. com Epicurious is a great online cooking resource, providing tutorials, recipes, forums and more. 61