Почему? Потому что в нем отсутствует атрибут category. Правильный тег должен содержать оба атрибута:
<recipe category="Italian" difficulty="hard">
Особые условия обработки атрибута описываются тремя флагами, перечисленными в табл. 14.2.
Таблица 14.2. Флаги атрибутов
Флаг
Описание #FIXED
Во всех экземплярах элемента в документе атрибуту может присваиваться только одно конкретное значение
#IMPLIED
Если атрибут не указан в элементе, используется значение по умолчанию
#REQUIRED
Атрибут является обязательным и должен присутствовать во всех экземплярах элемента в документе
Типы атрибутов
Атрибут элемента может объявляться с определенным типом. Типы атрибутов описаны далее.
Атрибуты CDATA
Очень часто атрибуты содержат общие символьные данные. Такие атрибуты называются атрибутами CDATA. Следующий пример уже встречался в начале этого раздела:
<!ATTLIST recipe category COATA #REQUIRED>
Атрибуты ID, IDREF и IDREFS
Идея однозначного представления данных (например, информации о пользователе или товаре, хранящейся в базе данных) посредством идентификаторов неоднократно встречалась в предыдущих главах книги. Идентификаторы также часто используются в XML, поскольку перекрестные ссылки между документами применяются не только в общих задачах обработки данных, но и в World Wide Web (гиперссылки).
Идентификаторы элементов присваиваются атрибуту ID. Допустим, вы хотите связать с каждым рецептом уникальный идентификатор. Соответствующий фрагмент DTD может выглядеть так:
<!ELEMENT recipe (title, description, ingredients, process)>
<!ATTLIST recipe recipe-id ID #REQUIRED>
<!ELEMENT recipe-ref EMPTY>