
Типы значений атрибутов
В XML используется три типа значений атрибутов: строковые, маркирующие (tokenized) и перечислимые (enumerated).
Способ, которым анализатор обрабатывает значения атрибутов, зависит от того, как они описаны. Рассмотрим каждый тип в отдельности.
1. Неанализируемые символьные данные CDATA
В качестве значения атрибута может использоваться любая символьная строка. Единственное ограничение — строка не должна содержать служебных символов разметки (в первую очередь, < и &).
2. ID, IDREF, IDREFS
В XML существует механизм для определения внутренних ссылок между элементами. Метками, на которые указывают ссылки, являются атрибуты ID элементов.
Каждый элемент может иметь только один атрибут типа ID, причем значение этого атрибута должно быть уникальным для документа. Ссылки позволяют не повторять в документе уже приведенную информацию, а просто отсылать к ней.
Для создания ссылок на фрагменты документа используются атрибуты типа IDREF. Значение атрибута IDREF (это id какого-то другого элемента) должно совпадать со значением ID некоторого элемента из данного документа.
Можно связать один элемент с несколькими другими (моделировать отношения "один-ко-многим"). Это делается с помощью атрибута IDREFS, значениями которого являются последовательности значений ID, разделенные пробельными символами.
3. ENTITY, ENTYTIES
Сущности используются в декларациях атрибутов с целью повышения эффективности и возможности повторного использования конструкций. Если какая-то конструкция повторяется несколько раз, можно объявить сущность, представляющую ее, а затем ссылаться на нее по мере необходимости.
Чтобы атрибут имел значение типа ENTITY, необходимо:
а) объявить сущность,
б) объявить для некоторого элемента атрибут с типом ENTITY,
в) создать экземпляр элемента в документе, используя имя сущности как значение этого атрибута.
Может потребоваться сделать значением атрибута несколько сущностей. Тогда соответствующий атрибут должен иметь тип ENTITIES, а сущности в списке должны разделяться пробельным символом.
4. NOTATION
В процессе создания документа бывают случаи, когда программисту необходимо, чтобы при определенных условиях имели бы место определенные последствия. Например, может понадобиться, чтобы при упоминании некоторых форматов файлов внутри конкретного документа обрабатывающее его приложение производило те или иные действия или вызывало для обработки файлов другое приложение.
Этого можно добиться, если использовать совместно декларацию NOTATION и атрибут NOTATION.
<!NOTATION jpg system "file://myfolder/graphViewer.exe">
<!NOTATION gif system "file://myfolder/graphViewer.exe">
Здесь декларация NOTATION была применена для определения типов данных.
Затем можно использовать это объявление при описании атрибутов
<!ATTLIST pic file.format NOTATION (jpg|gif)>
5. Атрибуты с перечислимыми значениями
Если описание атрибута включает в себя предопределенный список его значений, то атрибут называется перечислимым (enumerated)
<!ATTLIST printable (yes|no)>
Для того чтобы документ считался допустимым, атрибут его должен принимать значения из заданного списка.
Замечание
В в XML также имеются типы атрибутов NMTOKEN и NMTOKENS. Значением атрибутов типа NMTOKEN могут быть только те строки, которые отвечают требованиям к именам элементов в XML (NMTOKEN — сокращение от name token, т.е. лексема-имя). Например, значения атрибутов этого типа не могут содержать пробелы.
Тип NMTOKENS означает, что значением атрибута может быть список значений типа NMTOKEN.