Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекція до_lab_7.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
494 Кб
Скачать
☆

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

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

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

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

<INVENTORY>

<CATEGORY>

<CATNAME>Middle Ages</CATNAME>

<BOOK>

<TITLE>The Canterbury Tales</TITLE>

<AUTHOR>Geoffrey Chaucer</AUTHOR>

<BINDING>hardcover</BINDING>

<PAGES>692</PAGES>

<PRICE>$18.95</PRICE>

</BOOK>

<BOOK>

<TITLE>Piers Plowman</TITLE>

<AUTHOR>William Langland</AUTHOR>

<BINDING>trade paperback</BINDING>

<PAGES>385</PAGES>

<PRICE>$10.95</PRICE>

</BOOK>

</CATEGORY>

<CATEGORY>

<CATNAME>Renaissance</CATNAME>

<BOOK>

<TITLE>The Blazing World</TITLE>

<AUTHOR>Margaret Cavendish</AUTHOR>

<BINDING>trade paperback</BINDING>

<PAGES>225</PAGES>

<PRICE>$8.79</PRICE>

</BOOK>

<BOOK>

<TITLE>Oroonoko</TITLE>

<AUTHOR>Aphra Behn</AUTHOR>

<BINDING>mass market paperback</BINDING>

<PAGES>295</PAGES>

<PRICE>$4.95</PRICE>

</BOOK>

<BOOK>

<TITLE>Doctor Faustus</TITLE>

<AUTHOR>Christopher Marlowe</AUTHOR>

<BINDING>hardcover</BINDING>

<PAGES>472</PAGES>

<PRICE>$15.95</PRICE>

</BOOK>

</CATEGORY>

<CATEGORY>

<CATNAME>18th Century</CATNAME>

<BOOK>

<TITLE>Gulliver's Travels</TITLE>

<AUTHOR>Jonathan Swift</AUTHOR>

<BINDING>hardcover</BINDING>

<PAGES>324</PAGES>

<PRICE>$11.89</PRICE>

</BOOK>

<BOOK>

<TITLE>The History of Tom Jones: A Foundling</TITLE>

<AUTHOR>Henry Fielding</AUTHOR>

<BINDING>hardcover</BINDING>

<PAGES>438</PAGES>

<PRICE>$16.95</PRICE>

</BOOK>

<BOOK>

<TITLE>Love in Excess</TITLE>

<AUTHOR>Eliza Haywood</AUTHOR>

<BINDING>trade paperback</BINDING>

<PAGES>429</PAGES>

<PRICE>$12.95</PRICE>

</BOOK>

<BOOK>

<TITLE>Tristram Shandy</TITLE>

<AUTHOR>Laurence Sterne</AUTHOR>

<BINDING>hardcover</BINDING>

<PAGES>322</PAGES>

<PRICE>$9.49</PRICE>

</BOOK>

</CATEGORY>

<CATEGORY>

<CATNAME>19th Century</CATNAME>

<BOOK>

<TITLE>Dracula</TITLE>

<AUTHOR>Bram Stoker</AUTHOR>

<BINDING>hardcover</BINDING>

<PAGES>395</PAGES>

<PRICE>$17.95</PRICE>

</BOOK>

<BOOK>

<TITLE>Great Expectations</TITLE>

<AUTHOR>Charles Dickens</AUTHOR>

<BINDING>mass market paperback</BINDING>

<PAGES>639</PAGES>

<PRICE>$6.95</PRICE>

</BOOK>

<BOOK>

<TITLE>Percival Keene</TITLE>

<AUTHOR>Frederick Marryat</AUTHOR>

<BINDING>trade paperback</BINDING>

<PAGES>425</PAGES>

<PRICE>$12.89</PRICE>

</BOOK>

<BOOK>

<TITLE>Treasure Island</TITLE>

<AUTHOR>Robert Louis Stevenson</AUTHOR>

<BINDING>trade paperback</BINDING>

<PAGES>283</PAGES>

<PRICE>$11.85</PRICE>

</BOOK>

<BOOK>

<TITLE>Wuthering Heights</TITLE>

<AUTHOR>Emily Bronte</AUTHOR>

<BINDING>hardcover</BINDING>

<PAGES>424</PAGES>

<PRICE>$12.95</PRICE>

</BOOK>

</CATEGORY>

</INVENTORY>

В этом документе корневой элемент (INVENTORY) содержит группу записей CATEGORY. Каждая запись CATEGORY начинается с поля CATNAME, которое содержит только символьные данные, а затем следуют нуль или несколько вложенных записей BOOK. Каждая вложенная запись BOOK имеет пять полей (TITLE, AUTHOR, BINDING, PAGES, PRICE).

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

<!-- Имя файла: Inventory Hierarchy.htm -->

<HTML>

<HEAD>

<TITLE>Inventory of Classic English Literature</TITLE>

</HEAD>

<BODY>

<XML ID="dsoInventory" SRC="Inventory Hierarchy.xml"></XML>

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

<THEAD>

<TH>Classic English Literature</TH>

</THEAD>

<TR>

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

</TR>

<TR>

<TD>

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

BORDER="0" CELLSPACING="10">

<THEAD>

<TH>Title</TH>

<TH>Author</TH>

<TH>Binding</TH>

<TH>Pages</TH>

<TH>Price</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>

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

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

Внешняя таблица также включает заголовок (элемент THEAD, отображающий надпись "Classic English Literature"), плюс две строки таблицы (два элемента TR). Браузер повторяет две строки для каждой записи верхнего уровня (т.е. для каждой записи CATEGORY). В первой строке отображается поле CATNAME. Это подобно рассмотренному ранее примеру таблицы, отображающей простой набор записей. Однако вторая строка не отображает поле, а содержит вложенную таблицу, которая отображает содержимое каждой вложенной записи BOOK внутри текущей категории.

Обратите внимание, что вы должны сцепить вложенную таблицу не только с XML-документом (DATASRC="#dsoInventory"), но и с вложенными записями BOOK (DATAFLD="BOOK"), чтобы в таблице отображалось содержимое каждой записи BOOK, вложенной в текущую запись CATEGORY. Другими словами, строковый элемент (TR) в этой таблице будет повторен для каждого из этих элементов BOOK. (Заметим, что внешняя таблица по умолчанию сцеплена с записями верхнего уровня – в данном случае, с записями CATEGORY – поэтому каждая из этих записей отображается при переходе к новой категории.)

На рисунке показано как документ из Листинга 8.6 будет выглядеть в Internet Explorer.

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

<AUTHOR>Geoffrey Chaucer</AUTHOR>

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

<AUTHOR>

<FIRSTNAME>Geoffrey</FIRSTNAME>

<LASTNAME>Chaucer</LASTNAME>

</AUTHOR>

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