Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



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

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

Содержание файла Entity . xml:

 

<?xml version="1.0"?>

<!-- Имя файла: Entity.xml --><!DOCTYPE INVENTORY [ <!NOTATION TXT SYSTEM "plain text file"> <!ENTITY rev_huck SYSTEM "Review of Huckleberry Finn.txt"    NDATA TXT>  <!ENTITY rev_leaves SYSTEM "Review of Leaves of Grass.txt"    NDATA TXT> <!ENTITY rev_legend SYSTEM "Review of Sleepy Hollow.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="rev_huck"> <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 Review="rev_leaves"> <TITLE> Leaves of Grass </TITLE> <AUTHOR>  Walt Whitman </AUTHOR> <BINDING> hardcover</BINDING> <PAGES> 462 </PAGES> <PRICE> $7.75 </PRICE> </BOOK> <BOOK Review="rev_legend"> <TITLE> The Legend of Sleepy Hollow </TITLE> <AUTHOR> Washington Irving </AUTHOR> <BINDING> mass market paperback </BINDING> <PAGES> 98 </PAGES> <PRICE> $2.95 </PRICE> </BOOK></INVENTORY>

 

Содержание файла Entity.htm:

 

<!-- Имя файла: Entity.htm --><HTML><HEAD> <TITLE>Get Entity Information</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               + "' attribute has ENTITY type" + "\n"; DisplayText += "attribute value = "               + Attribute.nodeValue + "\n";  Entity = Document.doctype.entities.getNamedItem(Attribute.nodeValue); DisplayText += "entity file = "        + Entity.attributes.getNamedItem("SYSTEM").nodeValue        + "\n"; NotationName =   Entity.attributes.getNamedItem("NDATA").nodeValue; DisplayText += "entity notation = " + NotationName + "\n"; Notation =   Document.doctype.notations.getNamedItem(NotationName); DisplayText += "notation URI or description = "     + Notation.attributes.getNamedItem("SYSTEM").nodeValue     + "\n"; alert (DisplayText); location.href =   Entity.attributes.getNamedItem("SYSTEM").nodeValue; } </SCRIPT></HEAD><BODY> <XML ID="dsoInventory" SRC="Inventory Entity.xml"></XML></BODY></HTML>

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

 

 

Рис. 4.7 - Предупреждающее сообщение в Internet Explorer

 

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

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

 

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

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

 

if (Attribute.dataType == "entity") {   /* получить информацию из примитива */   }

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

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

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

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

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

 

DisplayText += "entity file = " + Entity.attributes.getNamedItem("SYSTEM").nodeValue + "\n";

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

 

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

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

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

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

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

DisplayText += "notation URI or description = " + Notation.attributes.getNamedItem("SYSTEM").nodeValue + "\n";

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

 

alert (DisplayText);

 

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

 

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

Свойство location.href   является частью объектной модели DHTML, о которой вы можете узнать по адресу http://msdn.microsoft.com/workshop/author/default.asp.

 


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 225; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.012 с.)
Главная | Случайная страница | Обратная связь