
- •Лекция 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.3. Атрибуты перечислимого типа
Атрибуты перечислимого типа представляются списком значений. Атрибуты могут принимать одно значение из списка значений, предоставляемых в объявлении. Тип перечисления может задаваться нотациями (notationtype) и собственно перечислениями (enumeration). Перечисление – это одно или несколько имен, которые разделены пробелами и символами "|". Перечисление задает несколько возможных вариантов значения атрибута, например("черный"|"белый"). Хотя в качестве значения можно использовать ключевые слова#IMPLIEDили#REQUIRED, обычно используется значение по умолчанию. Нотации будут рассмотрены далее.
Пример объявления атрибутов перечислимого типа:
<!ELEMENT font (#PCDATA)>
<!ATTLIST font
face (Arial|Times_New_Roman|Courier_New)"Arial"
size (10pt|12pt|14pt|18pt) "12pt"
style (normal|bold|italic) "normal"
>
4.1.7.4. Обработка пробелов и определение языка содержимого элемента
Специальный атрибут, называемый xml:space, может быть присоединён к элементу для того, чтобы уведомить процессор о намерении сохранить пробел в данном элементе для использования приложением. Если данный атрибут объявляется, он должен быть задан как перечислимый тип, значениями которого могут быть либо "default" или "preserve", либо одно из значений, например:
<!ATTLIST poem xml:space (default|preserve) 'preserve'>
или
<!ATTLIST pre xml:space (preserve) #FIXED 'preserve'>.
Значение "default" указывает, что для данного элемента принимаются режимы обработки по умолчанию пробелов в данном приложении, а значение "preserve" задает режим сохранения в приложении всех пробелов. Это определение действует для всех элементов внутри содержимого элемента, для которого оно задано, если только оно не переопределяется другим экземпляром атрибутаxml:space. Обычно атрибутxml:spaceуказывается, если необходимо сохранить исходное форматирование документа, например, при выводе программы или стихов.
При обработке документа также часто используется идентификация естественного или формального языка, на котором написано содержимое. Для определения языка содержимого элемента и языка значений атрибутов в элемент документа может быть вставлен специальный атрибут xml:lang. Значением атрибута являются коды языков, например,uk,ru,en,en-USилиen-GB.
В правильных документах этот атрибут, как и некоторые другие, обязан быть объявлен, если используется.
Пример использования атрибутов xml:space и xml:lang:
<?xml version="1.0" encoding="Windows-1251"?>
<!DOCTYPE program-book [
<!ELEMENT program-book
(name, language, description, program)+>
<!ATTLIST program-book
Xml:space (default|preserve) 'default'
>
<!ELEMENT name (#PCDATA)>
<!ATTLIST name
xml:lang (en|ru) 'en'
>
<!ELEMENT language (#PCDATA)>
<!ATTLIST language
xml:lang (en|ru) 'ru'
>
<!ELEMENT description (#PCDATA)>
<!ATTLIST description
xml:lang (en|ru) 'ru'
>
<!ELEMENT program (#PCDATA)>
<!ATTLIST program
xml:space (preserve) #FIXED 'preserve'
>
]>
<program-book>
<name>add2.c</name>
<language xml:lang="en">C</language>
<description>Сложение двух чисел</description>
<program>
int main(void)
{
int a1, a2, sum;
printf("Введите слагаемые:");
scanf("%d %d", &a1, &a2);
sum = a1 + a2;
printf("Сумма:", sum);
}
</program>
</program-book>
Если в процессоре XMLпроизводится нормализация текста (удаление лишних пробелов и форматирование по ширине страницы), то в выводимом документе будут удалены лишние пробелы в содержимом дескриптора<description>, а содержимое дескриптора<program>будет выведено без переформатирования. В дескрипторах<name>и<description> по умолчанию используется соответственно английский и русский язык, а для дескриптора<language>явно определен английский язык.