После объявления ATTLIST в браузере DTD отображается пользовательский символ
Я объявил rel="value"
атрибут для <li>
элемент в DTD, как это:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" [<!ATTLIST li rel CDATA #IMPLIED>]>
После этого мой код с <li rel="value"></li>
был действителен, но я получил другого эмитента: браузер рендерит "]>"
символ в документе.
Как это исправить?
3 ответа
Вы не должны использовать внутреннее подмножество в объявлении типа документа, потому что браузеры не понимают его или DTD вообще.
Если по какой-то причине вы используете простой добавленный атрибут, часто лучше просто быть достаточно осторожным с ним или "проверить его вручную". Но для выполнения проверки на основе DTD вам необходимо создать внешнее DTD на основе DTD, который вы хотите использовать в качестве основы, и с добавленной в него дополнительной разметкой. В этом случае вы должны скопировать HTML 4.01 Transitional DTD и заменить
<!ATTLIST LI
%attrs;>
от
<!ATTLIST LI
rel CDATA #IMPLIED
%attrs;>
(То есть вам нужно предоставить полный список разрешенных атрибутов с добавленным вашим пользовательским атрибутом вместо того, чтобы объявлять список атрибутов, который разрешает только ваш атрибут [если это не то, что вы действительно хотите].)
Затем вы должны использовать объявление doctype, которое ссылается на вашу измененную копию по ее URL, с
<!DOCTYPE HTML SYSTEM "dtdurl">
где dtdurl - абсолютный URL для DTD. Дополнительная информация: Создание собственного DTD для проверки HTML.
Как правило, нежелательно добавлять собственные атрибуты, так как они могут конфликтовать с атрибутами, которые могут быть добавлены в HTML в некоторых будущих версиях. Согласно чертежам HTML5, атрибуты с именами начинаются с data-
предназначены для конкретного сайта и никогда не будут иметь публично определенного значения, поэтому data-rel
будет безопаснее, чем rel
,
Браузеры не понимают встроенный SGML. Они просто перестают читать Doctype с первого раза >
персонаж. Таким образом, они видят следующее ]>
как текст, который будет представлен.
Только не используйте встроенный SGML.
Используйте псевдоатрибут & gt; разделитель вместо буквального > разделителя для выхода из вложенного >
в ]>
:
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
[<!ATTLIST li rel CDATA #IMPLIED>]>
Рекомендации