有种常见的情况,其中有两个 XML 模式文件 X 和 Y,它们都存在于文件系统中的同一个目录中,但是其中包含 Y 的 X 是用真实的目标名称空间定义的,而 Y 是在非目标的名称空间中定义的。导入这两个文件后,X 被放入到由名称空间确定的位置,但是 Y 被放入到用于非目标名称空间中定义的文件的缺省名称空间位置。这会导致两个文件之间的链接中断,您必须修改 X,以便它在其新的相对位置中正确包含 Y。
在同一个名称空间中,一个组包含两个具有相同 XML 名称的不同元素
情景说明:警告被写入到任务列表,因为在同一个名称空间中,一个组包含两个具有相同 XML 元素名称的不同元素。
说明:当具有 XML 物理格式的消息被验证后,该验证包括一个测试,用于识别解析器可能无法唯一确定 XML 名称表示哪个元素的消息定义的任何部分。 在同一个名称空间中,一个组包含具有相同元素名的两个不同 XML 元素时(即使重复是合法的),该测试会产生一个警告。
解决方案:确定警告信息中所表示的重复现象是否确实是一个需要改正的问题,或者它是不是因为两个元素处于选择共享同一个 XML 名称的对立双方而引起的,在这种情况下,重复是合法的,因为这不会产生不明确性。
您无法设置消息定义文件以在另一个消息定义文件中包括消息定义文件
情景说明:您无法设置消息定义文件的包含属性以包括另一个消息定义文件中包括的第二个消息定义文件。
解释:只有当第一个文件直接引用第二个文件时,消息定义文件才能够引用另一个消息定义文件中的对象。 例如,如果有三个消息定义文件 A、B 和 C,其中 A 包括 B,B 包括 C,然后,A 可以引用 B 中的对象,B 可以引用 C 中的对象,但是 A 无法引用 C 中的对象。
在导入已嵌套包括的 XML 模式文件之后,您可能还会遇到这个问题。
解决方案:通过直接包括消息定义文件,您可解决这个问题,在上述示例中,意味着在 A 中直接包括 C。 或者,您可以将 C 中的所有消息集定义直接定义到 B,然后删除 C,这样 A 只需要包括 B。
情景说明:产生错误消息 BIP5410,表明该元素或属性是基于 union 类型,并且该元素或属性无法类型强制转换成 union 的任何成员。
说明:当对基于 union 类型的元素或属性进行解析时,MRM XML 解析器使用 xsi:type 属性,这表明要解析该 union。
如果 xsi:type 属性不存在或者属性要进行解析,则解析器依次对每个 union 成员类型尝试类型强制转换成关联的简单类型,直到类型强制转换成功。在“大纲”视图中的 union 类型下,尝试类型强制转换的优先级顺序是消息模型中列出成员类型的顺序。
如果数据无法类型强制转换成 union 中的任何简单类型,则无法解析此 union,并且报告解析器错误。
解决方案:请执行以下检查:
检查该消息是否包含错误消息中识别的元素或属性的有效值。
检查错误消息中识别的 union 的成员类型是否包含正确的简单类型列表。
如果可能,使用 xsi:type 属性以明确解析 union。
由于 xsi:type 属性值不响应有效的 union 成员类型,所以发出错误消息 BIP5395。
情景说明:产生错误消息 BIP5395,表明元素是具有 xsi:type 属性的 union 类型,该属性具有一个值,该值应该将 union 明确地解析成一个模型化的成员类型,并且该 xsi:type 属性不符合 union 的有效成员类型。
说明:当对基于 union 类型的元素或属性进行解析时,MRM XML 解析器或书写器使用 xsi:type 属性,这表明要解析该 union。 解析器将 xsi:type 属性的值解析成字典中的简单类型,并且检查该简单类型是否是该 union 的有效成员类型。
如果 xsi:type 属性识别出不是 union 的成员类型的类型,则会报告一个错误。
解决方案:执行以下某个步骤:
修改此消息,以便 xsi:type 属性能够识别 union 的有效成员类型。
检查错误消息中识别的 union 的成员类型是否包含正确的简单类型列表。
由于数据类型不符合 union 的任何有效数据类型,因此产生错误消息 BIP5396。
情景说明:产生错误消息 BIP5396,表明该元素或属性是基于 union 类型,但是,数据类型不符合 union 中的任何有效数据类型。
说明:当对基于 union 类型的元素或属性进行写操作时,MRM XML 编写者使用 xsi:type 属性,这表明要解析该 union。 如果 xsi:type 属性不存在,则编写者尝试将树中的字面值的数据类型与 union 中的简单类型相匹配。如果字面值无法与 union 中的任何简单类型相匹配,则会报告一个编写错误。
解决方案:执行以下某个步骤:
检查该消息或 ESQL 是否包含元素或属性的有效值。
检查元素基于的 union 类型是否包含正确的简单类型列表。
考虑使用 xsi:type 属性来明确解析 union。
考虑更改树中的元素类型以符合某个 union 成员类型。
union 类型包含源于同一个基础类型的两个或更多个简单类型
情景说明:逻辑验证期间发出警告,表明该 union 类型包含源于同一个基础类型的两个或更多个简单类型。