Я думаю, что у вас здесь есть несколько недоразумений.
Используете ли вы слово «public» для обозначения ПУБЛИЧНОГО идентификатора в DOCTYPE, или вы используете его неофициально для обозначения «доступно»?
Размещение идентификатора PUBLIC в DOCTYPE означает, что ни одна программа или человек не сможет найти фактическое содержимое DTD без каталога. Помещение системного идентификатора в DOCTYPE, если этот идентификатор является URL-адресом, означает, что люди и программы могут его найти.
Если для вас важно, чтобы проверяющие парсеры находили и использовали DTD, то вам нужно либо объединить PUBLIC с использованием каталога, либо придерживаться SYSTEM и URL.
В наши дни для этой цели чаще используется XML-схема W3C, чем DTD.