我想为我的DTD(内联定义)指定一个版本(如1.0或2.0)。我的目的是让解析器程序优雅地拒绝XML文档,如果版本与它正在查找的版本不同。
答案 0 :(得分:1)
您可以将文件信息添加到文件名中。例如:myapp_1_2.dtd
,如果您从文件系统或URL加载它。您可以解析名称并获取版本。
如果在您的方案中不起作用,您可以使用可包含版本信息的Formal Public Identifier。要使用它,您需要建立XML Catalog。
目录是将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>
通过此设置,您可以通过<!DOCTYPE root PUBLIC="-//MY GROUP//DTD MY APP V1.2//EN" />
选择您的DTD。
请参阅this article,其中有一些关于如何设置解析器的起点,并搜索&#34; XML目录&#34;对于其他来源。