Могу ли я ссылаться на внешнее объявление sgml из документа sgml?

Я больше привык к 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

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


person evil otto    schedule 23.08.2011    source источник


Ответы (1)


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

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

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

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

SGMLDECL somedir/mydoc.decl

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

nsgmls mydoc.sgml
person Daniel Haley    schedule 21.10.2011