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

3.9. Тип атрибута

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

Тип атрибута можно задать тремя различными способами.

  • Строковый тип. Строковый тип атрибута может быть назначен любой строке в кавычках (литералу), которая отвечает общим правилам, описанным выше. Строковый тип атрибута необходимо объявить с использованием ключевого слова CDATA, как это сделано для определения атрибута Class в следующем примере:

<!ATTLIST FILM Class CDATA "вымысел">

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

  • Нумерованный тип. Для нумерованного типа атрибута можно присваивать одно значение или список определенных значений. Об этом типе вы узнаете далее.

3.10. Задание атрибута маркерного типа

Как и любое значение атрибута, значение, которое присваивается маркерному типу атрибута, должно представлять собой строку в кавычках, отвечающую общим правилам, описанным в выше.

Кроме того, значение должно отвечать определенному ограничению, которое задаётся в описании атрибута с помощью соответствующего ключевого слова. Например, в приведенном ниже XML-документе для атрибута StockCode определен маркерный тип с использованием ключевого слова ID. (ID - это только одно из ключевых слов, которые можно использовать для объявления маркерного типа.) Это ключевое слово означает, что для каждого элемента атрибуту должно быть присвоено уникальное значение. (Например, присвоение товарного кода «S021» двум элементам ITEM не допускается.)

<?xml version="1.0"?>

<!DOCTYPE INVENTORY

[

<!ELEMENT INVENTORY (ITEM*)>

<!ELEMENT ITEM (#PCDATA)>

<!ATTLIST ITEM StockCode ID #REQUIRED>

]

>

<INVENTORY>

<!--Каждый элемент ITEM должен иметь свое значение кода StockCode-->

<ITEM StockCode="S021">Персиковый чай</ITEM>

<ITEM StockCode="S034">Электрокофемолка</ITEM>

<ITEM StockCode="S086">Термометр</ITEM>

</INVENTORY>

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

  • ID. Для каждого элемента атрибут должен иметь уникальное значение. Значение должно начинаться с буквы или символа подчеркивания (_), за которыми могут идти или не идти другие буквы, цифры, символы точки (.), тире (-) или символы подчеркивания. Данный тип элемента может иметь только один атрибут типа ID, а в объявлении значения атрибута по умолчанию должно фигурировать #REQUIRED или #IMPLIED. Пример этого типа атрибута содержится в приведенном выше документе INVENTORY.

  • IDREF. Значение атрибута должно совпадать со значением атрибута элемента типа ID внутри документа. Другими словами, этот тип атрибута является ссылкой на уникальный идентификатор другого атрибута. Например, можно добавить атрибут IDREF с именем GoesWith к элементу ITEM:

<!ELEMENT ITEM (#PCDATA)>

<!ATTLIST ITEM

StockCode ID #REQUIRED GoesWith IDREF #IMPLIED>

Далее можно использовать этот атрибут для ссылки на другой элемент ITEM:

<IТЕМ StockCode="S034">Электрофемолка</ITEM>

<ITEM StockCode="S047" GoesWith="S034">Щётка</ITEM>

  • ENTITY. Значение атрибута должно совпадать с именем примитива, объявленного в DTD. Этот примитив не обрабатывается синтаксическим анализатором и ссылается на внешний файл, обычно содержащий не XML-данные. О таких примитивах будет рассказано далее.

Например, в DTD вы объявляете элемент с именем IMAGE, представляющий графическое изображение, и атрибут типа ENTITY с именем Source, указывающий на источник графических данных:

<!ELEMENT IMAGE EMPTY>

<ATTLIST IMAGE Source ENTITY #REQUIRED>

При объявлении не анализируемого примитива с именем Logo (используя технику, с которой познакомитесь далее), который содержит графические данные для изображения, данный примитив можно присвоить атрибуту Source элемента IMAGE в документе следующим образом:

<IMAGE Source="Logo" />

  • ENTITIES. Этот тип атрибута похож на тип ENTITY, за исключением того, что значение может содержать имена нескольких не анализируемых примитивов - разделенных пробелами - внутри строки в кавычках. Например, при назначении атрибуту Source тип ENTITIES следующим образом:

<!ELEMENT IMAGE EMPTY>

<!ATTLIST IMAGE Source ENTITIES #REQUIRED>

его можно использовать для ссылки на несколько не анализируемых примитивов (допустим, примитивов, содержащих графические данные в альтернативных форматах), например, так:

<IMAGE Source-'LogoGif LogoBmp" />

(Здесь подразумевается, что LogoGif и LogoBmp - имена не анализируемых примитивов, которые были объявлены в DTD с помощью приемов, с которыми познакомитесь далее.)

  • NMTOKEN. Это значение есть элементарное имя (name token), представляющее собой имя, состоящее из одной или более букв, цифр, точек (.), тире (-) или символов подчеркивания (_). Элементарное имя может также содержать двоеточие (:), но не на первом месте. Например, при назначении атрибуту ISBN типа NMTOKEN следующим образом:

<!ELEMENT BOOK (#PCDATA)>

<!ATTLIST BOOK ISBN NMTOKEN #REQUIRED>

ему можно присвоить значение, начинающееся с цифры (цифры в качестве первых символов допустимы только для маркерных типов NMTOKEN и NMTOKENS):

<ВООК ISBN="9-99999-999-9">Рисунок человека</BOOK>

  • NMTOKENS. Этот тип атрибута похож на тип NMTOKEN, но значение может содержать несколько элементарных имен — разделенных пробелами - внутри строки в кавычках. Например, если назначить атрибуту Codes тип NMTOKENS следующим образом:

<!ELEMENT SHIRT (#PCDATA)>

<!ATTLIST SHIRT Codes NMTOKENS #REQUIRED>

То ему можно присвоить несколько значений в виде элементарных имен:

<SHIRTCodes="38 21 97'>long sleeve Henley</SHIRT>