« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга

Тестирование 64-битных приложений

ПнВтСрЧтПтСбВс
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
    Популярное
Функция AccessResource

Некоторые аспекты использования пользовательских функций в предложениях SQL.

Учебная программа COPY.TXT

Сравнение диагностических возможностей анализаторов при проверке 64-битного кода

Команды, используемые при формировании запросов

Восстановление паролей к PWL-файлам

Элементы управления .NET. Работа с TreeView

Оболочка для компакт-диска своими руками

Взлом и защита PHP-скриптов

Использование Winsock контрола




    Архив файлов



    Сообщества



    Документация

Статьи:: Интернет технологии :: Учебник по XML :: ГЛАВА 8 Связывание данных


отправить ссылку другу версия для печати  Обсудить на форуме

ГЛАВА 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-элементами двумя основными способами.

  • Табличное сцепление, что означает сцепление HTML-элемента TABLE с данными XML, так что в таблице автоматически отображается весь набор записей, принадлежащих XML-документу.
  • Сцепление по отдельным записям, что означает сцепление не табличных элементов HTML (например, элементов SPAN) с XML-элементами таким образом, что за один раз отображается только одна запись.

 

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

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

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

 

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

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

  • корневой элемент содержит множество элементов типа запись (record) (в этой главе подобные элементы иногда называются просто записями);
  • каждый элемент типа запись содержит одинаковый набор элементов типа поле (field) (в этой главе подобные элементы иногда называются просто полями)',
  • каждый элемент типа поле содержит только символьные данные. (Если дочерний элемент элемента запись содержит один или несколько своих собственных дочерних элементов, DSO интерпретирует его как вложенную запись, а не как поле. О том, как отображать вложенные поля, вы узнаете в разделе «Использование вложенных таблиц для отображения иерархической структуры записей» далее в этой главе.)

Примером такого типа 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Н>

</THEAD> 

<TR ALIGN="center">

<TD><SPAN DАТАFLD="ТIТLЕ"

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

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

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

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

<ТD><SРАN DATAFLD="РRICE"></SPAN></TD> 

</TR> 

</TABLE>

</BODY>

</HTML>

 

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

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

В иерархическом наборе записей каждая запись может содержать, в дополнение к фиксированному набору полей, переменное число вхождений (нуль или более) вложенных записей. В Листинге 8-5 представлен пример XML-документа, структурированного как иерархический набор записей. (Копия этого листинга содержится на прилагаемом к книге CD-ROM в файле Inventory Hierarchy.xml.) В этом документе корневой элемент (INVENTORY) содержит группу записей CATEGORY. Каждая запись CATEGORY начинается с поля CATNAME, которое содержит только символьные данные, а затем следуют нуль или несколько вложенных записей BOOK. Каждая вложенная запись BOOK имеет пять полей (TITLE, AUTHOR, BINDING, PAGES, PRICE).

Листинг 8-5

Inventory Hierarchy.xml

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

<INVENTORY> 

<CATEGORY>

<CATNAME>Middle Ages</CATNAME> 

<BOOK>

<TITLE>The Canterbury Таlеs</TITLE>

<AUTHOR>GeoffreyChaucer</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>MargaretCavendish</AUTHOR>

<BINDING>trade paperback</BINDING>

<PAGES>225</PAGES>

<PRICE>$8.79</PRICE> 

</BOOK> 

<BOOK>

<TITLE>Oroonoko</TITILE>

<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 Relding</AUTHOR>

<BINDING>hardcover</BINDING>

<PAGES>438</PAGES>

<PRICE>$16.95</PRICE> 

</BOOK> 

<BOOK>

<TITLE>Love in Ехсеss</TITLE>

<AUTHOR>Eliza Haywood</AUTHOR>

<BINDING>tradepaperback</BINDING>

<PAGES>429</PAGES> 

<PRICE>$12.95</PRICE>

</BOOK>

<BOOK>

<TITLE>Tristram Shandy</TITLE> 

<AUTHOR>Laurence Steme</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 Ехресtations</TITLE> 

<AUTHOR>Charles Dickens</AUTHOR> 

<BINDING>mass market paperback</BINDING> 

<PAGES>639</PAGES> 

<PRICE>$6.95</PRICE>

</BOOK>

<BOOK>

<TITLE>Percival Кееnе</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>tradepaperback</BINDING> 

<PAGES>283</PAGES> 

<PRICE>$11.85</PRICE>

</BOOK>

<BOOK>

