Иллюстрированный самоучитель по PostgreSQL

Включение файлов XML, RSS и RDF

Процедура включения внешнего правильно оформленного (well-formed) документа XML очень похожа на метод parsed. Режим обработки XML активизируется присваиванием атрибуту method значения XML, RSS или RDF. Кроме того, он автоматически выбирается при передаче атрибута src с расширениями .xml, .rss и .rdf.

Атрибут delimiter в этом контексте задает имя элемента (тега), в котором производится поиск полей. В общем случае значения полей выводятся в порядке их следования в файле XML, если в теге <field> не указано имя выводимого элемента. Например, атрибут name="title" описывает символьные данные, заключенные между тегами <title> и </title> исходного документа XML.

В качестве примера рассмотрим документ XML languages.xml, в котором перечисляются языки взаимодействия с PostgreSQL. Документ имеет следующую структуру:

<?xml version="1.0" encoding="utf-8"?>
<languages>
<language>
<name>C</name>
<notes>Buill-in language.</notes>
</language>
<language>
<name>LXP</name>
<notes>Web-based content language.</notes>
</language>
<language>
<name>PL/pgSQL</name>
<notes>PostgreSQL procedural language.</notes>
</language>
</languages>

Обратите внимание: каждый язык описывается отдельным элементом <language>. Чтобы произвести лексический разбор этого файла XML по аналогии с рассмотренным выше примером файла с разделителями, присвойте атрибуту delimiter тега <include> значение language, а атрибуту src – значение languages.xml. Пример приведен в листинге 13.24.

Листинг 13.24. Включение файла XML.

<lхр>
<include src="languages.xml" delimiter="language" method="xml">
Language Name: <field name="name" /><br />
Language Notes: <field name="notes" /><br />
<hr />
</include>
</lxp>

После выполнения этого фрагмента будет получен следующий результат:

Language Name: C<br />
Language Notes: Built-in language.<br />
<hr />
Language Name: LXP<br />
Language Notes: Web-based content language.<br />
<hr />
Language Name: PL/pgSQL<br />
Language Notes: PostgreSQL procedural language.<br />
<hr />

В листинге 13.25 приведен пример отображения простого документа RDF XML. Он отличается от примера из листинга 13.24 тем, что относится именно к документу RDF. В результате атрибут delimiter можно не указывать, поскольку значение по умолчанию item подходит для структуры данных RDF.

Листинг 13.25. Включение файла RDF.

<lхр>
<include src › >/home/web/ports/headlines/slashdot.rdf>> lastblock › >5">
<table Dorder › >0" cellspacing › >l"><tr>
<td bgcolor › >#ffffff>> width › >100%>
<div class › >content>>> – <field name › >title>>></div>
</td>
</tr><tr>
<td bgcolor › >#e0e0e8" width › >100%>
<strong>
<field name › >link>> type › >url>> link › >Read More…>> target › >_blank>>>
</strong><br />
</td>
</tr></table>
</include>
</lxp>

Обратите внимание на атрибут lastblock в листинге 13.25. Этот атрибут уже упоминался в подразделе "Включение файлов с разделителями >> этого раздела. Атрибуты firstblock и lastblock также используются при включении файлов XML, RDF и RSS и определяют размер и смещение выводимых блоков.

Внимание
Учтите, что все документы XML, включаемые средствами LXP, должны быть правильно оформлены, иначе модуль лексического разбора выдаст ошибку. Ошибки разбора XML сохраняются в журнале ошибок Apache с префиксом [Ixp] XML Parse Error
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.