内容


使用 OASIS CAM 和 CAMProcessor 扩展 HL7 v3 架构

一致并快速地为医疗保健应用程序创建一致性模板和测试消息

概述

HL7 消息标准旨在通过生成并发布由跨项目对象模型生成的示例 3C XSD 和模型来提供一个总体结构以便支持医疗保健行业的所有领域。其他的标准框架,如国家信息交换模型(National Information Exchange Model,NIEM),更依赖于扩展和限制概念来促进新行业和实践的采用。我发现使用 ISO Schematron 验证语言来补充原始架构对于有效地扩展已发布的 HL7 v3 架构很有用,但是我发现您可以单独使用 OASIS CAM 来实现这一目的,它非常依赖于扩展和限制。CAMProcessor(请参考 下载),即 CAM 的开源 Java™ 实现,提供 IDE 以便摄取、扩展并替换 HL7 产品架构。在您使用 CAMProcessor 创建 CAM 模板以后,就可以轻松从该模板生成一套一致性消息。

无论何时发布新的 HL7 消息标准,实现人员都必须通过分析已发布的 XSD 和基础模型来了解其意义所在。此分析的产品之一通常是一套一致性消息,其代表实现交互的应用程序的预期交互和互操作性。此外,通常需要对 XSD 进行更改,以便其与基础对象模型更紧密一致。如果您使用 CAMProcessor 工具来摄取并扩展版本架构到 CAM 模板,那么此过程会大大简化。正如我将在本文后面所讨论的,常常需要特别注意的两个领域是基数和可选性,或者一致性强度。

通过摄取 XSD 扩展架构

可用于 CAMProcessor 项目的教程对于建立应用程序并运行它来说非常有用。从本质上讲,您可以通过从现有的 XSD 创建新的 CAM 模板文件来摄取 XSD 文件,然后修改该文件以便排除不必要的元素并添加 XSD 可能缺少的属性。在您创建 CAM 模板以后,可以添加注释以便提供示例数据并导出提示文件(或者您可以直接将示例数据添加到模板)。通过 CAM 模板和提示文件,您能够创建示例文件,然后您就可以将这些文件用于一致性的目的了。

例如,在诸如那些本文附带的示例文件等的 HL7 消息中,您可能需要排除编码项目的值元素、添加根或扩展属性以及排除作为原始 XSD 生成过程的工件而存在的属性。您可以在模板自身的 Message Transport 和 Control Act Wrapper(其封装消息有效负载)中设置示例数据,然而您应该使用保存在独立提示文件中的注释在消息有效负载中设置示例数据。

首先,选择要摄取的架构。因为 HL7 架构是复合的,所以您可能有许多组件可供选择。我选择了 PRPM_IN306050CA 架构,其定义了医疗保健提供商查询。在您选择了架构以后,您仍然需要在架构内选择根元素。通常情况下,HL7 架构只有单一的根元素可供选择,其具有与交互相同的名称。同样,我选择 PRPM_IN306050CA,如您在 图 1 中所见。

图 1. 选择 XSD 以便摄取到 CAMProcessor 中
选择 XSD 以便摄取到 CAMProcessor 中屏幕截图
选择 XSD 以便摄取到 CAMProcessor 中屏幕截图

现在,我对剩余的选项使用默认设置。为此,单击 OK,一分钟左右以后,您就已经从 XSD 创建了 CAM 模板。您可以单击出现在 Progress 选项卡中的 OK 链接来打开新的模板。此时,我建议您保存未修改的 CAM 模板的一个副本。您完成此操作以后,您可以返回此模板而无需重新摄取原始的 XSD。您可以查看 图 2 中的未修改的 CAM 模板。

图 2. 未修改的 CAM 模板
Structure 选项卡中未修改的 CAM 模板的屏幕截图
Structure 选项卡中未修改的 CAM 模板的屏幕截图

扩展和限制属性和元素

