【问题标题】:Can I reference an external sgml declaration from within a sgml document?我可以从 sgml 文档中引用外部 sgml 声明吗?
【发布时间】:2011-08-23 01:37:22
【问题描述】:

我更习惯xml文档和工具,但我需要处理sgml。我有一个使用nsgmls 解析的sgml 文档,我需要在其中包含一个特定的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

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

【问题讨论】:

    标签: include sgml


    【解决方案1】:

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

    您可以创建一个名为catalog(无扩展名)的文件,其中包含SGMLDECL 条目。如果您将此文件放在与 SGML 文档相同的位置,nsgmls 将使用它。

    您也可以在命令行上使用-c 指向目录文件,但这会破坏您的目的,因为您试图不从命令行引用任何其他内容。

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

    SGMLDECL somedir/mydoc.decl
    

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

    nsgmls mydoc.sgml
    

    【讨论】:

      猜你喜欢
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多