我可以在sgml文档中引用外部sgml声明吗?

时间:2011-08-23 01:37:22

标签: include 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

有没有办法只引用外部文件,还是我总是需要在命令行中指定它?

1 个答案:

答案 0 :(得分:3)

您无法从DOCTYPE声明中引用SGML声明。 DOCTYPE声明应仅指向DTD。

虽然可以创建一个名为catalog(无扩展名)并带有SGMLDECL条目的文件,但您可以做些什么。如果将此文件放在与SGML文档相同的位置,nsgmls将使用它。

您也可以在命令行上使用-c指向目录文件,但是这样做会使您失败,因为您尝试不从命令行引用任何其他内容。

这是一个示例catalog文件,指向不同的SGML声明文件:

SGMLDECL somedir/mydoc.decl

如果您的目录文件与“mydoc.sgml”位于同一目录中,则可以将sgml声明保留在命令行之外:

nsgmls mydoc.sgml