2012-09-24 51 views
1

我正在使用DocBook 5.0,創建一個寫/編輯/製作環境。我使用DB5的RNG模式版本驗證我的XML。我可以在同一個XML文件中使用xinclude和實體嗎?

爲了使我的環境更易於使用,我喜歡將我的書分成多個文件,使用xinclude將本書的章節拉入書本文件。在我的XSLT中很好用。

我喜歡使用系統實體,使我的非技術編寫者/編輯更容易使用某些特殊字符。我爲一些常見的特殊字符(例如:&emDash;爲—)設置了易於使用的名稱的實體文件。

我以爲我讀過的地方,你不能在同一個XML文件中使用實體和xinclude。我只是嘗試過,但它驗證並轉換成OK。這個可以嗎?這裏有沒有問題,我沒有看到?以下是我如何在書本文件頂部聲明所有內容:

<?xml version="1.0" encoding="UTF-8"?> 
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" type="xml"?> 
<!DOCTYPE book [ 
<!ENTITY % entities SYSTEM "utilities/entities/entities.ent"> 
%entities; 
]> 
<book xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf" version="5.0" xml:id="book"> 

感謝您的幫助!

回答

3

你寫道:「我以爲我讀了一個地方,你不能在同一個XML文件中使用實體和xinclude。」

首先,語言學究的回答是:

的XInclude的規範沒有禁止使用的實體;目前尚不清楚它是否能夠一致地這樣做,因爲它被定義爲在信息集的層面上運行,而不是在XML字符流的層面上運行。 XML規範並不禁止在使用實體時使用XInclude。因此,您關心的兩個功能的定義規範都不允許使用它。

試圖定義使用情況配置文件的其他一些規範可能會同時禁止使用實體和XInclude;我不知道任何,但這並沒有多大意義。但是,如果有任何此類配置文件適用於您,我希望您能瞭解它們。由於XInclude有時被認爲是使實體不必要的一種方式(至少是外部實體),所以一些XInclude愛好者可能會認爲與XInclude一起使用實體是不好的;這對你來說很重要,如果你碰巧與任何感受這種方式的人一起工作,並且關心他們的想法,但是除此之外,你可以自由地向他們揮手致意並開始工作。 (我懷疑如果你閱讀了某種你記得的東西,那是關於作者認爲是好的做法還是好口味的陳述;這當然不是關於法律上或技術上可行的事實的陳述。)

第二,一個實際的答案:一些處理器和工具鏈支持使用外部DTD子集中聲明的實體,一些支持XInclude,一些支持兩者。檢查你關心的工具;如果他們都按照您希望創建的數據來處理數據,那麼您無需擔心。

相關問題