Почему это не допустимый XML DTD? (Параметр объекта и #PCDATA)
Используя здесь валидатор DTD, мне сообщили, что следующий DTD недействителен.
<!ENTITY % text "(#PCDATA|L)*">
<!ELEMENT H (%text;)+>
<!ELEMENT L (#PCDATA)>
Сообщение об ошибке: "A" ('символ или тип элемента требуется в объявлении типа элемента "H"."В строке 2, столбец 22.
Кто-нибудь может указать, почему это недействительно? И как я могу сделать это действительным? Сообщение об ошибке не совсем дружелюбно для меня. Благодарю.
1 ответ
Вы не можете принудительно установить, что элемент со смешанным содержимым должен иметь хотя бы один дочерний узел. Ваш DTD становится
<!ELEMENT H ((#PCDATA|L)*)+>
когда сущность расширяется. Единственная разрешенная форма для элементов со смешанным содержимым
(#PCDATA | A | B | C)*
где A, B и C являются возможными дочерними элементами. #PCDATA
должен быть первым выбором, и набор должен иметь возможность повторяться 0-бесконечность раз, т.е. требуется звездочка.