ГЛАВА 8
Связывание данных



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

При связывании данных вы соединяете XML-документ с HTML-страницей, а затем встраиваете стандартные HTML-элементы, такие как SPAN или TABLE, в отдельные XML-элементы. HTML-элементы затем автоматически отображают содержимое XML-элементов, в которые они встроены.

Связывание данных, как и другие методы, о которых вы узнаете в этой главе, работает только с XML-документом, который симметрично структурирован, т.е элементы документа могут быть интерпретированы как набор записей и полей. В простейшем случае такой документ состоит из корневого элемента, содержащего множество элементов одинакового типа (записи), каждый из которых имеет одинаковый набор дочерних элементов, причем все они содержат символьные данные (поля). В качестве примера можно привести документ lnventory.xml, который представлен в Листинге 8-1. Элементы BOOK этого документа могут быть интерпретированы как записи, а элементы, вложенные в каждый элемент BOOK (TITLE, AUTHOR и т.д.), могут быть интерпретированы как поля. Далее в этой главе вы подробнее узнаете о специфических структурах документа, которые подходят для связывания данных. Если структура документа такова, что не допускает связывание данных, можно использовать метод создания сценариев, о котором пойдет речь в главе 9.

В этой главе вы прежде всего получите сведения о двух основных шагах при связывании данных. Затем вы узнаете в подробностях, как привязать XML-документ к HTML-странице (первый основной шаг) и как сцеплять элементы HTML с элементами XML (второй основной шаг). Наконец, вы узнаете, как программировать Web-страницу с помощью сценариев, которые используют в качестве базового объекта программирования связанные данные (Data Source Object, или DSO). Вы можете применять эти сценарии совместно со связыванием данных либо независимо.

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

Ссылка. Для получения более подробной информации о связывании данных и объекте DSO, который лежит в основе этого метода, обратитесь к Web-странице Microsoft Developer Network (MSDN) по адресу: http:// msdn.microsoft. com/xml/xmlguide/xmldso .asp.

Основные шаги при связывании данных

  1. Установка связи XML-документа с HTML-страницей, на которой вы хотите отобразить данные XML. Этот шаг обычно реализуется включением HTML-элемента с именем XML в HTML-страницу. Например, следующий элемент на HTML-странице связывает XML-документ Book.xml со страницей:

<XML ID="dsoBook" SRS="Book.xml"X/XML>

  1. 2. Сцепление HTML элементов с XML-элементами. Когда вы сцепляете HTML-элементы с XML-элементом, HTML-элемент автоматически отображает содержимое XML-элемента. Например, следующий элемент SPAN на HTML-странице сцеплен с элементом AUTHOR связанного XML-документа:

<SPAN DATASRC="#dSoBook" DATAFLD="AUTHOR"X/SPAN>

В результате HTML-элемент SPAN отображает содержимое XML-элемента AUTHOR.

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

Шаг первый: установка связи XML-документа с HTML-страницей

Чтобы отобразить XML-документ на HTML-странице, вы должны установить его связь со страницей. Самый простой путь сделать это в Microsoft Internet Explorer 5 - включить в страницу HTML-элемент с именем XML, так называемый фрагмент данных. Вы можете использовать одну из двух различных форм записи для фрагмента данных.

В первой форме весь текст XML-документа помещается между начальным и конечным тегами XML. Вот пример фрагмента данных на следующей HTML-странице:

<HTML> 

<HEAD>

<TITLE>Book Description<TITLE> 

</HEAD> 

<BODY>

<XML ID="dsoBook"> 

<?xml version="1.0"?> 

<BOOK>

<TITLE>The Adventures of Huckleberry Нпп<TITLE> 

<AUTHOR>Mark Twain</AUTHOR> 

<BINDING>mass market paperback</BINDING> 

<PAGES>298</PAGES> 

<PRICE>$5.49</PRICE> 

</BOOK> 

</XML>

<!-- другие элементы HTML... --> 

</BODY> 

</HTML>

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

<HTML> 

<HEAD>

<TITLE>Book Description</TITLE> 

</HEAD>

<BODY>

