XML 文件与 DTD 和 XML 模式的关联

当将 XML 文件与 DTD 或 XML 模式相关联时,就会按照 DTD 或 XML 模式中包含的任何结构规则绑定 XML 文件。要成为有效的 XML 文件,文档必须带有 DTD 或 XML 模式,且必须符合 DTD 或 XML 模式中的所有声明。

有两种不同的方法来将 XML 文件与 DTD 或 XML 模式相关联。

  1. 直接关联 - XML 文件在其 DOCTYPE 声明中包含 DTD 的名称(如 <!DOCTYPE root-element SYSTEM " dtdfile.dtd" >,其中 dtdfile.dtd 是 DTD 文件的名称), 或者在 XML 文件根元素的 schemaLocation 属性中包含 XML 模式的路径 (如 <xsi:schemaLocation="http://www.ibm.com schema.xsd">,其中 schema.xsd 是 XML 模式的名称)。
  2. XML 目录条目 - 您可以在 XML 目录中注册 DTD 和 XML 模式文件并将它们与(它表示这些文件)相关联。然后,您可以从 XML 文件引用 DTD 或 XML 模式文件而不是直接引用 DTD 或 XML 模式文件。XML 目录条目包含两部分 - 键(它表示 DTD 或 XML 模式)和 URI(它包含 DTD 或 XML 模式的位置信息)。

关联如何起作用

将 XML 文件与 DTD 相关联
如果 XML 文件与 DTD 相关联,则该 XML 文件中将包含 DOCTYPE 标记(例如下面的 DOCTYPE 标记):
<!DOCTYPE root-name PUBLIC "InvoiceId" "C:\mydtds\Invoice.dtd">

InvoiceId 是 DTD 文件的公用标识。它用来将 XML 文件与 DTD 文件相关联(在本示例中,DTD 文件是 Invoice.dtd)。如果公用标识 InvoiceId 对应于 Invoice.dtd 的 XML 目录条目的,则 XML 目录条目的 URI(它包含 Invoice.dtd 的位置信息)用来定位 DTD。否则,使用直接引用 DTD 的文件系统位置的 DOCTYPE 系统标识("C:\mydtds\Invoice.dtd")来定位 DTD。

注意:也可以将系统标识用作 XML 目录条目中的“键”。如果将系统标识用作“键”,则 XML 文件中将包含 DOCTYPE 标记(例如下面的 DOCTYPE 标记):

<!DOCTYPE Root-name SYSTEM "MyDTD.dtd"> 

其中 MyDTD.dtd 是对应于 XML 目录条目“键”的系统标识。

将 XML 文件与 XML 模式相关联

如果 XML 文件与 XML 模式相关联,则 XML 文件中将包含一个或多个模式位置属性。schemaLocation 中的信息是作为“提示”提供给 XML 处理器的。以下示例显示了 schemaLocation 属性。

示例 1
<purchaseOrder xmlns="http://www.ibm.com"
xsi:schemaLocation="http://www.ibm.com C:\myschemas\PurchaseOrder.xsd">
<shipTo country="US">
...
示例 2
<purchaseOrder xmlns="http://www.ibm.com"
xsi:schemaLocation="http://www.ibm.com PO.xsd">
<shipTo country="US">
....

在示例 1 中,schemaLocation“提示”(“C:\myschemas\PurchaseOrder.xsd”)直接引用 XML 模式的文件系统位置或 URI。在这种情况下,模式文件将直接由 XML 处理器定位。

在示例 2 中,schemaLocation“提示”(“PO.xsd”)引用一个 XML 目录条目。PO.xsd 对应于 PurchaseOrder.xsd 的 XML 目录条目的,而 XML 目录条目的 URI(它包含 PurchaseOrder.xsd 的位置信息)将用来定位 XML 模式。

在两个示例中,xsi:schemaLocation 标记中的 http://www.ibm.com 是用来标识 XML 模式的名称空间的 URI。

也可以将名称空间用作 XML 目录条目中的“键”。如果将名称空间用作“键”,则 XML 文件中将包含 schemaLocation 标记(例如下面的 schemaLocation 标记):
<purchaseOrder xmlns:="www.ibm.com"
xsi:schemaLocation="http://www.ibm.com po/xsd/PurchaseOrder.xsd ">

schemaLocation 属性指向该模式的“键”和实际位置。

DTD 或 XML 模式驻留在远程服务器上

XML 编辑器中的几种功能(例如,验证和内容辅助)需要有 DTD 或 XML 模式。对于 DTD 或 XML 模式驻留在本地机器上的情况,产品文档提供了使用信息。但是,在许多情况下,DTD 或 XML 模式可驻留在远程服务器上,例如:

<!DOCTYPE Catalog PUBLIC "abc/Catalog" "http://xyz.abc.org/dtds/catalog.dtd">

通常,这种情况不存在任何问题,因为可从远程服务器检索 DTD 或 XML 模式。但是,如果您处在防火墙后面,并且没有 SOCKSified 系统,则工作台当前不为您提供方法来指定用于检索 DTD 或 XML 模式的 socks 服务器。如果您不能为系统启用 SOCKS,则此问题的变通方法是检索 DTD 或 XML 模式的副本(例如,使用 Web 浏览器来检索)并且将该副本保存在本地机器上。然后,可以将本地副本放置到 XML 文件所在的项目中,或者使用 XML 目录来将公用标识与 DTD 的(本地)位置相关联。

注意:如果在网络中的其他地方已将 XML 文件与 XML 模式或 DTD 相关联,并且您工作的机器已与网络断开连接,则当您想使用内容辅助或验证 XML 文件时,可以遵循前面描述的步骤。

XML 目录条目关联的优点

如果创建 XML 文件与 XML 模式或 DTD 文件之间的直接关联,则一旦您更改该模式或 DTD 的位置,就必须捕捉 DTD 或模式的新位置并用该位置更新所有引用 XML 文件。但是,如果您将 XML 文件与 XML 模式键或 DTD 键相关联,则当更改该模式或 DTD 的位置时,您只需要更新 XML 目录条目而不必更新各个 XML 文件。

例如,有一个名为“Building.dtd”的 DTD 与以下五个 XML 文件相关联 - Office.xml、House.xml、Apartment.xml、Bank.xml 和 PostOffice.xml。您将该 DTD 文件 Building.dtd 移至新位置。如果 Building.dtd 与所有 XML 文件是直接关联,则您必须更新每个 XML 文件中的 <DOCTTYPE> 声明以反映 Building.dtd 的新位置。然而,如果是 XML 目录关联且所有 XML 文件都仅引用 Building.dtd 的“键”,则您只需要更新 URI,而所有 XML 文件都将指向 Building.dtd 的新位置。

更新 XML 目录中的条目

更新 XML 目录中的条目之后,可能需要刷新 XML 编辑器视图以便它使用新的信息。为此,单击重新装入依赖项工具栏按钮 此图形为“重新装入依赖项”工具栏按钮,就会使用当前 XML 目录设置来更新该视图。仅当有 XML 文件处于打开状态并且它引用了已更新的 XML 目录条目时,才需要刷新 XML 编辑器视图。

有关更多信息,请参阅相关任务。

(c) Copyright 2001, World Wide Web Consortium (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University).

相关概念
XML 编辑器
相关任务
在有 DTD 或 XML 模式约束的情况下进行编辑
编辑 DOCTYPE 声明
将条目添加至 XML 目录
用对 DTD 和模式所作的更改来更新 XML 文件
编辑名称空间信息
编辑 XML 处理指令
在“设计”视图中进行编辑
在“源代码”视图中进行编辑