![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Связывание HTML-элементов с XML-атрибутами
В рассмотренном примере XML-документа ни один из элементов не имел атрибутов. Атрибуты несколько усложняют связывание данных, хотя при этом можно сцеплять как элементы, имеющие атрибуты, так и сами атрибуты. При связывании данных атрибут трактуется как дочерний элемент. Для элемента record такая трактовка облегчает доступ (или позволяет игнорировать) к атрибуту. Например, следующая запись BOOK содержит атрибут с именем InStock:
<BOOK InStock =”да”> <TITLE>Приключения Гекльбери Финна<TITLE> <AUTHOR>Марк Твен</AUTHOR> <BINDING>Жёсткая обложка</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK>
Эта запись трактуется так, как если бы атрибут InStock был полем, принадлежащим BOOK, а значение InStock было бы содержимым этого поля. Таким образом, элемент BOOK воспринимался бы в соответствии со следующей структурой:
<BOOK> <InStock>да</InStock> <TITLE>Приключения Гекльбери Финна<TITLE> <AUTHOR>Марк Твен</AUTHOR> <BINDING>Жёсткая обложка</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK>
Следовательно, можно получить доступ к значению атрибута с использованием обычной техники связывания данных. Например, следующий элемент SPAN сцеплен с атрибутом и отображает его значение:
<SPAN DATASRC="#dsoInventory" DATAFLD="InStock"></SPAN>
(В этом примере предполагается, что XML-документ связан со страницей через фрагмент данных с именем dsoInventory.) Следует учитывать, однако, что при добавлении атрибута к одному из элементов-полей в XML-документе, например, добавлении атрибута к полю AUTHOR,
<ВООК> <TITLE>Приключения Гекльбери Финна<TITLE> <AUTHOR Born=”1835”>Марк Твен</AUTHOR> <BINDING>Жёсткая обложка</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK>
после связывания данных элемент AUTHOR будет интерпретирован следующим образом:
<AUTHOR> <Born>1835</Born> Марк Твен </AUTHOR> В результате DSO будет хранить элемент как вложенную запись, а не как поле. (Напомним, что поля элементов могут содержать только символьные данные, но не дочерние элементы.) Следовательно, набор записей превратится в иерархический набор, а не в простой набор записей, и придется отображать вложенные записи с использованием вложенной таблицы, как описано в разделе “Использование вложенной таблицы для отображения иерархической структуры записей” ранее в этой главе. Чтобы иметь возможность отобразить как символьные данные (Марк Твен), так и атрибут как вложенную запись, следует иметь в виду то обстоятельство, что DSO использует специальное имя $ТЕХТ для обращения ко всем символьным данным элемента, не включая при этом значений атрибута. Так, элемент AUTHOR будет интерпретирован следующим образом:
<AUTHOR> <Born>1835</Born> <$TEXT>Марк Твен</$TEXT> </AUTHOR>
Можно использовать имя $ТЕХТ в качестве имени поля, чтобы связать ячейку таблицы с символьными данными, содержащимися в записи AUTHOR. В Листинге 1.24 представлена HTML-страница, демонстрирующая все рассмотренные в этом разделе приемы. Данная HTML-страница позволяет отобразить XML-документ, представленный в листинге 1.25.
<HTML> <HEAD> <TITLE>Описание книг</TITLE> </HEAD> <BODY> <XML ID="dsoInventory" SRC="Inventory05.xml"></XML> <H2>Описание книг</H2> <TABLE DATASRC="#dsoInventory" BORDER="1" CELLPADDING="5"> <THEAD> <ТН>Заголовок</TH> <ТН>Автор</TH> <ТН>Обложка</TН> <ТН>Страниц</TH> <TH>Цена</TH> <TH>Наличие</TH> </THEAD> <TR ALIGN="center"> <TD> <TABLE DATASRC="#dsoInventoiy DATAFLD="TITLE"> <TR> <ТD><SPAN DATASRC="$ТЕХT"></SРАN></TD> </TR> </TABLE> </TD> <TD> <TABLE DATASRC="#dsoInventory" DATAFLD="AUTHOR"> <TR> <TD><SPAN DATAFLD="$ТЕХT></SPAN></TD> <TD><SPAN DATAFLD="Country"></SPAN></TD> </TR> </TABLE> </TD> <TD><SPAN DATAFTD="BINDING"></SPAN></TD> <ТD><SPAN DАTAFLD="РАGЕS"></SPAN></TD> <ТD><SPAN DATAFLD="PRICE"></SPAN></TD> <TD><SPAN DATAFLD="Наличие"></SPAN></TD> </TR> </TABLE> </BODY> </HTML> Листинг 1.24
<?xml version=”1.0”?> <!-- Имя файла: Inventory05.xml --> <INVENTORY> <BOOK InStock=”да”> <TITLE>Война и мир</TITLE> <AUTHOR Country=”Россия”>Лев Толстой</AUTHOR> <BINDING>Жёсткая обложка</BINDING> <PAGES>510</PAGES> <PRICE>12 000 рублей</PRICE> </BOOK> <BOOK InStock=”да”> <TITLE>Преступление и наказание</TITLE> <AUTHOR Country=”Россия”>Фёдор Достоевский</AUTHOR> <BINDING>Мягкая обложка</BINDING> <PAGES>590</PAGES> <PRICE>14 000 рублей</PRICE> </BOOK> <BOOK InStock=”нет”> <TITLE>Королева Марго</TITLE> <AUTHOR Country=”Франция”>Александр Дюма</AUTHOR> <BINDING>Мягкая обложка</BINDING> <PAGES>410</PAGES> <PRICE>10 000 рублей</PRICE> </BOOK> <BOOK InStock=”нет”> <TITLE>Затерянный мир</TITLE> <AUTHOR Country=”Англия”>Артур Конан Дойль</AUTHOR> <BINDING>Жёсткая обложка</BINDING> <PAGES>350</PAGES> <PRICE>9 000 рублей</PRICE> </BOOK> </INVENTORY> Листинг 1.25
На следующем рисунке, показано как Internet Explorer при помощи HTML-документа из листига 1.24 отобразит XML-документ из листинга 1.25. На этой странице в последнем столбце внешней таблицы отображены значения атрибута InStock записи BOOK путем обычного сцепления его с элементом SPAN:
<TD><SPAN DATAFLD="InStock"></SPAN></TD>
Поскольку дочерний элемент AUTHOR элемента BOOK содержит атрибут (Country), он интерпретируется как вложенная запись, а не как поле, поэтому страница отображает его с помощью вложенной таблицы:
<TD> <TABUE DATASRC="#dsoInventory" DATAFLD="AUTHOR"> <TR> <TD><SPAN DATAFLD="$TEXT"></SPAN</TD> <TD><SPAN DATAFLD="Country"></SPAN></TD> <TR> </TABLE> </TD> Рисунок 44. Отображение атрибутов элементов XML-документа
Специальное имя $ТЕХТ ссылается на весь текст внутри элемента AUTHOR, не включая значения атрибута. Этот текст состоит из имени автора (например, Лев Толстой). Заметим, что поскольку элемент TITLE в BOOK может включать дочерний элемент (SUBTITLE), он также интерпретируется как вложенная запись, а не как поле, и должен также быть отображен с использованием вложенной таблицы: <TD> <TABLE DATASRC="#dsoInventory" DATAFLD="TITLE"> <TR> <TD><SPAN DATAFLD="$TEXT"></SPAN></TD> </TR> </TABLE> </TD> Здесь $ТЕХТ используется для отображения всех символьных данных записи. (Нельзя установить связь только с текстом заголовка, не включая подзаголовка.)
Лабораторная работа №10
1. Удалите связь с таблицей каскадных стилей из XML-документа, созданного в лабораторной работе №5. 2. Добавьте к элементу, содержащему данные о фамилии студента, атрибут, указывающий на пол. 3. Используя способ передачи HTML-разметки, отобразите на HTML-странице полужирным шрифтом содержимое элементов, в которые вложены данные о номерах групп, из XML-документа лабораторной работы №9. 4. Используя один из способов связывания с HTML-элементами, рядом с номером группы отобразите произвольный графический символ, имя файла которого вложено в элемент вышеуказанного XML-документа. 5. Используя способы связывания HTML-элементов с XML-атрибутами, отобразите полученный XML-документ на HTML-странице. 6. Оформите HTML-страницу по согласованию с преподавателем. 7. Сохраните XML-документ и HTML-страницу в папке под своей фамилией. 8. Откройте для просмотра созданную HTML-страницу в браузере Internet Explorer. 9. При появлении сообщений об ошибках, постарайтесь их найти и устранить. 10.Сдайте работу преподавателю.
![]() |