前缀“xsi”是实例的 XML 模式名称空间约定所使用的名称空间前缀。XML 文档可包含含有 xsi:type 属性的元素。这为该元素提供了明确的数据类型。
MRM XML 解析器可识别 XML 文档中的 xsi:type 属性。它相应修改该元素的数据类型,并将 xsi:type 属性添加到消息树中。
MRM XML 写程序可识别消息树中的 xsi:type 属性。它根据 XML 有线格式消息集属性 xsi:type 属性的输出策略输出 xsi:type 属性。例如,xsi:type 属性可被除去、可在所有元素上输出,或者根据 SOAP 标准中指定的规则进行输出。
如果对 WebSphere Message Broker 消息流启用验证,则验证逻辑可识别 xsi:type 属性,并使用这些属性修改对元素的验证。它还将使用 World Wide Web Consortium(W3C)Web 站点上的 XML Schema Part 1: Structures 中描述的规则验证 xsi:type 属性的值。
在解析和编写包含 xsi:type 属性的 XML 文档时,有几个要点需要牢记。
- 为了检测到并使用 xsi:type 属性,消息集必须启用名称空间。为了使消息集启用名称空间,请选中消息集属性使用名称空间。
- 如果 xsi:type 属性的值包含名称空间前缀,则该前缀将由 MRM XML 解析器扩展为标准 URI。如果相同的 xsi:type 属性以后由 MRM XML 写程序输出,则相同的前缀不会自动用于该值。可使用 XML 有线格式消息集属性中的名称空间设置列表控制输出时所使用的前缀。如果未提供前缀,则 XML 写程序将指定一个缺省前缀。
- 如果元素的 xsi:type 属性未解析为模型中的某个类型,则其行为取决于是否启用 MRM 验证。如果不进行验证,则 MRM 将假设元素的类型是模型中声明的类型,并继续。如果进行验证,则抛出验证异常。
- 如果启用 MRM 验证,则在执行验证时,消息树中必须存在所有必需的 xsi:type 属性。当
xsi:type 属性的值不同于消息模型中定义的元素数据类型时(这通常发生在使用 XML 模式类型派生时),则 xsi:type 属性是必需的。
- 如果对输入消息执行验证,则如前面所述,MRM XML 解析器将确保 xsi:type 属性出现在消息树中。
- 如果对输出消息执行验证,则必须确保正确的 xsi:type 属性出现在消息树中。应该确保将所有必需的 xsi:type 属性从输入消息树复制到输出消息树,或者在输出消息树中显式创建。
- 如果使用为 xsd:union 的简单类型,则在解析 union 时,xsi:type 属性可用于定向 MRM XML 解析器。
- 如果使用 WebSphere
Message Broker V6.0 并且已从不能识别 xsi:type 属性的较早版本进行迁移,则您可能会注意到某些行为更改。例如,在 WebSphere
Message Broker V6.0 中,xsi:type 属性不再视作自定义属性,因此它们出现在名为“type”而不是“@type”的消息树中。如果消息流逻辑可识别消息树中的 xsi:type 属性,则建议您将消息流更改为符合新行为。如果您想在消息流中保留 WebSphere Message Broker 较早版本中的逻辑,则此内容在消息流迁移注意事项中描述。
有关 xsi:type 属性的更多信息,请参阅 World Wide Web Consortium(W3C)Web 站点上的 XML Schema Part
0: Primer。