Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция10_xml.doc
Скачиваний:
2
Добавлен:
08.08.2019
Размер:
151.55 Кб
Скачать

РНР и XML

Язык разметки XML

Применение

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

  • Дополнение к HTML для распространения в Web "нестандартной" информации. (химических, математических, физических формул, медицинских рецептов, нотных записей, и т.д).

  • Хранение и обработка структурированных данных в едином формате.

XML является конгломератом из трех отдельных спецификаций:

  • XML (Extensible Markup Language) — спецификация, определяющая базовый синтаксис;

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

  • XLL (Extensible Linking Language) — спецификация, определяющая представление ссылок на другие ресурсы.

Синтаксис XML

Пример документа XML

<?xml version="1.0"?>

<!DOCTYPE cookbook SYSTEM "cookbook.dtd">

<cookbook>

<recipe category="italian">

<title>Spaghetti alla Carbonara</title>

<description>This traditional Italian dish is sure to please even the most discriminating critic.</description>

<ingredients>

<ingredient>2 large eggs</ingredient>

<ingredient>4 strips of bacon</ingredient>

<ingredient>l clove garlic</ingredient>

<ingredient>12 ounces spaghetti</ingredient>

<ingredient>3 tablespoons olive oil</ingredient>

</ingredients>

<process>

<step>Combine oil and bacon in large skillet over medium heat. Cook until bacon is brown and crisp.</step>

<step>Whisk eggs in bowl. Set aside.</step>

<step>Cook pasta in large pot of boiling water to taste, stirring occasionally. Add salt as necessary.</step>

<step>Drain pasta and return to pot, adding whisked eggs. Stir over medium-low heat for 2-3 minutes.</step>

<step>Mix in bacon. Season with salt and pepper to taste.</step>

</process>

</recipe>

</cookbook>

Документ XML состоит из компонент:

  • пролог XML;

  • теги;

  • атрибуты;

  • ссылки на сущности;

  • инструкции по обработке;

  • комментарии.

Пролог XML

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

Пример:

<?xml version="1.0">

<!DOCTYPE cookbook SYSTEM "cookbook.dtd">

- может содержать другие инструкции.

Пример:

<?xml version="1.0" standalone="yes">

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

Элементы

Оставшаяся часть документа состоит из элементов, похожих на элементы документов HTML. Первый элемент называется корневым элементом (root element), поскольку в эту пару тегов заключены все остальные теги документа.

Служебные элементы XML

- заключены в угловые скобки (как в разметке HTML).

- элемент может быть пустым или содержащим информацию; в этом случае элемент содержит открывающий и закрывающий теги.

- если элемент не пуст, то в теги включаются имена, описывающие природу данных.

- непустые элементы должны содержать как открывающий, так и закрывающий тег.

- в элементах, которые логически не могут иметь закрывающего тега, используется альтернативная форма синтаксиса <элемент />.

- элементы XML должны находиться на правильном уровне вложенности.

- в элементах XML различается регистр символов (например, теги <tag>, <Tag> и <TAG> считаются разными тегами).

Атрибуты

- содержат дополнительную информацию о содержании, которая в дальнейшем используется при форматировании или обработке XML.

- значения атрибутов присваиваются в формате «имя=значение».

- в отличие от HTML, атрибуты XML должны быть заключены в апострофы или кавычки.

Инструкции по обработке (processing instructions, PI)

- представляют собой внешние команды, которые выполняются приложением, работающим с документом XML.

В общем случае синтаксис PI выглядит так:

<?приложение инструкции?>

Атрибут приложение указывает, какой программе адресованы последующие инструкции. Например, для выполнения команды РНР в документе XML можно воспользоваться следующей конструкцией:

<?php print "Today's date is:".date("m-d-Y");?>

Инструкции по обработке удобны тем, что они позволяют нескольким приложениям совместно работать с одним документом.

Комментарии

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

<!-- комментарии -->

Определение типа документа (DTD)

- DTD - это совокупность синтаксических правил, на основе которых проверяется структура документа XML.

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

- наличие DTD не является обязательным.

Если DTD существует, система XML руководствуется им при интерпретации документа XML.

Если DTD отсутствует, предполагается, что система XML должна интерпретировать документ по собственным правилам.

