1

我想为我的 DTD(定义内联)指定一个版本(如 1.0 或 2.0)。我的目的是让解析器程序优雅地拒绝 XML 文档,如果版本与它正在寻找的不同。

4

1 回答 1

1

您可以将版本信息添加到文件名。例如:myapp_1_2.dtd如果您从文件系统或 URL 加载它。您可以解析名称并获取版本。

如果这在您的方案中不起作用,您可以使用可以包含版本信息的正式公共标识符。要使用它,您需要建立一个XML 目录

目录是将 FPI 映射到 DTD 的 XML 文件。它可能已经存在于您的环境或服务器中,因此您只需对其进行编辑并为每个 DTD 添加一个新条目。如果没有,您可能需要为您的应用程序编写目录文件和目录解析器,然后将其注册到您的解析器。

目录文件具有以下格式:

<!DOCTYPE catalog
   PUBLIC "-//OASIS/DTD Entity Resolution XML Catalog V1.0//EN"
   "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">

  <group prefer="public" xml:base="file:///server/apps/dtds/" >  3
    <public publicId="-//MY GROUP//DTD MY APP V1.2//EN" uri="myapp_1_2.dtd"/>
    <system systemId="..." uri="..."/>
    ...
  </group>
</catalog>

通过此设置,您可以通过 选择您的 DTD <!DOCTYPE root PUBLIC="-//MY GROUP//DTD MY APP V1.2//EN" />

请参阅这篇文章,其中有一些关于如何设置解析器的起点,并为其他来源搜索“XML 目录”。

另请参阅:正式的公共标识符和目录

于 2014-05-22T19:59:45.803 回答