Почему при использовании скриптов, приведенных в курсе Основы XML лекция Лекция 8: Отображение XML-документов с использованием связывания данных не происходит связывания XLM документа с HTML? Отображаются пустые поля. Браузер IE11 |
Определение и использование примитивов
Определения и классификация примитивов
Механизм примитивов в XML является средством повышения производительности, а также способом встраивать различные типы данных в ваш XML-документ. В XML-документе вы можете определить часто используемый блок XML-текста как примитив, что позволяет вам быстро вставлять текст в нужное место. Вы можете также определить как примитив внешний файл, чтобы иметь возможность включать данные файла в вашем документе; эти данные могут содержать XML-текст, другой текст, либо не текстовые данные. Вы определяете примитив в описании типа документа (DTD) с использованием синтаксиса, аналогичного тому, который используется для объявления элемента или атрибута в валидном XML-документе. О DTD и объявлениях типа документа, содержащего их, говорилось в "Создание валидных XML-документов" .
В спецификации XML термин примитив (entity) в широком смысле относится к любому из следующих типов единиц хранения информации для XML-документов.
- Собственно XML-документ как целое.
- Внешнее подмножество DTD (см. раздел "Использование внешних подмножеств DTD" в "Создание валидных XML-документов" ).
- Внешний файл, определенный как внешний примитив в DTD и допускающий использование посредством ссылки.
- Строка в кавычках, определенная как внутренний примитив в DTD и допускающая использование посредством ссылки.
Заметим, что первые три типа единиц хранения информации являются файлами, а последний – строкой символов, заключенных в кавычки.
В этой лекции термин примитив используется в узком смысле, а именно, для обозначения внешнего файла или строки в кавычках, определенных как примитив в DTD документа и допускающих использование в документе посредством ссылок на примитивы. Например, следующее DTD определяет внешний файл Topics.xml (этот файл содержит список тем в статье, включенной в документ) как внешний примитив с именем topics, а также строку в кавычках ("A Short History of XML") как внутрений примитив с именем title:
<!DOCTYPE ARTICLE [ <!ELEMENT ARTICLE (TITLEPAGE, INTRODUCTION, SECTION*)> <!ELEMENT TITLEPAGE (#PCDATA)> <!ELEMENT INTRODUCTION (#PCDATA)> <!ELEMENT SECTION (#PCDATA)> <!ENTITY topics SYSTEM "Topics.xml"> <!ENTITY title "A short History of XML"> ] >
Впоследствии вы можете вставить полный список тем в любое нужное вам место статьи (например, в аннотацию, введение или заключение), просто включив ссылку на примитив &topics; – как для следующего элемента:
<INTRODUCTION> This article will cover the following topics: &topics; </INTRODUCTION>
Вы можете вставить название статьи в любое место, включив ссылку на примитив &title; – как для следующего элемента:
<TITLEPAGE> Title: &title; Author: Michael Young </TITLEPAGE>
Механизм примитивов наиболее полезен при наличии часто используемых фрагментов XML-текста. Например, если название статьи многократно фигурирует по ее тексту, использование примитива (как в предыдущем примере) позволит сократить время набора, добиться однородности и облегчить внесение изменений в название. Вы можете изменить текст названия, встречающегося в различных листах статьи, просто отредактировав объявление примитива в DTD. Например:
<!ENTITY title "A Long History of XML"> <! -- модифицированное объявление примитива -->
Если вы знакомы с программированием, то легко уловите сходство между механизмом использования примитивов XML и определением констант в языках программирования (например, объявления с помощью инструкции #define в C).
Механизм примитивов также необходим при включении не XML-данных в XML-документ (например, графические данные для изображения).
Типы примитивов
Существует множество разновидностей примитивов. Материал, излагаемый в этом разделе, может показаться довольно абстрактным (прежде, чем вы познакомитесь с деталями и рассмотрите примеры), возвращение к этой информации впоследствии позволит значительно облегчить восприятие примитивов.
Примитивы классифицируются по трем признакам:
- общие и параметрические. Общий примитив включает содержимое документа – т.е. XML-текст или другие текстовые или не текстовые данные, которые вы можете использовать внутри элемента Документ. Оба примера примитивов, рассмотренных в предыдущем разделе ( title и topics ) относятся к общим примитивам. Параметрический примитив содержит XML-текст, который может быть помещен в DTD. В спецификации XML термин примитив относится к общим примитивам;
- внутренние и внешние. Внутренний примитив содержится внутри строки в кавычках (примитив title в предыдущем разделе). Внешний примитив содержится в отдельном файле (примитив topics в предыдущем разделе);
- разбираемые или неразбираемые. Разбираемый примитив содержит XML-текст (символьные данные, разметка или то и другое). Когда вы вставляете ссылку на разбираемый примитив в документ, ссылка замещается содержимым примитива (замещающий текст), который становится составной частью документа. Синтаксический анализатор XML разбирает (сканирует) содержимое примитива точно так же, как он сканирует непосредственно введенный в документ текст. Оба примера примитивов, рассмотренных в предыдущем разделе ( title и topics ) являются разбираемыми примитивами.
Неразбираемый примитив может содержать любой тип данных: XML-данные или, что чаще, не XML-данные. Не XML-данные могут представлять собой либо текстовые данные (например, название) или не текстовые данные (например, графические данные для изображения). Поскольку неразбираемый примитив обычно не содержит XML, его содержимое нельзя непосредственно вставить в документ посредством ссылки на примитив. Тем не менее, вы можете связать с именем примитива атрибут типа ENTITY или ENTITIES, чтобы приложение получило доступ к имени примитива и его описанию, а также могло работать с его данными.
Поскольку примитивы классифицируются по этим трем признакам и в каждой классификации имеются две категории, теоретически существует восемь потенциальных типов примитивов, как показано на диаграмме (см. рис. 6.1).
Однако три типа примитивов из этих восьми в XML не поддерживаются (на диаграмме они зачеркнуты). Следовательно, реально в XML имеется только пять типов примитивов:
- общие внутренние разбираемые;
- общие внешние разбираемые;
- общие внешние неразбираемые;
- параметрические внутренние разбираемые;
- параметрические внешние разбираемые.
О том, как определять и использовать их, вы и узнаете в этой лекции.