Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_XML.doc
Скачиваний:
16
Добавлен:
03.05.2019
Размер:
3.94 Mб
Скачать

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

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

В иерархическом наборе записей каждая запись может содержать, в дополнение к фиксированному набору полей, переменное число вхождений (нуль или более) вложенных записей. В Листинге 1.17 представлен пример XML-документа, структурированного как иерархический набор записей. В этом документе корневой элемент (INVENTORY) содержит группу записей PLACE. Каждая запись PLACE начинается с поля COUNTRY, которое содержит только символьные данные, а затем следуют нуль или несколько вложенных записей BOOK. Каждая вложенная запись BOOK имеет пять полей (TITLE, AUTHOR, BINDING, PAGES, PRICE).

<?xml version="1.0"?>

<!-- Имя файла: Inventory02.xml -->

<INVENTORY>

<PLACE>

<COUNTRY>Россия</COUNTRY>

<BOOK>

<TITLE>Война и мир</TITLE>

<AUTHOR>Лев Толстой</AUTHOR>

<BINDING>Жёсткая обложка</BINDING>

<PAGES>510</PAGES>

<PRICE>12 000 рублей</PRICE>

</BOOK>

<BOOK>

<TITLE>Преступление и наказание</TITLE>

<AUTHOR>Фёдор Достоевский</AUTHOR>

<BINDING>Мягкая обложка</BINDING>

<PAGES>590</PAGES>

<PRICE>14 000 рублей</PRICE>

</BOOK>

</PLACE>

<PLACE>

<COUNTRY>Франция</COUNTRY>

<BOOK>

<TITLE>Королева Марго</TITLE>

<AUTHOR>Александр Дюма</AUTHOR>

<BINDING>Мягкая обложка</BINDING>

<PAGES>410</PAGES>

<PRICE>10 000 рублей</PRICE>

</BOOK>

</PLACE>

<PLACE>

<COUNTRY>Англия</COUNTRY>

<BOOK>

<TITLE>Затерянный мир</TITLE>

<AUTHOR>Артур Конан Дойль</AUTHOR>

<BINDING>Жёсткая обложка</BINDING>

<PAGES>350</PAGES>

<PRICE>9 000 рублей</PRICE>

</BOOK>

</PLACE>

</INVENTORY>

Листинг 1.17

Листинг 1.18 содержит HTML-страницу, которая использует вложенную таблицу для отображения иерархической структуры записей XML-документа из Листинга 1.17.

<HTML>

<HEAD>

<TITLE>Мировая литература</TITLE>

</HEAD>

<BODY>

<XML ID="dsoInventory" SRC="Inventory02.xml"></XML>

<TABLE DATASRC="#dsoInventory" BORDER="1">

<THEAD>

<TH>Мировая литература</TH>

</THEAD>

<TR>

<TD><SPAN DАТАFLD="COUNTRY"></SРАN></TD>

</TR>

<TR>

<TD>

<TABLE DATASRC="#dsoInventory" DATAFLD="BOOK"

BORDER="0" CELLSPACING="10">

<THEAD>

<ТН>Заголовок</TН>

<TH>Автор</TH>

<TH>Обложка</TH>

<ТН>Страниц</TН>

<TH>Цена</TH>

</THEAD>

<TR ALIGN="CENTER">

<TD><SPAN DATAFLD="TITLE"

STYLE="font-style:italic"></SPAN></TD>

<TD><SPAN DATAFLD="AUTHOR"></SPAN></TD>

<TD><SPAN DATAFLD="BINDING"></SPAN></TD>

<TD><SPAN DATAFLD="PAGES"></SPAN></TD>

<TD><SPAN DATAFLD="PRICE"></SPAN></TD>

</TR>

</TABLE>

</TD>

</TR>

</TABLE>

</BODY>

</HTML>

Листинг 1.18

В Листинге 1.17 внешняя таблица сцеплена с XML-документом, что видно из описания начального тега:

<TABLE DATASRC="#dsolnventory" BORDER="1">

Внешняя таблица также включает заголовок (элемент THEAD, отображающий надпись “Мировая литература”), плюс две строки таблицы (два элемента TR). Браузер повторяет две строки для каждой записи верхнего уровня (т.е. для каждой записи PLACE). В первой строке отображается поле COUNTRY. Это подобно рассмотренному ранее в Листинге 1.15 примеру таблицы, отображающей простой набор записей. Однако вторая строка не отображает поле, а содержит вложенную таблицу, которая отображает содержимое каждой вложенной записи BOOK внутри текущей категории. Вот разметка для вложенной таблицы:

<TABLE DATASRC="#dsoInventory" DATAFLD="BOOK"

BORDER="0" CELLSPACING="10">

<THEAD>

<ТН>Заголовок</TН>

<TH>Автор</TH>

<TH>Обложка</TH>

<ТН>Страниц</TН>

<TH>Цена</TH>

</THEAD>

<TR ALIGN="CENTER">

<TD><SPAN DATAFLD="TITLE"

STYLE="font-style:italic"></SPAN></TD>

<TD><SPAN DATAFLD="AUTHOR"></SPAN></TD>

<TD><SPAN DATAFLD="BINDING"></SPAN></TD>

<TD><SPAN DATAFLD="PAGES"></SPAN></TD>

<TD><SPAN DATAFLD="PRICE"></SPAN></TD>

</TR>

</TABLE>

В этом случае необходимо сцепить вложенную таблицу не только с XML-документом (DATASRC="#dsoInventory"), но и с вложенными записями BOOK (DATAFLD="BOOK"), чтобы в таблице отображалось содержимое каждой записи BOOK, вложенной в текущую запись PLACE. Другими словами, строковый элемент (TR) в этой таблице будет повторен для каждого из этих элементов BOOK. (Заметим, что внешняя таблица по умолчанию сцеплена с записями верхнего уровня - в данном случае, с записями PLACE — поэтому каждая из этих записей отображается при переходе к новой категории.) На рисунке 40 показано как документ из Листинга 1.18 будет выглядеть в Internet Explorer.

Можно использовать дополнительные вложенные таблицы для отображения документа, который содержит дополнительные уровни вложенных записей. Рассмотрим в качестве примера документ из Листинга 1.17. Можно заменить каждое поле AUTHOR:

<AUTHOR>Geoffrey Chaucer</AUTHOR>

на нуль или несколько записей AUTHOR:

<AUTHOR>

<FIRSTNAME>Geoffrey</FIRSTNAME>

<LASTNAME>Chaucer</LASTNAME>

</AUTHOR>

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

Рисунок 40. Отображение вложенных таблиц