DTD можно включить

1. непосредственно в документ XML,

2. сослаться на него по URL

3. использовать комбинацию этих двух способов.

1. Непосредственное включение dtd в документ xml

- определение DTD располагается сразу же после пролога:

<!DOCTYPE имя_корневого_элемента

[ ...прочие объявления...] >

Атрибут имя_корневого_элемента соответствует имени корневого элемента в тегах, содержащих весь документ XML.

В секции «прочих объявлений» находятся определения элементов, атрибутов и т. д.

2. Размещение dtd в отдельном файле

Ссылка на внешний DTD в документе XML:

<!DOCTYPE имя_корневого_элемента SYSTEM "some_dtd.dtd">

- имя_корневого_элемента должно соответствовать имени корневого элемента в тегах, содержащих весь документ XML.

- атрибут SYSTEM указывает на то, что some_dtd.dtd находится на локальном сервере.

- на файл some_dtd.dtd также можно сослаться по его абсолютному URL.

- в кавычках указывается URL внешнего DTD, расположенного на локальном или на удаленном сервере.

Пример:

<!DOCTYPE cookbook SYSTEM "cookbook.dtd">

- cookbook является именем корневого элемента, a cookbook.dtd — именем DTD-файла. Содержимое DTD:

<?xml version="1.0"?>

