XML 解析器和域

XML 消息域包含符合 W3C XML 标准的所有消息。

该域中的消息由 XML、XMLNS 或 XMLNSC 解析器中的某个进行处理。XMLNS 域是 XML 域的扩展,并包含符合相同标准且可使用 XML 规范的名称空间功能的消息。该域中的消息由 XML 解析器进行处理。

XML 解析器是用于解释位流或树的程序,该位流或树表示的消息属于 XML 域,并且该程序在输入时从位流生成相应的树,或在输出时从树生成位流。 位流是 XML 文件的一种表示。(XML 解析器还解释所表示的消息属于 JMS 域的位流或树;该域中没有 JMS 解析器。)

您的应用程序可用两种方法将 XML 消息(拥有或没有名称空间支持)与 WebSphere Message Broker 代理交换:

  1. 您可以预定义(建模)消息模板来创建消息字典。如果您这样做,则您的 XML 消息由 MRM 解析器解析,并按与您建模的所有消息的相同方法进行处理。
  2. 您可以使用在发送之前无需以任何方式指定的自定义消息。

    每个内置节点都可处理自定义消息。整个消息可以存储在数据库中,并且头在通过消息流传递时可以添加到消息或从 消息除去。

自定义消息也称为通用 XML 消息。它没有已记录的格式,但以符合 XML 规范的文档形式携带有关其内容和结构的信息。它的定义并不保留在任何其他位置。当代理接收到 XML 消息时,XML 解析器会解释它,并且根据消息内包含的 XML 定义来创建内部消息树结构。

XML 解析器如何处理空元素和值的详细信息在 XML 解析器和空值中进行了描述。

WebSphere Message Broker 提供的信息并不提供 XML 术语、概念和消息构造的完整定义或描述:它只是一个摘要,强调了在 XML 消息与代理和消息流一起使用时的重要方面。

有关 XML 的更多信息,请参阅 developerWorks Web 站点。

示例 XML 消息解析

本描述中使用的名称元素(例如,XmlDecl)都由 WebSphere Message Broker 提供,并且作为相关名引用。它们可用于 ESQL 中使用的符号,这些 ESQL 定义由消息流中 Compute 或 Filter 等节点执行的消息内容处理。 它们不是 XML 规范的一部分。由于 XML 内容处理各不相同,每个 XML 解析器定义其自己的相关名集。

XML 名称元素(例如,Element 和 XmlDecl)的相关名等同于格式为 0x01000000 等的常量值。您可以参阅这些用于输出(在跟踪一个消息或一部分消息时由 Trace 节点创建)的常量。

简单 XML 消息可以采用以下格式:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE Envelope
PUBLIC "http://www.ibm.com/dtds" "example.dtd"
[<!ENTITY Example_ID "ST_TimeoutNodes Timeout Request Input Test Message">]
>
<Envelope version="1.0">
	<Header>
<Example>&Example_ID;</Example>
<!-- This is a comment -->
	</Header>
<Body version="1.0">
<Element01>Value01</Element01>
		<Element02/>
		<Element03>
<Repeated>ValueA</Repeated>
<Repeated>ValueB</Repeated>
		</Element03>
<Element04><P>This is <B>bold</B> text</P></Element04>
	</Body>
</Envelope>

以下部分显示了在 XML 和 XMLNSC 解析器中解析以上消息时由 Trace 节点创建的输出,从而说明当代理处理数据时,用于表示数据的各内部结构中存在的区别。

在 XML 域中解析的示例 XML 消息

