Правила для корректного задания значений атрибутов
Значение, которое вы присваиваете атрибуту, представляет собой группу символов, ограниченных кавычками, называемую также литералом. Вы можете присвоить атрибуту в качестве значения любой литерал, придерживаясь при этом следующих правил:
- строка может быть заключена как в одинарные ('), так и в двойные кавычки (");
- строка не может содержать внутри себя тот же символ кавычек, которыми она ограничена;
- строка может содержать ссылку на символ или ссылку на внутренние примитивы общего назначения; (Об этом будет рассказано в лекции 6.)
- строка не может содержать символ < (Синтаксический анализатор может воспринять этот символ как начало описания XML-разметки.)
- строка не может содержать символ &, если это не ссылка на символ или примитив.
Вы уже познакомились с правильными описаниями атрибутов. Ниже приведены неправильные описания:
<EMPLOYEE Status=""downsized""> <!-- Нельзя использовать символы-ограничители внутри строки. --> <ALBUM Type="<CD>"> <!-- Нельзя использовать символ < внутри строки --> <WEATHER Forecast="Cold & Windy"> <!-- Нельзя использовать символ &, если это не ссылка -->
Если вы хотите использовать двойные кавычки (") внутри значения атрибута, вам следует применить в качестве ограничителей одинарные кавычки ('), как показано в примере:
<EMPLOYEE Status='"downsized"'> <!-- Правильное значение атрибута. -->
Аналогично, чтобы включить одинарные кавычки в значение атрибута, следует использовать в качестве ограничителей двойные кавычки:
<CANDIDATE name="W.T. 'Bill' Bagley"> <!-- Правильное значение атрибута. -->
Совет. Вы можете избавиться от всех ограничений и вводить в имя атрибута любой символ, если воспользуетесь ссылкой на символ или – если это возможно – ранее определенной ссылкой на примитив общего назначения. О таких ссылках будет рассказано в лекции 6.
Если вы создаете корректно сформированный документ, не имеющий объявления типа документа (как вы делали в упражнениях данной лекции), вы можете присвоить атрибуту любое значение, соответствующее приведенным выше правилам. Однако, если вы создаете описание типа документа и определяете внутри него атрибуты, то можете ограничить типы значений, которые могут быть присвоены конкретному атрибуту. Например, вы можете определить атрибут, которому могут быть присвоены только значения "yes" или "no". Таким образом, одно из преимуществ задания определенного типа информации через атрибуты элементов в отличие от задания через содержимое элемента заключается в том, что при этом вы можете обеспечить контроль надо всеми типами данных, которые могут быть присвоены атрибуту, и указываете синтаксическому анализатору учитывать эти ограничения типов. (Как вы узнаете в лекции 5, в основной спецификации XML не указаны средства для ограничения типов символьных данных для элемента.)