2011-08-23 65 views
2

我更習慣於xml文檔和工具,但我需要處理sgml。我有一個sgml文檔,我正在使用nsgmls進行解析,並且我需要在其中包含特定的sgml聲明。我可以從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 

有什麼辦法,只是引用外部文件,或者我會永遠需要指定它在命令行?

回答

2

您不能從DOCTYPE聲明中引用SGML聲明。 DOCTYPE聲明應該只指向DTD。

通過創建一個名爲catalog(無擴展名)的文件,可以執行的操作是SGMLDECL條目。如果你把這個文件放在你的SGML文件的相同位置,nsgmls將使用它。

您也可以在命令行上使用-c指向目錄文件,但這會爲您打破目的,因爲您試圖不從命令行引用其他任何內容。

下面是一個例子catalog文件指向不同的SGML聲明文件:

SGMLDECL somedir/mydoc.decl 

如果在同一個目錄中「mydoc.sgml」是目錄文件,你可以離開了SGML聲明出來的命令行:

nsgmls mydoc.sgml