3

我正在使用 DocBook 5.0,创建一个写作/编辑/生产环境。我根据 DB5 的 RNG 模式版本验证我的 XML。

为了使我的环境更易于使用,我喜欢将我的书籍分成多个文件,使用 xinclude 将书籍的章节拉入书籍文件中。在我的 XSLT 中效果很好。

我喜欢使用系统实体来让我的非技术作家/编辑更容易使用一些特殊字符。我为一些常见的特殊字符设置了一个带有易于使用的名称的实体文件(例如:&emDash; for —)。

我以为我在某处读到过,您不能在同一个 XML 文件中同时使用实体和 xinclude。不过,我只是尝试过,它验证并转换正常。这个可以吗?我没有看到这里有问题吗?以下是我在本书文件顶部声明所有内容的方式:

<?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">

谢谢你的帮助!

4

1 回答 1

4

你写“我想我在某处读到你不能在同一个 XML 文件中同时使用实体和 xinclude。”

首先,语言学究的回答:

XInclude 规范不禁止使用实体;不清楚它是否可以连贯地这样做,因为它被定义为在信息集级别上操作,而不是在 XML 字符流级别上操作。并且 XML 规范并没有禁止在使用实体时使用 XInclude。因此,您关心的两个功能的定义规范都没有禁止它。

其他一些试图定义使用配置文件的规范可能会禁止同时使用实体和 XInclude;我不知道,但这并不意味着什么。但是,如果有任何此类配置文件适用于您,我希望您会了解它们。

由于 XInclude 有时被视为使实体变得不必要的一种方式(嗯,至少是外部实体),一些 XInclude 爱好者可能会认为将实体与 XInclude 一起使用是不好的。如果您碰巧与任何有这种感觉并关心他们想法的人一起工作,这对您来说很重要,但否则您可以自由地向他们挥手致意并继续您的工作。(我怀疑如果你读到你记得的那种东西,那是关于作者认为是好的做法或好的品味的陈述;它当然不是关于什么是合法的或技术上可能的事实陈述。)

其次,一个实用的答案:一些处理器和工具链支持使用在外部 DTD 子集中声明的实体,一些支持 XInclude,一些支持两者。检查您关心的工具;如果他们都按照您的意愿使用数据,那么您就不用担心了。

于 2012-09-24T16:51:52.977 回答