Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пономарев В. А..docx
Скачиваний:
18
Добавлен:
01.04.2015
Размер:
561.06 Кб
Скачать

§ 2.1. Использование связывания данных по одной записи

Связывание данных по одной записи используется для HTML-элементов, которые не являются таблицами и не включены в связанную таблицу. HTML-элемент – например, SPAN, BUTTON или LABEL – связывается с отдельным полем XML. После этого HTML-элемент автоматически отображает содержимое поля XML, с которым он связан (сцеплен). Например, следующий HTML-элемент SPAN сцеплен с полем TITLE XML-документа, доступ к которому осуществляется через фрагмент данных dsogame:

<SPAN DATASRC="#dsogame" DATAFLD="NAME"></SPAN>

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

Наипростейшим случаем связывания данных по одной записи является случай, когда XML-документ состоит только из одной записи, подобно документу из XML 1.

<?xml version="1.0"?>

<GAME>

<NAME>Assanin's Creed</NAME>

<AUTHOR>Ubisoft</AUTHOR>

<GENRE>Action</GENRE>

<YEAR>2008</YEAR>

<PLATFORM>PC, Xbox 360, PS3</PLATFORM>

</GAME>

XML 1. game.xml

В HTML 1 представлена HTML-страница, которая связывает отдельный элемент SPAN с каждым из полей рассматриваемого документа (NAME, AUTHOR, GENRE, YEAR, PLATFORM).

<HTML>

<HEAD>

<TITLE>Игры</TITLE>

</HEAD>

<BODY>

<XML ID="dsogame" SRC="game.xml"></XML>

<H2>Игры</H2>

<SPAN STYLE="font-style:italic">Игра: </SPAN>

<SPAN STYLE="font-weight:bold" DATASRC="#dsogame"

DATAFLD="NAME"></SPAN>

<BR>

<SPAN STYLE="font-style:italic">Разработчик: </SPAN>

<SPAN DATASRC="#dsogame" DATAFLD="AUTHOR"></SPAN>

<BR>

<SPAN STYLE="font-style:italic">Жанр: </SPAN>

<SPAN DATASRC="#dsogame" DATAFLD="GENRE"></SPAN>

<BR>

<SPAN STYLE="font-style:italic">Год: </SPAN>

<SPAN DATASRC="#dsogame" DATAFLD="YEAR"></SPAN>

<BR>

<SPAN STYLE="font-style:italic">Платформа: </SPAN>

<SPAN DATASRC="#dsogame" DATAFLD="Platform"></SPAN>

</BODY>

</HTML>

HTML 1. game.html

На рисунке 1 показано как Internet Explorer отобразит эту страницу.

Рис. 1

Перемещение между записями

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

DSO (объект исходных данных), ассоциированный с XML-документом, предоставляет ряд методов (функций), которыми можно воспользоваться при перемещении между записями. Эти методы принадлежат объекту recordset DSO и приведены в таблице 1. Заметим, что примеры вызовов, приведенные в последнем столбце, предполагают, что HTML-страница содержит фрагмент данных XML с идентификатором (ID) dsogame.

Таблица 1.

Метод объекта recordset DSO

Переход от текущей записи к

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

moveFirst

первой записи в документе

dsogame.recordset.moveFirst()

movePrevious

предыдущей записи

dsogame.recordset.movePrevious()

moveNext

следующей записи

dsogame.recordset.moveNext()

moveLast

последней записи в документе

dsogame.recordset.moveLast()

move

записи с указанным номером

dsogame.recordset.move(5) (Переход к пятой записи. Записи нумеруются, начиная с нуля)

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

<BUTTON ONCLICK="dsogame.recordset.moveFirst()">

First Record

</BUTTON>

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

Если текущей является первая запись, вызов метода movePrevious приводит к перемещению в зону начала файла (BOF), где нет записей, поэтому сцепленный элемент будет пуст. Аналогично, вызов метода moveNext, если текущей является последняя запись, приводит к перемещению в зону конца файла (EOF), поэтому сцепленный элемент также будет пуст.

Объект recordset поддерживает свойство BOF, которое принимает значение true (истина), если достигнуто начало файла, а также свойство EOF, которое принимает значение true (истина), если достигнут конец файла. Можно использовать эти свойства для определения этих состояний и внесения необходимых корректировок. Приведенный ниже код предписывает при щелчке на кнопке в случае, если достигнуто начало файла, быстро отобразить первую запись:

<BUTTON ONCLICK="dsogame.recordset.movePrevious();

if (dsogame.recordset.BOF)

dsogame.recordset.moveNext()">

Back

</BUTTON>

Следующий код проверяет достижение конца файла:

<BUTTON ONCLICK="dsogame.recordset.moveNext();

if (dsogame.recordset.EOF)

dsogame.recordset.movePrevious()">

Forward

</BUTTON>

Можно присвоить атрибуту ONCLICK (либо другим атрибутам, относящимся к событиям, например, ONMOUSEOVER) целый блок кода сценария. В этих этапах код написан на языке Microsoft JScript.