<TITLE>Wuthering Неights</TITLE> 

<AUTHOR>Emily Bronte</AUTHOR> 

<BINDING>hardcover</BINDING> 

<PAGES>424</PAGES> 

<PRICE>$12.95</PRICE> 

</BOOK> 

</CATEGORY> 

</INVENTORY>

 

Листинг 8-6 содержит HTML-страницу, которая использует вложенную таблицу для отображения иерархической структуры записей XML-до-кумента из Листинга 8-5. (Копия этого листинга содержится на прилагаемом к книге CD-ROM в файле Inventory Hierarchy.htm.)

Листинг 8-6

Inventory Hierarchy.htm

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

<HTML>

<HEAD>

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

</HEAD>

<BODY>

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

<TABLE DATASRC="fdsolnventory" BORDER="1"> 

<THEAD>

<TH>Classic English Literature</TH> 

</THEAD> 

<TR>

<TD><SPAN DАТАFLD="САТМАМЕ"></SРАN></TD> 

</TR> 

<TR>

<TD>

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

BORDER="0" CELLSPACING="10"> 

<THEAD>

<ТН>Title</TН>

<TH>Author</TH>

<TH>Binding</TH> 

<ТН>Раgез</TН> 

<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="#dsolnventory" BORDER="1">

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

<TABLE DATASRC="#dsolnventory" DATAFLD="BOOK" BORDER=0 CELLSPACING=10> 

<THEAD>

<ТН>Title</TH> 

<ТН>Author</TH> 

<ТН>Binding</TH>

<TH>Рage</TH>

<ТН>Price</TH>

</THEAD>

<TR ALIGN="CENTER">

<TD><SPAN DATAFLD="TITLE"

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

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

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

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

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

</TR> 

</TABLE>

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

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

<AUTHOR>Geoffrey Chaucer</AUTHOR> 

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

<AUTHOR>

<FIRSTNAME>Geoffrey</FIRSTNAME>

<LASTNAME>Chaucer</LASTNAME> 

</AUTHOR>

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




Рубрика: Учебник по XML




Trac + Subversion @ Ubuntu: Revisited.

Ubuntu

Задача: Установить на только что инсталлированный Ubuntu последнюю версию Trac, создать репозитории для нескольких проектов и настроить окружение соответственно. Структура проектов должна быть полностью корректной, установка максимально быстрой при минимальном количестве пакетов. Авторизация в репозитории и окружения Trac может быть общей, но позволяющей индивидуальную настройку для каждого проекта. Также, установка должна быть максимально независима от версий.


Подробнее... | Рубрика: Ubuntu | Добавлено: 30.08.2008

[g]Vim в режиме Python: Рекомпиляция в Windows.

Статьи

Редактор Vim наиболее известен среди разработчиков в системах Unix — конкурент emacs, что-то вроде консольного IDE — этот редактор при должной сноровке и настройке (мне кажется, сноровке несколько меньшей и настройке более очевидной чем в emacs, но у последнего также есть мощная мультифункциональность — выбор за программистом) способен убыстрить и упростить многие процессы на этапах разработки не в ущерб таким удобствам как, например, авто-дополнение и навигация по проекту.


Подробнее... | Рубрика: Статьи | Добавлено: 30.08.2008

Java + JSON. Пути к дружбе.

Технология JAVA

Спешу поделиться результатами небольшого исследования, оказавшегося необходимым для текущего проекта. Рассматривается возможность связки Java и JSON, её преимущества и недостатки. Я расскажу о практической части, о теории больше поведают нижеприведённые ссылки (англ.).


Подробнее... | Рубрика: Технология JAVA | Добавлено: 30.08.2008

Остальные статьи:

Драйвер SQL Server 2005 для PHP
Типы данных в MySQL (сжатый справочник для PHP программиста)
PHP класс для работы с Яндекс.XML
Ошибки начинающих PHP разработчиков
Наследование шаблонов в Smarty
Особенности хранения сессий PHP в memcached
Internet Explorer 8 beta 2
9 правил для начинающего Ajax-разработчика
ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения
Windows 7: под покровом тайны
Apache mod_ndb - MySQL кластер с доступом через HTTP и Ajax
Поиск уязвимостей в программах с помощью анализаторов кода
Как появилась библиотека VivaCore
Это сложно
ASP.NET и немного поисковой оптимизации
Protocol buffers: библиотека обмена данными для C++, Java, Python от Google


Цитата дня (все,добавить):



    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование

Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 93
Пользователей: 0