Опубликован: 24.01.2007 | Уровень: для всех | Доступ: платный
Лекция 6:

Определение и использование примитивов

Аннотация: В этой лекции вы прежде всего познакомитесь с основной терминологией, используемой для примитивов, а также с различными способами классификации примитивов. Затем вы узнаете, как объявлять каждый из примитивов различных типов и как вставлять примитивы в ваш документ в необходимом месте. Далее вы узнаете, как использовать возможности XML, которые позволяют вам вставлять любые типы символов в любом контексте: как ссылки на символ и как ссылки на примитивы. В конце лекции имеется упражнение, которое позволит вам попрактиковаться в использовании примитивов в полном XML-документе.

Определения и классификация примитивов

Механизм примитивов в 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 имеется только пять типов примитивов:

  • общие внутренние разбираемые;
  • общие внешние разбираемые;
  • общие внешние неразбираемые;
  • параметрические внутренние разбираемые;
  • параметрические внешние разбираемые.

О том, как определять и использовать их, вы и узнаете в этой лекции.


Рис. 6.1.
Максим Попов
Максим Попов

Почему при использовании скриптов, приведенных в курсе Основы XML

лекция Лекция 8: 

Отображение XML-документов с использованием связывания данных

не происходит связывания XLM документа с HTML?

Отображаются пустые поля. Браузер IE11

Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Наталья Алмаева
Наталья Алмаева
Россия
Светлана Казьмина
Светлана Казьмина
Россия, Волгодонск