注意,由于空格、制表符和换行符将原始 XML 文档进行了格式化,所以在下面部分存在树中的 WhiteSpace 元素;为能清晰表示,跟踪内的实际字符均已用 'WhiteSpace' 替换。XML 元素中的 WhiteSpace 是有商业含义的,使用 Content 语法元素来表示。请注意,XmlDecl、DTD 和注释使用显式相关名语法元素在 XML 域中表示。

  (0x01000010):XML        = (
    (0x05000018):XML = (
      (0x06000011): = '1.0'
      (0x06000012): = 'UTF-8'
      (0x06000014): = 'no'
    )
    (0x06000002): = 'WhiteSpace'
    (0x05000020):Envelope = (
      (0x06000004): = 'http://www.ibm.com/dtds'
      (0x06000008): = 'example.dtd'
      (0x05000021): = (
        (0x05000011):Example_ID = (
          (0x06000041): = 'ST_TimeoutNodes Timeout Request Input Test Message'
        )
      )
    )
    (0x06000002): = 'WhiteSpace'
    (0x01000000):Envelope = (
      (0x03000000):version = '1.0'
      (0x02000000): = 'WhiteSpace'
      (0x01000000):Header = (
        (0x02000000): = 'WhiteSpace'
        (0x01000000):Example = (
          (0x06000020): = 'Example_ID'
          (0x02000000): = 'ST_TimeoutNodes Timeout Request Input Test Message'
          (0x06000021): = 'Example_ID'
        )
        (0x02000000): = 'WhiteSpace'
        (0x06000018): = ' This is a comment '
        (0x02000000): = 'WhiteSpace'
      )
      (0x02000000): = 'WhiteSpace'
      (0x01000000):Body = (
        (0x03000000):version = '1.0'
        (0x02000000): = 'WhiteSpace'
        (0x01000000):Element01 = (
          (0x02000000): = 'Value01'
        )
        (0x02000000): = 'WhiteSpace'
        (0x01000000):Element02 =
        (0x02000000): = 'WhiteSpace'
        (0x01000000):Element03 = (
          (0x02000000): = 'WhiteSpace'
          (0x01000000):Repeated = (
            (0x02000000): = 'ValueA'
          )
          (0x02000000): = 'WhiteSpace'
          (0x01000000):Repeated = (
            (0x02000000): = 'ValueB'
          )
          (0x02000000): = 'WhiteSpace'
        )
        (0x02000000): = 'WhiteSpace'
        (0x01000000):Element04 = (
          (0x01000000):P = (
            (0x02000000): = 'This is '
            (0x01000000):B = (
              (0x02000000): = 'bold'
            )
            (0x02000000): = ' text'
          )
        )
        (0x02000000): = 'WhiteSpace'
      )
      (0x02000000): = 'WhiteSpace'
    )

在 XMLNSC 域中解析的示例 XML 消息

以下跟踪显示了用于表示压缩 XMLNSC 解析器内相同 XML 结构(以其缺省方式表示)而创建的元素。该方式中,压缩解析器不保留注释,处理结构或混合文本。

通过比较可明显地发现,使用压缩解析器可以大大减少用于表示示例 XML 消息业务内容的语法元素的数量。

请注意,如果不保留混合文本,所有不具有业务数据内容的 WhiteSpace 元素将不再于 Broker 消息树中采取任何运行时限制。然而,这也会使“Element04.P”中的混合文本遭到废弃,且树中仅保留子代文件夹“Element04.P.B”的值,文本“P”中的“这是”和“文本”也遭废弃。 通常此种类型的 XML 结构不会与业务数据格式关联,因此一般都需要使用压缩 XMLNSC 解析器。但如果您需要此类处理,则您不应使用 XMLNSC 解析器或将其与启用的“保留混合文本”方式结合使用。

XML 声明的处理也会在压缩解析器中根据版本、编码和独立属性而不同,这些因素保存为 XmlDeclaration 而非特定相关名元素的子代。

(0x01000000):XMLNSC = (
    (0x01000400):XmlDeclaration = (
      (0x03000100):Version = '1.0'
      (0x03000100):Encoding = 'UTF-8'
      (0x03000100):StandAlone = 'no'
    )
    (0x01000000):Envelope = (
      (0x03000100):version = '1.0'
      (0x01000000):Header = (
        (0x03000000):Example = 'ST_TimeoutNodes Timeout Request Input Test Message'
      )
      (0x01000000):Body = (
        (0x03000100):version = '1.0'
        (0x03000000):Element01 = 'Value01'
        (0x01000000):Element02 =
        (0x01000000):Element03 = (
          (0x03000000):Repeated = 'ValueA'
          (0x03000000):Repeated = 'ValueB'
        )
        (0x01000000):Element04 = (
          (0x01000000):P = (
            (0x03000000):B = 'bold'
          )
        )
   )

样本收藏夹中的多数样本使用 XML 解析器处理消息。例如,查看协调请求应答样本大型消息传递样本消息路由样本

相关参考
内置节点
XML 构造
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac00600_