我更习惯于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
有没有办法只引用外部文件,还是我总是需要在命令行中指定它?
答案 0 :(得分:3)
您无法从DOCTYPE声明中引用SGML声明。 DOCTYPE声明应仅指向DTD。
虽然可以创建一个名为catalog
(无扩展名)并带有SGMLDECL
条目的文件,但您可以做些什么。如果将此文件放在与SGML文档相同的位置,nsgmls将使用它。
您也可以在命令行上使用-c
指向目录文件,但是这样做会使您失败,因为您尝试不从命令行引用任何其他内容。
这是一个示例catalog
文件,指向不同的SGML声明文件:
SGMLDECL somedir/mydoc.decl
如果您的目录文件与“mydoc.sgml”位于同一目录中,则可以将sgml声明保留在命令行之外:
nsgmls mydoc.sgml