在前发行版中,您可以在消息模型中的复合类型内嵌入简单类型。这允许建模在 XML 标记之间可以发生匿名文本。这些简单类型被引用为嵌入式简单类型以将它们与 XML 模式简单类型区分开来。 本主题仅当您在处理在前发行版中建模并且已使用mqsimigratemsgsets 命令导入的消息时适用。
当 MRM 消息被解析为逻辑树时,嵌入式简单类型没有唯一在 ESQL 中定义它们的标识。如果要查询或更新在嵌入式简单类型中保存的数据,必须在引用它时关联消息中的其他已知对象。
例如,如果您要以文本“Mr. Smith”更新嵌入式简单类型,请在 Compute 节点中包含以下 ESQL:
SET OutputRoot.MRM.Person.*[3] = 'Mr.Smith';
这条语句将 Person 元素的第三个子代设置为 Mr.Smith。因为这条语句在树中寻址匿名元素(没有名称的嵌入式简单类型),所以您只有知道它在树中的位置才能设置它的值。
请查看以下 MRM XML 消息:
<Mess1> <Elem1>abc</Elem1> <Elem2>def<Child1>ghi</Child1></Elem2> </Mess1>
您可以使用以下对象在 MRM 中构建此 XML 消息的模型。
Type 属性设置为 tMess1。
Composition 属性设置为 Ordered Set。
复杂类型包含下列对象:
Type 属性设置为 XML 模式简单类型 xsd:string。
Type 属性设置为复杂类型 tElem2。
Composition 属性设置为 Sequence。
复杂类型包含下列对象:
Type 属性设置为 XML 模式简单类型 xsd:string。
在 tMess2 中嵌入式简单类型 ComIbmMRM_BaseValueString 用来从输入消息解析数据 def。如果您要更改在输出上与嵌入式简单类型关联的数据的值,则编写以下 ESQL:
SET OutputRoot.MRM.Elem2.*[1] = 'xyz';
这生成以下输出消息:
<Mess1> <Elem1>abc</Elem1> <Elem2>xyz<Child1>ghi</Child1></Elem2> </Mess1>
如果您不愿意在 MRM 中为此消息建模,可以使用以下 ESQL 获得相同的结果:
SET OutputRoot.XML.Elem2.*[1] = 'xyz';
嵌入式简单类型没有用于空值处理的工具,而很多元素提供空值处理。如果您将一个嵌入式简单类型设置为空,则它将从消息树中删除。
在 ESQL 中,元素名称通常用来引用和更新 MRM 元素。例外是当嵌入式消息中存在简单类型时。如果您正在使用多段式消息,且该消息不是位流中的第一个消息对象,则必须指定消息名称来进一步限定嵌入式简单类型引用。访问 MRM 域中嵌入式消息 提供更多信息。