扩展原始架构的下一步是删除作为原始 XSD 计划生成的工件的不必要属性和元素。例如,我想删除 realmCode 元素和 InfraStructureRootAttributes,我不想它们位于我最终的一致性消息中。

要删除 realmCode 元素,请在 Structure 选项卡中选择它,该选项卡显示了 CAM 模板,从上下文敏感的右键菜单选择 Add New Rule。在 Add New Constraint Wizard 中(请参见 图 3),请在 Action 下拉菜单中选择 excludeElement,因为您想排除此元素的每个实例,所以请清除 Parent 复选框,从而只选中 All 复选框。CAMProcessor 使与 XPath 一起工作变得容易。

图 3. 在 CAM 模板中排除 realmCode
在 CAM 模板中排除 realmCode 的屏幕截图
在 CAM 模板中排除 realmCode 的屏幕截图

在提供商查询 CAM 模板中,我删除了除 parameterList 元素以外所有来自 queryByParameter 元素的元素,因为这些元素属于响应消息,其在进行查询以后由应用程序返回。这些不相干的元素出现在查询消息中,因为通用架构组件适用于查询和响应 XSD 架构。排除这些元素类似于排除其他元素和属性。我使用完整的 XPath 和 excludeTree 操作以便完全排除单个树片段。另一方面,诸如 controlActEvent 之类的元素应该删除了可选性,因为总是需要它们。

同样,您可以添加 excludeAttribute 操作以便在文档中排除所有 InfrastructureRootAttributes 属性。显示 %type=II% 的任何元素都是实例标识符— 它们通常是 idvalue 元素。不幸的是,尽管应该使用根和扩展来标识这些元素,但是它们都不存在的,因此应该添加它们。为此,选择相关元素,右键单击,然后选择 Add Child Attribute,添加根和扩展属性(如 图 4 所示)。同时,您可以编辑 idvalue 元素的文本来删除示例文本 (%type=II%),使元素的这两个属性不被填充。

图 4. 向 CAM 模板添加子属性
显示将名为“root”的子属性添加到 CAM 模板的 New Atttribute 对话框的屏幕截图
显示将名为“root”的子属性添加到 CAM 模板的 New Atttribute 对话框的屏幕截图

使用提示文件注入数据

您可以在 CAM 模板的默认值设置中的 Message Transport 和 Control Act Wrapper 部分直接设置元素和属性,因为对于生成的每一个一致性消息来说这些是相同的。此时,您可以生成示例消息,其包含完全填充的 Message Transport 和 Control Act Wrapper 且在参数列表中没有数据。

要生成示例消息,请从 File Export 菜单中选择 Export Examples。我选择不显示任何可选元素和提示文件。图 5 显示了没有选择提示文件的 Generate Examples 表单。

图 5. 探索来自 CAM 模板的示例 HL7 消息
从 CAM 模板导出示例 HL7 消息的屏幕截图
从 CAM 模板导出示例 HL7 消息的屏幕截图

现在剩下的就是创建提示文件以便将一些数据添加到您的查询。要通过 IDE 完成此任务,请右键单击元素或属性并选择 Edit Annotations。将 Value Tab 添加到您的注释中,还要添加一列以管道字符 (|) 分隔并终止的数据元素,如 图 6 所示。在您将注释添加到您的一致性消息中需要数据的任何元素和属性中以后,您可以从 File 菜单导出提示。现在,在您导出示例时,您可以提供此提示文件,且您的数据包括在已导出的消息中。

图 6. 编辑 CAM 注释以便添加示例数据
编辑 CAM 注释以便添加示例数据的屏幕截图
编辑 CAM 注释以便添加示例数据的屏幕截图

处理 HL7 基数和可选性

HL7 v3 一致性强度范围从 Not PermittedOptional(其表示不能出现在消息中的元素和不需要支持的元素),到 RequiredMandatory(其分别表示必须支持但可以在特定实例中没有的元素,以及无论如何都必须支持和存在的元素)。在加拿大,已经采用 Populated 的一致性强度来填补了 RequiredMandatory 之间的空白,其表示必须使用数据 支持的元素(其不能为空)。表 1 显示了您可以在 CAM 模板中用于表示这些元素的 HL7 v3 一致性强度和操作。