<XML ID="dsoBook" SRC="Book.xml"></XML> 

<!-- другие элементы HTML... -->

</BODY> 

</HTML>

В предыдущем примере текст XML-документа должен содержаться в отдельном файле Book.xml:

<?xml version="1.0"?>

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

<ВООК>

<TITLE>The Adventures of Huckleberry Рпп</TITLE>

<AUTHOR>Mark Twain</AUTHOR>

<6INDING>mass market paperback</BINDING>

<PAGES>298</PAGES>

<PRICE>$5.49</PRICE> 

</BOOK>

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

Примечание. Имейте в виду, что элемент с именем XML, используемый для создания фрагмента данных, не является собственно XML-элемен-т( INI. Это просто HTML-элемент, который содержит XML-элементы. Сле-дс шательно, использование синтаксиса XML для пустого элемента, <XML ID="dsoBook" SRC="Book.xml" />, недопустимо.

Вы должны присвоить атрибуту ID фрагмента данных уникальный идентификатор, который используется для доступа к XML-документу с I ITML-страницы. (В предыдущем примере в качестве значения для ID вы-iтунает "dsoBook".)

При второй форме записи фрагмента данных вы присваиваете атрибуту SRC URL файла, содержащего данные XML. Вы можете использовать URL, как и следующем примере:

<XML ID="dsoBook" SRC=http://WWW.my_domain.com/documents/Book.xml> 

</XML>

Чаще, однако, вы используете частичный URL, который задает местонахождение относительно местонахождения HTML-страницы, содержащей фрагмент данных. Например, атрибут SRC в следующем фрагменте данных указывает, что файл Book.xml находится в той же папке, что и HTML-страница:

<XML ID="dsoBook" SRC="Book.xml"></XML>

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

Как хранятся данные XML

Когда Internet Explorer 5 открывает HTML-страницу, его встроенный XML-процессор синтаксически анализирует XML-документ. Internet Explorer 5 также создает программный объект, который носит название Объект исходных данных (Data Source Object DSO), который хранит данные XML и обеспечивает доступ к этим данным. DSO хранит данные XML как набор записей — т.е. множество записей и их полей. Например, если вы включите документ Inventory.xml (см. Листинг 8-1) в страницу как фрагмент данных, DSO будет хранить каждый элемент BOOK как запись, а каждый дочерний элемент внутри BOOK (TITLE, AUTHOR и т.д.) как поле.

Когда вы сцепляете HTML-элемент с XML-элементом, DSO автоматически предоставляет значение XML-элемента и управляет всеми его свойствами. DSO также позволяет вам напрямую осуществлять доступ и манипулирование имеющимся набором записей посредством ряда методов, свойств и событий. Методы представляют собой функции, которые вы можете вызывать со страницы для доступа или модификации набора записей. (Например, вы можете использовать методы для перемещения между записями.) Свойства представляют собой установленные на данный момент параметры, которые вы можете считывать и в ряде случаев изменять со страницы. (Например, вы можете считать свойство, которое сообщает вам, достигли ли вы последней записи.) События представляют собой определенные смены состояний (например, изменение значений записи), которыми вы можете управлять посредством функции сценария, который вы создаете для страницы.

На странице идентификатор, который вы присваиваете атрибуту ID во фрагменте данных, представляет DSO. (В предыдущем разделе в рассмотренном примере таким идентификатором является dsoBook)

Проверка на наличие ошибок XML

Когда вы открываете XML-документ (автономный или с таблицей стилей) непосредственно в Internet Explorer 5, браузер проверяет, является ли документ корректно сформированным. Если он обнаруживает ошибки, то приостанавливает отображение документа и выводит сообщение о фатальной ошибке, которое помогает вам выявить ошибку и устранить ее.

Если вы открываете XML-документ через фрагмент данных на HTML-странице, Internet Explorer 5 проверяет, является ли документ корректно сформированным, а также — если документ включает объявление типа документа — является ли он валидным. Однако в том случае, если документ содержит ошибку, Internet Explorer 5 просто не будет отображать данные XML, не выводя сообщение об ошибке.

Чтобы увидеть описание какой-либо ошибки, имеющейся в связанном XML-документе, вы можете протестировать документ с использованием сценариев проверки на корректность и валидность, представленных в разделе «Проверка валидности XML-документа» в главе 9.

Шаг второй: сцепление HTML-элементов с XML-элементами

Вы можете осуществлять сцепление HTML-элементов с XML-элементами двумя основными способами.

Использование табличного сцепления данных

Самый простой способ отобразить XML-документ, который состоит из группы записей (такой как lnventory.xml, представленный в Листинге 8-1), — это сцепить HTML-элемент TABLE с данными XML таким образом, чтобы в таблице автоматически отображались сразу все записи (или одна страница записей за раз, если вы установили режим постраничного отображения). При таком подходе Internet Explorer 5 берет на себя большую часть работы; вам не нужно писать сценарии или вызывать методы (функции). (Одно исключение состоит в том, что если вы выбрали режим проли-стывания, вам потребуется включить несколько вызовов простых функций, о чем пойдет речь далее в этой главе.)

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

Использование одной HTML-таблицы для отображения простого набора записей

Вы можете использовать один HTML-элемент TABLE для отображения XML-документа, в котором данные организованы в виде простого набора записей - т.е. XML-документа, составленного следующим образом:

Примером такого типа XML-документов является документ lnventory.xml, который вы использовали в предыдущих главах. Он представлен в Листинге 8-1. (Копия этого файла содержится на CD-ROM.) В этом документе

корневой элемент (INVENTORY) содержит набор из восьми элементов-записей (элементы BOOK), и каждый из элементов-записей имеет одинаковый набор элементов-полей, которые содержат только символьные данные (TITLE, AUTHOR, BINDING, PAGES, PRICE).

Листинг 8-1

Inventory.xml

<?xmlversion="1.0"?>

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

<INVENTORY> 

<BOOK>

<TITLE>The Adventures of Huckleberry Finn</TITLE>

<AUTHOR>Mark Twain</AUTHOR>

<BINDING>mass market paperback</BINDING>

<PAGES>298</PAGES>

<PRICE>$5.49</PRICE> 

</BOOK> 

<BOOK>

<TITLE>Leaves of Grass</TITLE>

<AUTHOR>Walt Whitman</AUTHOR>

<BINDING>hardcover</BINDING>

<PAGES>462</PAGES>

<PRICE>$7.75</PRICE> 

</BOOK> 

<BOOK>

<TITLE>The Legend of Sleepy Hollow</TITLE>

<AUTHOR>Washington Irving</AUTHOR>

<BINDING>mass market paperback</BINDING>

<PAGES>98</PAGES>

<PRICE>$2.95</PRICE> 

</BOOK> 

<BOOK>

<TITLE>The Marble Faun</TITLE>

<AUTHOR>NathanielHawthome</AUTHOR>

<BINDING>trade paperback</BINDING>

<PAGES>473</PAGES>

<PRICE>$10.95</PRICE> 

</BOOK> 

<BOOK>

<TITLE>Mоbу-Dick</TILTE>

<AUTHOR>Herman Melville</AUTHOR>

<B!NDING>hardcover</BINDING>

<PAGES>724</PAGES>

<PRICE>$9.95</PRICE> 

</BOOK> 

<BOOK>

<TITLE>The Portrait of a Lady</TITLE>

<AUTHOR>Henry James</AUTHOR>

<BINDING>mass market paperback</BINDING>

<PAGES>256</PAGES>

<PRICE>$4.95</PRICE>

</BOOK>

<BOOK>

<TITLE>The Scarlet Letter</TITLE>

<AUTHOR>Nathaniel Hawthorne</AUTHOR>

<BINDING>tradepaperback</BINDING>

<PAGES>253</PAGES>

<PRICE>$4.25</PRICE> 

</BOOK> 

<BOOK>

<TITLE>The Turn of the Screw</TITLE>

<AUTHOR>Henry James</AUTHOR>

<BINDING>trade paperback</BINDING>

<PAGES>384</PAGES>

<PRICE>$3.35</PRICE> 

</BOOK> 

</INVENTORY>

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

В качестве примера возьмем HTML-страницу из Листинга 8-2, которая содержит таблицу, сцепленную с данными документа Inventory.xml из Листинга 8-1. (Копия Листинга 8-2 содержится на CD-ROM в файле Inventory Table.htm.)

Листинг 8-2

Inventory Table.htm

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

<HTML>

<HEAD>

<TITLE>Book lnventory</TITLE> 

</HEAD>

<BODY>

<XML ID="dsolnventory" SRC="lnventory.xml"></XML> 

<H2>Booklnventory</H2>

<TABLE DATASRC="#dsolnventorY" BORDER="1" CELLPADDING="5">

 <THEAD>

<ТН>Title</TH>

<ТН>Author</TH>

<ТН>Вшйтд</TH>

<ТН>Радез</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 DATAFD="BINDING"></SPAN></TD>

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

<TD><SPAN DАТАFLD="РР1СЕ"></SAPAN></TD> 

</TR> 

</TABLE>

</BODY> 

</HTML>

XML-докзпиент из Листинга 8-1 связан с HTML-страницей из Листинга 8-2 посредством фрагмента данных на этой странице, имеющего ID dsolnventory:

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

Элемент TABLE страницы сцеплен со всем XML-документом путем присвоения атрибуту DATASRC элемента идентификатора (ID) фрагмента данных, предваренного символом #:

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

Таблица определена со стандартным заголовком (элемент THEAD) и с одной строкой (элемент TR). Каждая ячейка в этой строке (т.е., каждый элемент TD) состоит из элемента SPAN, который сцеплен с одним из полей XML-документа таким образом, что этот элемент отображает содержимое поля. Например, первая ячейка содержит элемент SPAN, сцепленный с полем TITLE:

<TD><SPAN DATAFLD="TITLE"

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

Элемент SPAN связывается с полем XML путем присвоения имени поля (в данном примере TITLE) атрибуту DATAFLD элемента.

Вот как работает связывание данных: даже если в элементе TABLE определена только одна строка, когда браузер отображает таблицу, он повторяет строковый элемент для каждой записи в XML-документе. Т.е., в первой строке, следующей за заголовком, отображены поля (TITLE, AUTHOR и т.д.), принадлежащие первой записи (элемент BOOK для книги Adventures of Huckleberry Finn). В следующей строке отображены поля для второй записи (элемент BOOK для книги Leaves of Grass) и т.д. На следующем рисунке показано как выглядит документ в Internet Explorer 5.

У вас может возникнуть вопрос, почему ячейки (элементы TD) не сцеплены непосредственно с полями XML. Ответ заключается в том, что элемент TD не является связываемым HTML-элементом. (Связываемые элементы перечислены в таблице 8.3 в разделе «Другие способы связывания данных».) Следовательно, вы должны включить внутрь каждого элемента TD связываемый элемент (обычно SPAN).

Ссылка. Чтобы получить информацию о том, как работает HTML и динамический HTML (DHTML) применительно к Internet Explorer 5, посетите следующий Web-сайт MSDN: http://msdn.microsoft.com/workshop/author/default.asp. Чтобы познакомиться с официальной спецификацией HTML, обратитесь к Web-сайту консорциума W3C по адресу http://www.w3.org/TR/REC-html40/.

Использование постраничного отображения

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

  1. Установите для атрибута DATAPAGESIZE сцепленного элемента TABLE значение, равное максимальному числу записей, которые вы хотите отобразить за раз. Каждая страница записей будет содержать заданное вами число записей. Например, следующий начальный тег для элемента TABLE присваивает число «5» атрибуту DATAPAGESIZE, в результате чего в таблице будет отображено пять записей за раз:

<ТАВLЕ DATASRC="#dsolnventory" DATAPAGESIZE="5">

  1. Присвойте уникальный идентификатор атрибуту ID элемента TABLE, как для следующего начального тега:

<TABLE ID="lnventoryTabte" DATASRC="#dsolnventory" DATAPAGESIZE="5">

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

Таблица 8.1

Метод элемента TABLE

Эффект

Пример вызова

firstPage

Отображает первую страницу записей

InventoryTable.firstPage()

previousPage

Отображает предыдущую страницу записей

InventoryTable.previousPage()

nextPage

Отображает следующую страницу записей

InventoryTable.nextPage()

lastPaoe.

Отображает последнюю страницу записей

InvontoryTable.lastPagc() ,

Если в текущий момент отображена первая страница, вызов метода previousPage игнорируется, а если отображена последняя страница, то игнорируется вызов neoctPage.

Вы можете вызвать любой из этих методов из написанного вами сценария. Однако наиболее простой способ обращения к одному из методов заключается в присвоении метода атрибуту ONCLICK HTML-элемента BUTTON, как в следующем примере:

<BUTTON ONCLICK="lnventoryTable.nextPage()">Next Page</BUTTON>

Этот элемент отображает кнопку. Когда пользователь щелкает на кнопке, вызывается метод, присвоенный атрибуту ONCLICK, а именно, InventoryTable.nextPage.

Техника использования постраничного вывода демонстрируется в Листингах 8-3 и 8-4. Листинг 8-3 представляет собой расширенную версию документа Inventory.xml из Листинга 8-1. Листинг 8-4 представляет собой HTML-страницу, которая отображает этот XML-документ в таблице, атрибуту DATAPAGESIZE которой присвоено значение «5». (Копии Листингов 8-3 и 8-4 содержатся на прилагаемом к книге CD-ROM в файлах Inventory Big.xml и Inventory Big Table.htm.)

В верхней части страницы имеется четыре элемента BUTTON, каждый из которых выполняет действие в соответствии с методами постраничного вывода таблицы. Когда вы впервые открываете HTML-страницу, в таблице отображаются первые пять записей. Щелчок мышью на кнопке Next Page приводит к отображению следующих пяти записей (или, в конце таблицы, оставшегося числа записей), а щелчок на кнопке Previous приводит к отображению предыдущих пяти записей (или, в начале таблицы, первых пяти записей). Щелчок на кнопке First Page или на кнопке Last Page приводит к отображению первых или последних пяти записей. На следующем рисунке показано как документ из Листинга 8-4 будет выглядеть в Internet Explorer 5.

Листинг 8-3 

Inventory Big.xml

<?xmlversion="1.0"?>

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

<INVENTORY> 

<BOOK>

<TITLE>The Adventures of Huckleberry Finn</TITLE>

<AUTHOR>Mark Twain</AUTHOR>

<BINDING>mass market paperback</BINDING>

<PAGES>298</PAGES>

<PRICE>$5.49</PRICE> 

</BOOK> 

<BOOK>

<TITLE>The Adventures of Tom Sawyer</TITLE>

<AUTHOR>Mark Twain</AUTHOR>

<BINDING>mass market paperback</BINDING>

<PAGES>205</PAGES>

<PRICE>$4.75</PRICE> 

</BOOK> 

<BOOK>

<TITLE>The Ambassadors</TITLE>

<AUTHOR>Henry James</AUTHOR>

<BINDING>mass market paperback</BINDING>

<PAGES>305</PAGES>

<PRICE>$5.95</PRICE> 

</BOOK> 

<BOOK>

<TITLE>The Awakening<YTITLE>

<AUTHOR>Kate Chopin</AUTHOR>

<BINDING>mass market paperback</BINDING>

<PAGES>195</PAGES>

<PRICE>$4.95</PRICE> 

</BOOK> 

<BOOK>

<TITLE>BillyBudd<AITLE>

<AUTHOR>Herman Melville</AUTHOR>

<BlNDING>mass market paperback</BINDING>

<PAGES>195</PAGES>

<PRICE>$4.49</PRICE> 

</BOOK> 

<BOOK>

<TITLE>A Connecticut Yankee in King Arthur's Court</TITLE>

<AUTHOR>Mark Twain</AUTHOR>

<BINDING>mass market paperback</BINDING>

<PAGES>385</PAGES>

<PRICE>$5.49</PRICE> 

</BOOK> 

<BOOK>

<TITLE>Joan of Аrс</TITLE>

<AUTHOR>Mark Twain</AUTHOR>

<BINDING>trade paperback</BINDING>

<PAGES>465</PAGES>

<PRICE>$6.95</PRICE> 

</BOOK> 

<BOOK>

<TITLE>Leaves of Grass</TITLE>

<AUTHOR>Walt Whitman</AUTHOR> 

<BINDING>hardcover</BINDING> 

<PAGES>462</PAGES> 

<PRICE>$7.75</PRICE> 

</BOOK> 

<BOOK>

<TITLE>Trie Legend of Sleepy Hollow</TITLE> 

<AUTHOR>Washington lrving</AUTHOR> 

<BINDING>mass market paperback</BINDING> 

<PAGES>98</PAGES> 

<PRICE>$2.95</PRICE> 

</BOOK> 

<BOOK>

<TITLE>The Marble Faun</TITLE> 

<AUTHOR>NathanielHawthorne</AUTHOR> 

<BINDING>trade paperback</BINDING> 

<PAGES>473</PAGES> 

<PRICE>$10.95</PRICE> 

</BOOK> 

<BOOK>

<TITLE>Моbу-Dick</TITLE> 

<AUTHOR>Herman Melvilte</AUTHOR> 

<BINDING>hardcover</BINDING> 

<PAGES>724</PAGES> 

<PRICE>$9.95</PRICE> 

</BOOK> 

<BOOK>

<TITLE>Passing</TITLE> 

<AUTHOR>Nella Larsen</AUTHOR> 

<BINDING>trade paperback</BINDING> 

<PAGES>165</PAGES> 

<PRICE>$5.95</PRICE> 

</BOOK> 

<BOOK>

<TITLE>The Portrait of а Lady</TITLE> 

<AUTHOR>Henry James</AUTHOR> 

<BINDING>mass market paperback</BINDING> 

<PAGES>256</PAGES> 

<PRICE>$4.95</PRICE> 

</BOOK>

<BOOK>

<TITLE>Roughing It</TITLE>

<AUTHOR>Mark Twain</AUTHOR>

<BINDING>mass market paperback</BINDING>

<PAGES>324</PAGES>

<PRICE>$5.25</PRICE> 

</BOOK> 

<BOOK>

<TITLE>The Scarlet Letter</TITLE>

<AUTHOR>Nathaniel Hawthome</AUTHOR>

<BINDING>trade paperback</BINDING>

<PAGES>253</PAGES>

<PRICE>$4.25</PRICE> 

</BOOK> 

<BOOK>

<TITLE>The Turn of the Screw</TITLE>

<AUTHOR>Henry James</AUTHOR>

<BINDING>tradepaperback</BINDING>

<PAGES>384</PAGES>

<PRICE>$3.35</PRICE> 

</BOOK> 

</INVENTORY>

 

Листинг 8-4

Inventory Big Table.htm

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

<HTML>

<HEAD>

<TITLE>Book lnventory<TITLE> 

</HEAD>

<BODY>

<XML ID="dsolnventory" SRC="lnventory Big.xml"></XML> 

<H2>Booklnventory</H2>

<BUTTON ONCLlCK="lnventoryTabte.firstPage()">

|&lt; First Page 

</BUTTON>

&nbsp;&nbsp; 

<BUTTON ONCUCK="lnventoryTable.previousPage()">

&lt; Previous Page 

</BUTTON> 

&nbsp;&nbsp; 

<BUTTON ONCUCK="lnventoryTable.nextPage()">

Next Page &gt; 

</BUTTON> 

&nbsp;&nbsp; 

<BUTTON ONCUCK="lnventoryTable.lastPage()">

Last Page &gt;| 

</BUTTON> 

<p>

<TABLE ID="lnventoryTable" DATASRC="#dsolnventory" 

DATAPAGESIZE="5" BORDER="1" CELLPADDING="5"> 

<THEAD>

<ТН>Title</TН>

<ТН>Author</TH>

<TH>Binding</TH>

<ТН>Pages</TH>

<ТН>Рrice</TН>

</THE