Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)


 

 

 

 



Доступ к примитивам и нотациям XML



 

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

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

 

<?xml version="1.0"?>

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

<!DOCTYPE INVENTORY

[

<!NOTATION TXT SYSTEM "Обычный текстовый файл">

<!ENTITY First SYSTEM "Обзор_Войны_и_мира.txt" NDATA TXT>

<!ENTITY Second SYSTEM "Обзор_Преступления_и_наказания.txt"

NDATA TXT>

<!ENTITY Third SYSTEM "Обзор_Королевы_Марго.txt" NDATA TXT>

<!ELEMENT INVENTORY (BOOK)*>

<!ELEMENT BOOK (TITLE, AUTHOR, BINDING, PAGES, PRICE)>

<!ATTLIST BOOK Review ENTITY #IMPLIED>

<!ELEMENT TITLE (#PCDATA)>

<!ELEMENT AUTHOR (#PCDATA)>

<!ELEMENT BINDING (#PCDATA)>

<!ELEMENT PAGES (#PCDATA)>

<!ELEMENT PRICE (#PCDATA)>

]

>

<INVENTORY>

<BOOK Review="First">

<TITLE>Война и мир</TITLE>

<AUTHOR>Лев Толстой</AUTHOR>

<BINDING>Жёсткая обложка</BINDING>

<PAGES>510</PAGES>

<PRICE>12 000 рублей</PRICE>

</BOOK>

<BOOK Review="Second">

<TITLE>Преступление и наказание</TITLE>

<AUTHOR>Фёдор Достоевский</AUTHOR>

<BINDING>Жёсткая обложка</BINDING>

<PAGES>590</PAGES>

<PRICE>14 000 рублей</PRICE>

</BOOK>

<BOOK Review="Third">

<TITLE>Королева Марго</TITLE>

<AUTHOR>Александр Дюма</AUTHOR>

<BINDING>Мягкая обложка</BINDING>

<PAGES>410</PAGES>

<PRICE>10 000 рублей</PRICE>

</BOOK>

</INVENTORY>

Листинг 1.31

 

 

<HTML>

<HEAD>

<TTTLE>Получение информации о первом примитиве</TITLE>

<SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="ONLOAD">

Document = dsoInventory.XMLDocument;

Attribute = Document.documentElement.childNodes(0).attributes(0);

if (Attribute.dataType == "entity")

{

DisplayText ="Атрибут '" + Attribute.nodeName + "' имеет тип ENTITY" + "\n";

DisplayText += "Значение атрибута =" + Attribute.nodeValue + "\n";

Entity =Document.doctype.entities.getNamedItem(Attribute.nodeValue);

DisplayText += "Файл примитива ="

+ Entity.attributes.getNamedItem("SYSTEM").nodeValue + "\n";

NotationName = Entity.attributes.getNamedItem("NDATA").nodeValue;

DisplayText += "Нотация примитива =" + NotationName + "\n";

Notation = Document.doctype.notations.getNamedItem(NotationName);

DisplayText += "URI или описание нотации ="

+ Notation.attributes.getNamedItem("SYSTEM").nodeValue + "\n";

alert (DisplayText);

location.href = Entity.attributes.getNamedItem("SYSTEM").nodeValue;

}

</SCRIPT>

</HEAD>

<BODY>

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

</BODY>

</HTML>

Листинг 1.32

 

Каждый элемент BOOK в рассматриваемом примере XML-документа содержит атрибут типа ENTITY с именем Review, которому присваивается имя не разбираемого примитива, содержащего обзор для данной книги. Пример HTML-страницы включает сценарий, который демонстрирует основные действия, которые сценарий DOM должен выполнить, чтобы извлечь всю информацию о примитиве при обнаружении атрибута с типом ENTITY или ENTITIES. В частности, сценарий извлекает информацию о не разбираемом примитиве, назначенном атрибуту Review для первого элемента BOOK. Он отображает эту информацию в окне предупреждающего сообщения, как показано на следующем рисунке.

Рисунок 52. Отображение информации о первом примитиве

 

Вот краткое пояснение основных действий, выполняемых сценарием:

1. Сценарий получает узел Attribute для атрибута Review первого элемента BOOK:

 

Attribute = Document.documentElement.childNodes(0).attributes(0);

 

2. Сценарий использует свойство dataType узла (см. таблицу 5.21), чтобы определить, имеет ли атрибут тип ENTITY:

 

if (Attribute.dataType == "entity")

{

/* получить информацию из примитива */

}

 

Сценарий выполняет остальные действия только в том случае, если атрибут имеет тип ENTITY. Т.е. эти действия, входящие в состав оператора if, выполняют только тогда, когда условие if истинно.

3. Сценарий получает узел ENTITY для DTD-объявления примитива, присвоенного атрибуту:

 

Entity = Document.doctype.entities.getNamedItem(Attribute.nodeValue);

 

Свойство doctype объекта Document (см. таблицу 5.22) предоставляет узел DocumentType, представляющий объявление типа документа. Свойство entities узла DocumentType предоставляет набор NamedNodeMap узлов Entity для всех объявлений примитивов в DTD. Узел Entity для конкретного примитива, присваиваемого атрибуту, получают заданием имени примитива (Attribute.nodeValue) в качестве параметра метода getNamedItem объекта NamedNodeMap (см. таблицу 5/26).

4. Сценарий получает системный литерал примитива, который задает URI файла, содержащего данные примитива. Системный литерал хранится как значение узла Attribute с именем SYSTEM:

 

DisplayText += "Файл примитива ="

+ Entity.attributes.getNamedItem("SYSTEM").nodeValue + "\n";

 

5. Сценарий получает имя нотации примитива, которое хранится как значение узла Attribute с именем NDATA:

 

NotationName =

Entity.attributes.getNamedItem("NDATA").nodeValue;

 

6. Сценарий получает узел Notation для объявления нотации примитива:

 

Notation = Document.doctype.notations.getNamedItem(NotationName);

 

Свойство notations узла DocumentType предоставляет набор NamedNodeMap узлов Notation для всех объявлений нотаций в DTD. Узел Notation для нотации примитива получают путем задания имени нотации (NotationName) в качестве параметра метода getNamedItem объекта NamedNodeMap.

7. Сценарий получает системный литерал нотации, который содержит URI нотации или — в данном примере — ее описание. Системный литерал хранится как значение узла Attribute с именем SYSTEM:

 

DisplayText += "URI или описание нотации ="

+ Notation.attributes.getNamedltem("SYSTEM").nodeValue + "\n";

 

8. Сценарий отображает все хранимые результаты в окне предупреждающего сообщения:

 

alert(DisplayText);

 

9. Сценарий завершается предоставлением Internet Explorer возможности открыть и отобразить файл примитива, содержащего обзор. Он делает это путем присвоения URI файла (полученного на шаге 4) свойству location.href HTML-страницы, которое задает URL файла, отображаемого в данный момент браузером:

 

location. href = Entity.attributes.getNamedltem("SYSTEM").nodeValue;

 

Лабораторная работа №12

 

1. Используя структуру DOM, создайте на HTML-странице сценарий для извлечения и отображения значений атрибутов в браузере XML-документа из лабораторной работы №5.

2. Добавьте к данному сценарию возможность поиска элементов с атрибутами.

3. Оформите HTML-страницу по согласованию с преподавателем.

4. Сохраните XML-документ и HTML-страницу в папке под своей фамилией.

5. Откройте для просмотра созданную HTML-страницу в браузере Internet Explorer.

6. При появлении сообщений об ошибках, постарайтесь их найти и устранить.

7. Сдайте работу преподавателю.

 

 



Просмотров 797

Эта страница нарушает авторские права




allrefrs.su - 2025 год. Все права принадлежат их авторам!