Могу ли я сослаться на внешнее объявление sgml из документа sgml? - PullRequest
3 голосов
/ 23 августа 2011

Я больше привык к XML-документам и инструментам, но мне нужно разобраться с sgml. У меня есть документ sgml, который я использую nsgmls для анализа, и мне нужно включить в него определенное объявление sgml. Это прекрасно работает, если я укажу файл объявления в командной строке:

$ nsgmls mydoc.decl mydoc.sgml

Но я бы хотел включить ссылку на объявление в файл sgml (а не на всю декларацию). Включая его как XML-документ, т. Е. <!DOCTYPE MyDoc SYSTEM "mydoc.decl"> завершается с

mydoc.decl:1:2:E: unknown declaration type "SGML"

и объявление не анализируется (что приводит к множеству других ошибок). Попытка сделать то же самое, что и объявление SGML: <!SGML MyDoc SYSTEM "mydoc.decl"> не лучше, что приводит меня к фатальной ошибке:

mydoc.decl:1:0:E: character "<" invalid: only minimum literal and parameter separators allowed
mydoc.decl:1:0:E: cannot continue because of previous errors

Можно ли просто ссылаться на внешний файл или мне всегда нужно будет указывать его в командной строке?

1 Ответ

3 голосов
/ 22 октября 2011

Нельзя ссылаться на объявление SGML из объявления DOCTYPE. Объявление DOCTYPE должно указывать только на DTD.

Что вы можете сделать, создав файл с именем catalog (без расширения) с записью SGMLDECL. Если вы поместите этот файл в то же место, что и документ SGML, nsgmls будет использовать его.

Вы также можете указать на файл каталога, используя -c в командной строке, но это побьет цель для вас, поскольку вы пытаетесь не ссылаться на что-либо еще из командной строки.

Вот пример catalog файла, указывающего на другой файл объявления SGML:

SGMLDECL somedir/mydoc.decl

Если этот файл каталога находится в том же каталоге, что и «mydoc.sgml», вы можете оставить объявление sgml вне командной строки:

nsgmls mydoc.sgml
...