Основы XML

       

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


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

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

Листинг 9.7. Inventory Entity.xml (html, txt)

Листинг 9.8. Inventory Entity.htm (html, txt)

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


Рис. 9.7. 

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

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

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

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

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


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

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

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

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

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

    DisplayText += "entity file = " + 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 += "notation URI or description = " + Notation.attributes.getNamedItem("SYSTEM").nodeValue + "\n";





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

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

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

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



Содержание раздела