<!DOCTYPE cookbook [

<!ELEMENT cookbook (recipe+)>

<!ELEMENT recipe (title, description, ingredients, process)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT description (#PCDATA)>

<!ELEMENT ingredients (ingredient+)>

<!ELEMENT ingredient (#PCDATA)>

<!ELEMENT process Cstep+)>

<!ELEMENT step (#PCDATA)>

<!ATTLIST recipe category CDATA #REQUIRED>

] >

Объявления элементов

Все элементы, используемые в документе XML, должны быть определены в DTD, прилагаемом к документу.

<!ELEMENT cookbook (recipe+)>

- описывает элемент XML, в данном случае — корневой элемент cookbook.

- recipe, заключенное в круглые скобки означает, что в теги cookbook заключается вложенный тег с именем recipe. Знак + говорит о том, что в родительских тегах cookbook находится одна или несколько пар тегов recipe.

Полный список операторов элементов:

? Ноль или ровно один экземпляр

* Ноль или несколько экземпляров

+ Один или несколько экземпляров

Ровно один экземпляр

| Один из элементов

, Перечисление элементов

<!ELEMENT recipe (title, description, ingredients. process)>

- в тег recipe входят четыре вложенных тега: title, description, ingredients и process. Поскольку после имен тегов не указываются признаки повторения, внутри тегов recipe должна быть заключена ровно одна пара каждого из перечисленных тегов.

<! ELEMENT title (#PCDATA)>

- определение тега, который не содержит вложенных тегов. В соответствии с определением он содержит #PCDATA, то есть произвольные символьные данные, не считающиеся частью разметки.

<!ELEMENT ingredients (ingredient+)>

- содержит один или несколько тегов с именем ingredient.

Определение элемента при помощи логических операторов.

<!ELEMENT ingredient (pasta+, (cheese | meat)+)>

- элемент pasta обязательно должен присутствовать в элементе ingredient, он указывается с признаком повторения +. Затем следует либо элемент cheese, либо элемент meat; альтернативы разделяются вертикальной чертой и заключаются в круглые скобки со знаком +, поскольку в ingredient всегда входит либо одно, либо другое.

Объявления атрибутов

Атрибуты элементов описывают значения, связываемые с элементами. Элементы XML, как и элементы HTML, могут иметь ноль, один или несколько атрибутов.

Общий синтаксис объявления атрибутов:

<!ATTLIST имя_элемента имя_атри6ута1 тип_данных1 флаг1 >

Имя_элемента определяет имя элемента, включаемое в тег. Затем перечисляются атрибуты, связанные с данным элементом. Объявление каждого атрибута состоит из трех основных компонентов: имени, типа данных и флага, определяющего особенности данного атрибута. Вместо многоточия (...) могут быть расположены объявления других атрибутов.

<!ATTLIST recipe category CDATA #REQUIRED>

- элемент recipe содержит атрибут category, который определяет общую категорию Italian. В определении ATTLIST указывается как имя элемента, так и имя атрибута, при этом атрибут объявляется обязательным (#REQUIRED).

Одновременное объявление нескольких атрибутов

<!ATTLIST recipe category CDATA #REQUIRED difficulty CDATA #REQUIRED>

- в дополнение к атрибуту category с элементом recipe связан дополнительный атрибут difficulty.

- оба атрибута объявляются в одном списке,

- оба атрибута являются обязательными, т.е. следующий тег будет считаться неверным: <recipe difficulty="hard">, потому что в нем отсутствует атрибут category. Правильный тег:

<recipe category="Italian" difficulty="hard">

Флаги атрибутов

#FIXED - Во всех экземплярах элемента в документе атрибуту может присваиваться только одно конкретное значение

#IMPLIED - Если атрибут не указан в элементе, используется значение по умолчанию

#REQUIRED - Атрибут является обязательным и должен присутствовать во всех экземплярах элемента в документе

Типы атрибутов

Атрибут элемента может объявляться с определенным типом.

Атрибуты CDATA - содержат общие символьные данные.

Атрибуты ID, IDREF и IDREFS — для однозначного представления данных посредством идентификаторов и создания перекрестных ссылок между документами.

Атрибут ID

Идентификаторы элементов присваиваются атрибуту ID.

Пример: связать с каждым элементом recipe уникальный идентификатор

<!ELEMENT recipe (title, description, ingredients, process)>

<!ATTLIST recipe recipe-id ID #REQUIRED>

<!ELEMENT recipe-ref EMPTY>

<!ATTLIST recipe-ref go IDREF #REQUIRED>

Объявление элемента recipe в документе:

<recipe recipe-id="ital003">

<title>Spaghetti alla Carbonara</title>

Атрибут IDREF

Атрибуту присваивается идентификатор, используемый для ссылок на элемент, — по аналогии с тем, как URL используется для идентификации страницы в гиперссылке.

Пример:

<favoriteRecipes>

<recipe-ref go="ital003">

</favoriteRecipes>

В процессе обработки документа XML элемент заменяется более наглядной ссылкой на recipe с указанным идентификатором.

Перечисляемые атрибуты

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

<!ATTLIST recipe category (Italian | French | Japanese | Chinese) #REQUIRED difficulty (easy | medium | hard) #REQUIRED)

При использовании списков допустимых значений включать в объявление тип CDATA не нужно, поскольку все перечисленные значения относятся к формату CDATA.

Перечисляемые атрибуты со значением по умолчанию

Пример, если атрибут recipe будет часто относиться к категории Italian, то категорию Italian можно назначить по умолчанию:

<!ATTLIST recipe category (Italian | French | Japanese | Chinese) "Itaian">

Если атрибут category не задан явно, по умолчанию ему присваивается значение Italian.

Атрибуты ENTITY и ENTITIES

Данные в документах XML не всегда являются текстовыми — документ может содержать и двоичную информацию (например, графику). На такие данные можно ссылаться при помощи атрибута ENTITY.

Пример: в описании элемента description можно указать атрибут recipePicture с графическим изображением:

<!ATTLIST description recipePicture ENTITY #IMPLIED>

Также можно объявить сразу несколько сущностей, заменив ENTITY на ENTITIES.

Значения разделяются пробелами.

Атрибуты NMTOKEN и NMTOKENS

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

<!ATTLIST recipe category NMTOKEN #REQUIRED>

Можно объявить сразу несколько атрибутов, заменив NMTOKEN на NMTOKENS. Значения разделяются пробелами.

Ссылки на сущности

Концепция сущности (entity) упрощает сопровождение документа, обеспечивая возможность ссылки на некоторое содержание по ключевым словам.

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

Сущности удобны тем, что они могут многократно использоваться в документах XML.

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

Объявление сущности включается в DTD документа XML.

Чтобы сослаться на некоторую сущность в документе HTML, следует указать ее имя с префиксом «амперсанд» (&) и суффиксом «точка с запятой» (;).

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

При этом строка документа XML может выглядеть так:

<footer>

...прочие данные колонтитула...

&Copyright:

</footer>

Существует два вида сущностей: внутренние и внешние.

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

Внешними сущностями лучше воспользоваться при большом количестве документов.