Хороший вопрос. В основном люди просто игнорируют фактическое содержание оператора DOCTYPE:)
(основной) синтаксис объявления типа документа:
<!DOCTYPE root-element PUBLIC "publicID" SYSTEM "systemID">
Публичный идентификатор является необязательным, поэтому вы также можете сказать:
<!DOCTYPE root-element SYSTEM "systemID">
В обоих случаях токен, следующий за DOCTYPE
, представляет собой имя корневого элемента документа XML или SGML, содержащего это объявление. Итак ...
<!DOCTYPE NEWFILE SYSTEM "XXX_OUT_1234_YYMMDD_00.dtd">
<NEWFILE>
...
</NEWFILE>
И идентификаторы PUBLIC, и SYSTEM ссылаются на DTD для этого экземпляра документа. Идентификатор SYSTEM может использоваться для поиска физического файла, содержащего DTD. Идентификатор PUBLIC обычно используется с каталогами для предоставления локально кэшированного поиска для DTD. Это немного больше, чем это, но это основа. В вашем случае есть только идентификатор системы. Если бы вы использовали проверяющий парсер (я подозреваю, что нет), который проверял ваш документ по DTD (на этот раз тип документа определение ), он использовал бы эту информацию для поиска самого DTD. Если у вас нет каталога (вы почти наверняка его не имеете), приложение будет искать «XXX_OUT_1234_YYMMDD_00.dtd» в том же месте, что и сам файл экземпляра. Если вы не получаете ошибки валидации, она не просматривается, и вы можете безопасно удалить объявление
Если у вас есть схема для этого контента, то DOCTYPE довольно избыточен (есть некоторые варианты использования, когда вы используете сущности, но вы, вероятно, нет). Вы почти наверняка можете безопасно удалить его, так как я был бы очень удивлен, если вы проверяете DTD в этом процессе.