- •Содержание
- •Глава 1. Хранение в данных в формате xml
- •§ 1.1. Назначение xml
- •§ 1.2. Достоинства xml
- •§ 1.3. Заменит ли xml html?
- •§ 1.4. Структура xml
- •1.4.1. Объявление xml
- •1.4.2. Корневой элемент
- •1.4.3. Комментарий
- •Глава 2. Отображение и хранение экономических xml-документов с использованием связывания данных
- •Основные шаги
- •§ 2.1. Использование связывания данных по одной записи
- •Перемещение между записями
- •§ 2.2. Отображение и хранение экономического xml документа по отдельным записям
- •Как хранятся данные xml
- •Проверка на наличие ошибок xml
- •Cцепление html-элементов с xml-элементами
- •§ 2.3. Использование табличного сцепления данных
- •Использование одной html-таблицы для отображения простого набора записей
- •§ 2.4. Использование постраничного отображения экономического xml документа
- •Другие способы связывания данных
- •§ 2.5. Связывание с другими html-элементами
- •§ 2.6. Использование сценариев dso для отображения экономического xml документа
- •Заключение
- •Список использованной литературы
- •Приложения
Проверка на наличие ошибок xml
Когда открывается XML-документ (автономный или с таблицей стилей) непосредственно в Internet Explorer, браузер проверяет, является ли документ корректно сформированным. Если он обнаруживает ошибки, то приостанавливает отображение документа и выводит сообщение о фатальной ошибке, которое помогает выявить ошибку и устранить ее.
Если XML-документ открывается через фрагмент данных на HTML-странице, Internet Explorer проверяет, является ли документ корректно сформированным, а также – если документ включает объявление типа документа – является ли он валидным. Однако в том случае, если документ содержит ошибку, Internet Explorer просто не будет отображать данные XML, не выводя сообщение об ошибке.
Cцепление html-элементов с xml-элементами
Можно осуществлять сцепление HTML-элементов с XML-элементами двумя основными способами.
Табличное сцепление, что означает сцепление HTML-элемента TABLE с данными XML, так что в таблице автоматически отображается весь набор записей, принадлежащих XML-документу.
Сцепление по отдельным записям, что означает сцепление не табличных элементов HTML (например, элементов SPAN) с XML-элементами таким образом, что за один раз отображается только одна запись.
§ 2.3. Использование табличного сцепления данных
Самый простой способ отобразить XML-документ, который состоит из группы записей, – это сцепить HTML-элемент TABLE с данными XML таким образом, чтобы в таблице автоматически отображались сразу все записи (или одна страница записей за раз, если установлен режим постраничного отображения). При таком подходе Internet Explorer берет на себя большую часть работы; не нужно писать сценарии или вызывать методы (функции). (Одно исключение состоит в том, что если выбран режим пролистывания, потребуется включить несколько вызовов простых функций, о чем пойдет речь далее в этой работе.)
Можно использовать одну таблицу HTML для отображения XML-документа, структурированного как набор записей, либо можно использовать вложенные HTML-таблицы для отображения XML-документа, содержащего иерархический набор записей (более сложную структуру записей).
Использование одной html-таблицы для отображения простого набора записей
Можно использовать один HTML-элемент TABLE для отображения XML-документа, в котором данные организованы в виде простого набора записей – т.е. XML-документа, составленного следующим образом:
корневой элемент содержит множество элементов типа запись (record);
каждый элемент типа запись содержит одинаковый набор элементов типа поле (field);
каждый элемент типа поле содержит только символьные данные. (Если дочерний элемент элемента запись содержит один или несколько своих собственных дочерних элементов, DSO интерпретирует его как вложенную запись, а не как поле.
Примером такого типа XML-документов является документ game.xml, который использовался в предыдущих главах. В этом документе корневой элемент (GAMES) содержит набор из восьми элементов-записей (элементы GAME), и каждый из элементов-записей имеет одинаковый набор элементов-полей, которые содержат только символьные данные (NAME, AUTHOR, GENRE, YEAR, PLATFORM).
<?xml version="1.0"?>
<GAMES>
<GAME>
<NAME>Max Payne</NAME>
<AUTHOR>Remedy</AUTHOR>
<GENRE>TPS</GENRE>
<YEAR>2001</YEAR>
<PLATFORM>PC, PS2, XBox</PLATFORM>
</GAME>
<GAME>
<NAME>GTA Vice City</NAME>
<AUTHOR>Rockstar</AUTHOR>
<GENRE>TPS</GENRE>
<YEAR>2003</YEAR>
<PLATFORM>PC, PS2</PLATFORM>
</GAME>
<GAME>
<NAME>Splinter Cell</NAME>
<AUTHOR>Ubisoft</AUTHOR>
<GENRE>Stealth</GENRE>
<YEAR>2003</YEAR>
<PLATFORM>PC, XBox</PLATFORM>
</GAME>
<GAME>
<NAME>Far Cry</NAME>
<AUTHOR>Crytek</AUTHOR>
<GENRE>FPS</GENRE>
<YEAR>2004</YEAR>
<PLATFORM>PC</PLATFORM>
</GAME>
<GAME>
<NAME>Half-Life 2</NAME>
<AUTHOR>Valve</AUTHOR>
<GENRE>FPS</GENRE>
<YEAR>2004</YEAR>
<PLATFORM>PC</PLATFORM>
</GAME>
<GAME>
<NAME>World of Warcraft</NAME>
<AUTHOR>Blizzard</AUTHOR>
<GENRE>MMORPG</GENRE>
<YEAR>2004</YEAR>
<PLATFORM>PC</PLATFORM>
</GAME>
<GAME>
<NAME>Gears of War</NAME>
<AUTHOR>Epic Games</AUTHOR>
<GENRE>TPS</GENRE>
<YEAR>2007</YEAR>
<PLATFORM>PC, XBox 360</PLATFORM>
</GAME>
<GAME>
<NAME>Assassin's creed</NAME>
<AUTHOR>Ubisoft</AUTHOR>
<GENRE>Action</GENRE>
<YEAR>2008</YEAR>
<PLATFORM>PC, XBox 360, PS3</PLATFORM>
</GAME>
</GAMES>
XML 3. games table.xml
Когда таблица связывается с XML-документом, данные, принадлежащие каждому из элементов записей, отображаются в отдельной строке таблицы, а каждый из дочерних элементов полей – в отдельном столбце.
<HTML>
<HEAD>
<TITLE>Сортировка игр</TITLE>
</HEAD>
<BODY>
<XML ID="dsogames" SRC="games table.xml"></XML>
<H2>Игры</H2>
<TABLE ID="gamestable" DATASRC="#dsogames" BORDER="1" CELLPADDING="5">
<THEAD>
<TH>Игра</TH>
<TH>Разработчик</TH>
<TH>Жанр</TH>
<TH>Год</TH>
<TH>Платформа</TH>
</THEAD>
<TR ALIGN="center">
<TD><SPAN DATAFLD="NAME"
STYLE="font-style:italic"></SPAN></TD>
<TD><SPAN DATAFLD="AUTHOR"></SPAN></TD>
<TD><SPAN DATAFLD="GENRE"></SPAN></TD>
<TD><SPAN DATAFLD="YEAR"></SPAN></TD>
<TD><SPAN DATAFLD="PLATFORM"></SPAN></TD>
</TR>
</TABLE>
</BODY>
</HTML>
HTML 3. games table.html
XML-документ из XML 1 связан с HTML-страницей из документа HTML 2 посредством фрагмента данных на этой странице, имеющего ID dsogames:
<XML ID="dsogames" SRC="games table.xml"></XML>
Элемент TABLE страницы сцеплен со всем XML-документом путем присвоения атрибуту DATASRC элемента идентификатора (ID) фрагмента данных, предваренного символом #:
<TABLE DATASRC="#dsogames" BORDER="1" CELLPADDING="5">
Таблица определена со стандартным заголовком (элемент THEAD) и с одной строкой (элемент TR). Каждая ячейка в этой строке (т.е., каждый элемент TD) состоит из элемента SPAN, который сцеплен с одним из полей XML-документа таким образом, что этот элемент отображает содержимое поля. Например, первая ячейка содержит элемент SPAN, сцепленный с полем NAME:
<TD><SPAN DATAFLD="NAME"
STYLE="font-style:italic"></SPAN></TD>
Элемент SPAN связывается с полем XML путем присвоения имени поля (в данном примере NAME) атрибуту DATAFLD элемента.
Вот как работает связывание данных: даже если в элементе TABLE определена только одна строка, когда браузер отображает таблицу, он повторяет строковый элемент для каждой записи в XML-документе. Т.е., в первой строке, следующей за заголовком, отображены поля (NAME, AUTHOR и т.д.), принадлежащие первой записи (элемент GAME для игры Max Payne). В следующей строке отображены поля для второй записи (элемент GAME для игры GTA Vice City) и т.д. На рисунке 3 показано как выглядит документ в Internet Explorer.
Рис. 3
Может возникнуть вопрос, почему ячейки (элементы TD) не сцеплены непосредственно с полями XML. Ответ заключается в том, что элемент TD не является связываемым HTML-элементом. (Связываемые элементы перечислены в таблице 2 в параграфе "Другие способы связывания данных".) Следовательно, должен включаться внутрь каждого элемента TD связываемый элемент (обычно SPAN).