我更习惯于xml文档和工具,但是我需要处理sgml。我有一个正在使用nsgmls解析的sgml文档,我需要在其中包含一个特定的sgml声明。如果我在命令行上指定声明文件,它将很好地工作:

$ nsgmls mydoc.decl mydoc.sgml

但是我想在sgml文件中包括对声明的引用(而不是整个声明)。像xml doctype一样包含它,即<!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

有什么方法可以只引用外部文件,还是我总是需要在命令行上指定它?

最佳答案

您不能从DOCTYPE声明中引用SGML声明。 DOCTYPE声明应仅指向DTD。

尽管可以创建一个名为catalog(无扩展名)的文件,其中带有SGMLDECL条目,但该怎么办。如果将此文件放在与SGML文档相同的位置,则nsgmls将使用它。

您还可以在命令行上使用-c指向目录文件,但这将对您不利,因为您正尝试不从命令行引用其他任何内容。

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

SGMLDECL somedir/mydoc.decl

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

10-07 14:47