表 1. HL7 v3 一致性强度
一致性强度描述CAM 规则
不允许此元素不可出现在消息中。如果应用程序收到它,就会引发错误。excludeElement
可选如果选择了此项,通过应用程序可支持元素。如果不支持,在收到时该元素必须被忽略。excludeElement 或 makeOptional,取决于供应商的选择
必需应用程序必须支持的、但不一定要出现在某条特定消息中的元素。makeOptional
填充填充的元素必须被应用程序支持且必须总是出现,但可以显示为具有 null 风格的空元素(例如,nullFlavor="UNK" 表示所需的信息为未知)。makeMandatory, makeNillable
强制性必须支持强制性元素且必须始终出现一个非空值。makeMandatory

Infoway 采用 Populated 一致性强度,其在加拿大维护 HL7 标准,以便区分形式 [0..N] 和形式 [1..N] 之间的基数,这两者都是 Required。这些元素强于 Required,但弱于 Mandatory。在国际标准中这种区别是内在的,但在泛加拿大标准中却更加明显。

在门诊登记上下文中,上述最后一个一致性强度显得尤为迟钝:无论是否存在诸如地址或中间名之类的元素,性别、姓氏或个人识别码等元素必须始终存在。然而,HL7 消息标准涵盖了门诊登记以外的许多领域,当然,在制药和诊断实验室数据上下文中,由于安全原因而被保留从而缺少的数据、因为未知而缺少的数据以及因为表示错误诊断结果而缺少的数据之间存在巨大差异。HL7 消息需要考虑到所有这些情况,这会导致一致性强度的增加。

使用 OASIS CAM 区分一致性数据

一些围绕 HL7 一致性强度的混淆源于它们在版本架构中实现的方式。单独从 XSD 架构将标识为 Optional 的元素与标识为 Required 的元素区分开可能很难,在这种情况下有必要回到模型交换格式(Model Interchange Format,MIF)文件(也是这个版本的一部分)。因为 OASIS CAM 比 XSD 更昂贵,所以它可以更好地表示这些一致性强度,因为它们可能应用在医疗保健应用程序中,如 表 1 所示。

展望未来

在您使用 OASIS CAM 模板扩展现有 XSD 并创建基于此扩展的一致性消息以后,可以压缩 CAM 模板(其删除所有已排除的项目和树)并从该模板创建新的 XSD。此过程潜在的危险要小于对 XSD 直接进行更改,且应该支持那些想体验 CAM 方法的一些一致性优点但是最后继续使用 W3C XSD 的供应商和实现人员。

然而,对于那些想更充分地利用 CAM 方法的医疗保健供应商和实现人员来说,应该可以直接从 HL7 交互的 MIF 描述中提取信息(还便于存储为 XML 格式)并将这些细节注入到已摄取的 CAM 模板,从而进一步扩展它们。此方法使 HL7 消息标准与通过 NIEM 代表的扩展和限制方法更紧密保持一致,同时 HL7 支持的跨学科方法仍保持正确。

结束语

HL7 v3 是正在发展的标准,其代表着前进的方向。要支持多个版本,有必要重新创建一套一致性消息。通过使用 CAMProcessor 提供的方法,您可以发现花费更少的时间就可以重新创建轮,因此您可以花费更多的时间来专注于您支持的相关消息的业务逻辑。另外,如果您开发早期采用者功能,这类方法可帮助您与移动的目标分开,允许您适应使用正在发展的标准的不可避免的变化。


下载资源


相关主题

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=XML, Industries, Open source
ArticleID=647633
ArticleTitle=使用 OASIS CAM 和 CAMProcessor 扩展 HL7 v3 架构
publish-date=04182011