
- •Лекция 4-02
- •4.1.5. Объявление типа документа
- •4.1.6. Определение элемента
- •4.1.7. Определение атрибутов элемента
- •4.1.7.1. Строковые атрибуты
- •4.1.7.2. Маркированные атрибуты
- •4.1.7.3. Атрибуты перечислимого типа
- •4.1.7.4. Обработка пробелов и определение языка содержимого элемента
- •Xml:space (default|preserve) 'default'
- •4.1.8. Определение сущности
- •4.1.8.1. Анализируемые сущности
- •30 Тыс. Студентов.
- •4.1.8.2. Неанализируемые сущности
- •4.1.8.3. Параметрические сущности
- •4.1.9. Определение нотации
- •Image entity #required
- •4.1.10. Условные разделы
4.1.7. Определение атрибутов элемента
Список атрибутов некоторого элемента задается следующим образом:
<!ATTLISTэлемент
атрибут-1 тип-1 значение-1
атрибут-2 тип-2 значение-2...
>
В этом определении параметр элементзадает имя элемента, для которого определяется данный список атрибутов,атрибут-i–имяi-го атрибута,тип-i– типi-го атрибута изначение-i–значениеi-го атрибута.
Параметр значение-iопределяет, как и какие значения должны быть присвоены атрибуту.Параметр может принимать одно из следующих значений:
ключевое слово #REQUIRED, которое показывает, что этот атрибут должен всегда присутствовать в элементе и иметь некоторое значение;
ключевое слово #IMPLIED, которое показывает, что атрибут является необязательным и может отсутствовать в элементе;
ключевое слово #FIXED, за которым следует значение, заключенное в кавычки (задает атрибут, который всегда должен иметь одно и то же фиксированное значение);
значение, заключенное в кавычки, которое определяет значение атрибута по умолчанию.
Параметр тип-iопределяет тип атрибута. ВXMLсуществуют три различных типа атрибутов:
строковые атрибуты (StringType);
маркированные атрибуты (TokenizedType);
перечислимые атрибуты (EnumeratedType).
4.1.7.1. Строковые атрибуты
Строковые атрибуты (тип CDATA) могут принимать в качестве значения любые символьные строки, например,атрибутhrefэлементаaвHTMLимеет типCDATA:
<a href="http://www.microsoft.com">…</a>
Описание атрибута hrefдля элементаaбудет выглядеть следующим образом:
<!ATTLIST a
href CDATA #REQUIRED
…
>
4.1.7.2. Маркированные атрибуты
Маркированные атрибуты имеют один из следующих фиксированных значений типов:
ID–уникальный идентификатор для элемента в документе. ЗначениеIDдолжно состоять из имени – буквы или символа подчеркивания, за которыми могут следовать другие символы;
IDREF–указывает на элемент с заданным значениемID;
IDREFS– указывает на два и более элемента в документе при помощи списка ID, в котором элементы списка отделены друг от друга пробелами;
ENTITY–указывает на внешнюю сущность (значение должно состоять из имени, а также должно соответствовать имени внешней сущности);
ENTITIES–указывает на две и более внешних сущностей при помощи списка сущностей, в котором элементы списка отделены друг от друга пробелами;
NMTOKEN–принимает значение имени (в отличие от значений типа CDATA, которые могут содержать любые символы, значенияNMTOKENмогут содержать только буквы, цифры, а также ".", "-", "_" и ":");
NMTOKENS–принимает значение двух или более имен, разделенных пробелами.
Пример задания атрибутов ID, IDREF и IDREFS:
<?xml version="1.0" encoding="Windows-1251"?>
<!DOCTYPE e-mail [
<!ELEMENT e-mail (address+, letter*, proposal*)>
<!ELEMENT address (#PCDATA)>
<!ATTLIST address name ID #REQUIRED>
<!ELEMENT letter (#PCDATA)>
<!ATTLIST letter
from IDREF #REQUIRED
to IDREF #REQUIRED
subject CDATA #IMPLIED
>
<!ELEMENT proposal (#PCDATA)>
<!ATTLIST proposal
from IDREFS #REQUIRED
to IDREF #REQUIRED
subject CDATA #IMPLIED
>
]>
<e-mail>
<address name="Ivanov">ivanov@post.com</address>
<address name="Petrov">petrov@post.com</address>
<address name="Sidorov">sidorov@post.com</address>
<letter from="Ivanov" to="Petrov"
subject="Поздравление">
Поздравляю с днем рождения!
</letter>
<proposal from="Petrov Sidorov" to="Ivanov">
Предложение Иванову от Петрова и Сидорова
</proposal>
</e-mail>
Пример задания атрибутов NMTOKEN и NMTOKENS:
<?xml version="1.0" encoding="Windows-1251"?>
<!DOCTYPE user-list [
<!ELEMENT user-list user+>
<!ELEMENT user EMPTY>
<!ATTLIST user
name NMTOKENS #REQUIRED
birth_date NMTOKEN #REQUIRED
address NMTOKENS #REQUIRED
>
]>
<user-list>
<user name="Иванов Иван Иванович"
birth_date="01:12:1979"
address="Country:Украина City:Киев
Street:Полевая Building:56 Flat:12"/>
<user name="John Smith" birth_date="24:08:1979"
address="Country:USA City:New-York
Street:1-th Avenue Building:125 Flat:84"/>
</user-list>
Если дату рождения первого пользователя представить в виде 01/12/1979, то при анализе документа будет зафиксирована ошибка, поскольку символ "/" является недопустимым в значениях атрибутов типаNMTOKEN.