Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_XML.doc
Скачиваний:
16
Добавлен:
03.05.2019
Размер:
3.94 Mб
Скачать

4.2. Типы примитивов

Примитивы классифицируются по трем признакам:

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

  • внутренние и внешние. Внутренний примитив содержится внутри строки в кавычках (примитив title выше). Внешний примитив содержится в отдельном файле (примитив topics выше);

  • разбираемый или не разбираемый. Разбираемый примитив содержит XML-текст (символьные данные, разметка или то и другое). При вставке ссылки на разбираемый примитив в документ, ссылка замещается содержимым примитива (замещающий текст), который становится составной частью документа. Синтаксический анализатор XML разбирает (сканирует) содержимое примитива точно так же, как он сканирует непосредственно введенный в документ текст. Оба примера примитивов, рассмотренных выше (title и topics) являются разбираемыми примитивами.

Не разбираемый примитив может содержать как XML-данные, так и не XML-данные. Не XML-данные могут представлять собой либо текстовые данные (например, название) или не текстовые данные (например, графические данные для изображения). Поскольку не разбираемый примитив обычно не содержит XML, его содержимое нельзя непосредственно вставить в документ посредством ссылки на примитив. Тем не менее, можно связать с именем примитива атрибут типа ENTITY или ENTITIES, чтобы приложение получило доступ к имени примитива и его описанию, а также могло работать с его данными.

Поскольку примитивы классифицируются по этим трем признакам и в каждой классификации имеются две категории, теоретически существует восемь потенциальных типов примитивов, как показано на диаграмме ниже.

Однако три типа примитивов из этих восьми в XML не поддерживаются (на диаграмме они зачеркнуты). Следовательно, реально в XML имеется только пять типов примитивов:

  • общие внутренние разбираемые;

  • общие внешние разбираемые;

  • общие внешние не разбираемые;

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

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

4.3. Объявление общего внутреннего разбираемого примитива

Примитив создается путем объявления его в DTD документа с использованием разновидности объявления разметки, схожей с той, которая используется для объявления элементов и атрибутов.

Объявление общего внутреннего разбираемого примитива имеет следующую форму записи:

<! ENTITY ИмяПримитива ЗначениеПримитивa>

Здесь ИмяПримитива есть имя примитива. Можно выбрать любое имя, следуя следующим правилам:

  • имя должно начинаться с буквы или с символа подчеркивания (_), после чего может следовать ни одна или несколько букв, цифр, точек (.), тире (-) или символов подчеркивания;

  • примитив может иметь такое же имя, что и параметрический примитив в документе. (Общие примитивы и параметрические примитивы занимают различные пространства имен.) Примитив также может иметь такое же имя, как элемент или атрибут;

  • помните, что для всего текста внутри разметки имеет значение регистр, в котором набраны символы. Это относится и к именам примитивов. Так, примитив с именем Bowser и примитив с именем bowser будут считаться различными.

ЗначениеПримитива есть значение, которое присваивается общему примитиву. Он представляет собой группу символов, заключенных в кавычки, которая также носит название литерал. Можно присвоить любое значение типа литерал общему внутреннему примитиву, соблюдая при этом следующие правила:

  • строка должна быть заключена в одинарные (') или в двойные (") кавычки;

  • строка не может содержать тот же символ кавычек, который используется в качестве ограничителей;

  • строка не может содержать символ амперсанда (&), если только он не используется в качестве первого символа в указании ссылки на символ или на общий примитив. Строка также не должна содержать символ процентов (%);

  • содержимое строки должно быть корректным для места, в которое вы предполагаете вставить примитив. Например, если вы помещаете примитив внутрь элемента, он должен содержать один или несколько компонентов, которые могут быть корректно вставлены в другие элементы (вложенные элементы, символьные данные и т. д.). Если вы вставляете примитив внутрь значения атрибута, он должен содержать символы, которые являются допустимыми для значений атрибута.

Например, следующее DTD определяет общий внутренний разбираемый примитив с именем title:

<!DOCTYPE ARTICLE

[

<!ELEMENT ARTICLE (TITLEPAGE, INTRODUCTION, SECTION*)>

<!ELEMENT TITLEPAGE (#PCDATA | SUBTITLE)*>

<!ELEMENT SUBTITLE (#PCDATA)>

<!ELEMENT INTRODUCTION (# PCDATA)>

<!ELEMENT SECTION (#PCDATA)>

<!ENTITY title

"История XML

<SUBTITLE>Язык будущего для интернет</SUBTITLE>">

]

>

Примитив title содержит символьные данные плюс элемент (SUBTITLE). В соответствии с объявлением в DTD это содержимое может быть корректно вставлено только в элемент TITLEPAGE, как показано ниже:

<TITLEPAGE>

Заголовок: &title;

Автор: Иван Петров

</TTTLEPAGE>

XML-процессор заменит ссылку на примитив &title; содержимым примитива и обработает содержимое, как если бы вы непосредственно набрали его в документе в позиции ссылки, подобно следующему:

<TITLEPAGE>

Заголовок: История XML

<SUBTITLE>Язык будущего для интернет</SUBTITLE>

Автор: Иван Петров

<TITLEPAGE>