Тьфу! DTD могут быть довольно сложными время от времени.
Давайте разберем ваш фрагмент DTD. Для ясности я перенес строки и добавил номера строк.
1. <!ENTITY % xhtml-inlstyle.module "INCLUDE" >
2. <![%xhtml-inlstyle.module;[
3. <!ENTITY % xhtml-inlstyle.mod PUBLIC "-//W3C//ELEMENTS XHTML Inline Style 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-inlstyle-1.mod" >
4. %xhtml-inlstyle.mod;]]>
В этой форме мы можем сказать, что в строках 1 есть 3 - объявления сущностей, в строках 2 и 4 - текст, содержащий ссылку на сущность.
Первая строка - это простая старая сущность литерального значения, и я добавлю текст замены вместо ссылки в строке 2. Чтобы добавить ясности, я опущу первую строку, добавлю несколько пробелов в качестве отступа и перевода строки , Тогда имеем:
2. <![INCLUDE[
3. <!ENTITY % xhtml-inlstyle.mod PUBLIC "-//W3C//ELEMENTS XHTML Inline Style 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-inlstyle-1.mod" >
4. %xhtml-inlstyle.mod;
5. ]]>
Строка 2 становится объявлением раздела разметки с ключевым словом INCLUDE
. Содержимое раздела в строке 3 является объявлением объекта, для которого текст объекта является не литералом, а объявлением внешнего объекта из-за ключевого слова PUBLIC
. Это означает, что заменяющий текст - это не следующий текст в кавычках, а содержимое ссылочного документа, местоположение которого определяется этим формальным общедоступным идентификатором и системным идентификатором (URL). Если вам повезет, и следование URL-адресу в конце строки не приведет к ошибке тайм-аута, вы увидите, что содержимое этого внешнего DTD представляет собой практически два объявления объекта параметра. Это: <!ENTITY % style.attrib "style CDATA #IMPLIED">
и <!ENTITY % Core.extra.attrib "%style.attrib;" >
. Расширяя ссылку на сущность в строке 4, ваш оригинальный фрагмент DTD технически приводит к следующему фрагменту DTD:
<![INCLUDE[
<!ENTITY % style.attrib "style CDATA #IMPLIED">
<!ENTITY % Core.extra.attrib "%style.attrib;" >
]]>
Это не выглядит для меня слишком ошибочно, но рецензирование, конечно, приветствуется. Поэтому следующий вопрос: почему возникает ошибка, что может ее вызвать?
Некоторые возможности, которые пришли мне в голову:
Правильный ли синтаксис, который вы обрабатываете, и тот же, что показан здесь? Если символ >
отсутствует в конце второго объявления объекта, он не завершается до того, как ссылка на тот же объект (в строке 4). Работает ли синтаксический анализ объявления, только если оно написано в одной строке? Попробуйте перемотать его. Понимает ли парсер какие-либо другие объявления сущностей, кроме тех, которые имеют буквальное значение? Попробуйте создать аналогичное объявление сущности с открытым идентификатором, но сначала не обращайтесь к нему. Может ли проблема быть вызвана способом разрешения ваших (общедоступных / системных) идентификаторов? Есть ли у вас каталог DTD, перенаправляете ли вы возможные поиски DTD по сети в локальные копии, что произойдет, если вы измените URL-адрес на локальный файл (или место, которое вряд ли истекло) и т. Д. Является ли INCLUDE
объявление вокруг объявления объекта, вызывающее его сбой? Попробуйте переместить его над объявлением INCLUDE
, чтобы оно также значительно опережало ссылку на сущность. Работает ли INCLUDE
вообще, попытка использования моего последнего фрагмента DTD также вызовет ошибку.
Кстати. DTD XHTML 1.1 содержит много других структур включения, похожих на эту, так что это, вероятно, не единственное место, которое вызовет ошибку. Это был только первый.
Я закончу этот пост плохими новостями. Если эта проблема не связана с какой-либо человеческой ошибкой, такой как неуместные или отсутствующие символы в вашем реальном файле DTD, или если это не способ извлечения внешних ресурсов DTD, то я бы предположил, что эта проблема вызвана ошибкой / неподдерживаемой функцией в вашем синтаксическом анализаторе (который, вероятно, не будет исправлен в ближайшее время) или затем (несмотря на ошибку, явно указывающую на файл DTD) это вызвано чем-то в вашем коде C # и по сравнению с другими людьми здесь я понятия не имею об этом и могу Я не могу тебе помочь. Приятной отладки в любом случае!