消息模型中的名称空间

XML 实例文档和 XML 模式可以使用名称空间。名称空间提供了限定对象名的方法。

单个 XML 实例文档可以包含为多个应用程序定义的和可能供多个应用程序使用的元素和属性。同一文档中的两个不同的元素或属性可能需要相同的名称。各个应用程序需要能识别设计成由它们处理的元素和属性。在类似此处的情况下,可通过使用不同的名称空间限定每个元素来分辨各个不同元素的定义。这避免了名称冲突和错误识别的问题。

XML 模式可以定义目标名称空间。在 XML 模式中定义的全局元素、属性、组和类型使用目标名称空间限定(如果已定义目标名称空间)。可选地,局部元素和属性可以使用目标名称空间限定。因此,名称空间帮助开发 XML 模式的库,这些库可以单独开发。提供唯一的用于 XML 模式的名称空间名称,开发者不必关心与其他 XML 模式中所定义对象的名称冲突。

名称空间的作用域扩展到了它的外围文档之外,并由统一资源标识(URI)进行标识。为了满足其目的,URI 应该是唯一的。您可能更熟悉统一资源定位器(URL)这一概念。尽管 URI 定义比 URL 的规范要宽,但 URI 常常使用与 URL 相同的语法。 这是 URI:http://mycompany.com/xml_schema 的示例

名称空间前缀声明为 URI 完整名称的缩写,这用来限定所有属于该名称空间的元素。 用于替换 XML 实例文档或 XML 模式中的名称空间的前缀使用 xmlnsxmlnsc 属性指定。也可以使用 xmlnsxmlnsc 属性定义缺省名称空间。如果定义了缺省名称空间,则任何没有前缀的元素或属性使用缺省名称空间限定。如果没有定义缺省名称空间,则任何没有前缀的元素或属性没有使用名称空间限定。

消息模型
消息模型提供了在消息集中支持名称空间的能力。但是,您可以选择想要为您的消息集启用还是禁用名称空间。如果当您创建您的消息集时,您选择禁用名称空间,稍后您可以启用名称空间。但是,一旦您为消息集启用了名称空间,您无法再禁用名称空间。

启用名称空间的单个消息集可以包含许多个不同的名称空间。每个名称空间由不同的消息定义文件表示。当您创建消息定义文件时,您可以选择它是否有关联的名称空间或者它是否在 notarget 名称空间中。如果您选择将名称空间与消息定义文件进行关联,您必须还要选择一个前缀。

如果消息定义文件有关联的名称空间,下列全局对象使用名称空间限定:

  • 元素
  • 属性
  • 简单类型
  • 复杂类型
  • 属性组

可选地,局部元素和属性可以使用名称空间限定。

消息定义文件中定义的对象可以引用同一消息集中的其他消息定义文件中的对象。这通过在另一个消息定义文件中导入或包含一个消息定义文件实现。

XML 有线格式
与消息定义文件关联的名称空间是消息模型的逻辑层的一部分。因此,它不从属于显示的 XML 有线格式。但是,如果您有 XML 有线格式,来自逻辑层的名称空间信息用于填充 XML 有线格式的一些属性。如果为消息集启用了名称空间,在 XML 有线格式中会维护一张名称空间 URI/前缀对的表。该表创建时,一开始使用带有它们的前缀的所有消息定义文件的名称空间填充。

如果您使用 WebSphere Message Broker,且您的消息集启用了名称空间,当代理解析 XML 实例文档时,代理不存储树中任何 xmlnsxmlnsc 属性的值。它也不存储任何模式位置无名称空间模式位置属性的值。这是因为,当写 XML 文档时,代理从消息集的 XML 有线格式的属性重新生成此信息。

如果您使用 WebSphere Message Broker,当输出 XML 消息时可,MRM 域使用名称空间 URI/前缀的表。名称空间限定的元素和属性被加上表中相应的前缀。代理还管理将前缀映射到名称空间的对应 xmlnsxmlnsc 属性的输出。 您可以选择名称空间 URI/前缀表中的所有条目的 xmlnsxmlnsc 属性是输出在文档的开始处还是它们仅在需要时才输出在文档中。

如果对消息集启用了名称空间,在 XML 有线格式中,有一张模式位置的表,这张表将名称空间 URI 映射为文件名。您可以向这张表添加条目,也可以将文件名映射到 notarget 名称空间。如果您使用 WebSphere Message Broker,此表用于在 XML 文档的开始处输出模式位置无名称空间模式位置属性。

消息解析和 ESQL
如果您使用 WebSphere Message Broker,MRM 域以及 XMLNS 和 XMLNSC 域解析器识别它们解析的 XML 消息中的前缀名称,且在内部将这些前缀名称映射到正确的名称空间。从消息模型生成的字典中的元素和属性可以使用名称空间限定也可以不限定(如“消息模型”部分中讨论的那样)。

如果要在 MRM 域中使用 XML 格式,则当根据从消息模型生成的字典匹配解析的消息时,会根据字典中的名称空间匹配元素或属性。 因此,对于消息中要与字典匹配的元素或属性,它们的名称和名称空间都必须匹配。

如果要使用 WebSphere Message Broker,会向您提供支持,以允许您在写 ESQL 时指定名称空间。 如果不使用名称空间,则没有必要写知道名称空间的 ESQL。但是,如果您决定使用名称空间,您的消息定义文件可以任何您选择的名称空间的目标名称空间,且写知晓名称空间的 ESQL 是必要的。当进行解析时,元素驻留所在的名称空间将存储在消息树中。这是逻辑属性,且无论以哪个物理有线格式解析和写消息,都将保留此逻辑属性。ESQL 中添加了新的语法以使使用定义的前缀引用元素名称空间变得容易。

从其他格式导入
消息模型允许您通过将其他格式导入 Message Brokers Toolkit 中,而从其他格式创建消息定义文件。
  • 如果您导入 XML DTD 文件,创建的消息定义文件将在 notarget 名称空间中。
  • 如果您导入 XML 模式文件,创建的消息定义文件的目标名称空间取决于消息集是否启用了名称空间。
    • 如果启用了名称空间,则创建的消息定义文件的目标名称空间将是导入的 XML 模式的目标名称空间。
    • 如果消息集禁用了名称空间,则创建的消息定义文件将在 notarget 名称空间中。这种类型的导入不提供完整的名称空间支持。如果您使用 WebSphere Message Broker,您不必写知晓名称空间的 ESQL 或 Java 以处理根据从此消息模型生成的字典解析的 XML 消息。 有关您可能要执行该操作的原因,请参阅将 XML 模式导入禁用名称空间的消息集
  • 如果您导入 COBOL 副本或 C 头文件,创建的消息定义文件的目标名称空间取决于消息集是否启用了名称空间。
    • 如果启用了名称空间,则创建的消息定义文件的目标名称空间是 notarget 名称空间。 通过在新建消息定义文件向导中指定目标名称空间,可以覆盖此缺省名称空间。有关您可能要执行该操作的原因,请参阅带非 XML 消息的名称空间
    • 如果消息集禁用了名称空间,则创建的消息定义文件将在 notarget 名称空间中

关于 XML 的更多信息

万维网协会(W3C) Web 站点上,另见:

声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ad00820_