我更习惯于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