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

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

传统上,医疗保健实现项目使用 W3C XML 架构定义(XML Schema Definitions,XSDs)来定义 Health Level Seven (HL7) 消息标准。通过使用 OASIS 内容组装机制(Content Assembly Mechanism,CAM)扩展这些架构,可以更快速、更可靠地生成一致性消息。CAMProcessor(jCAM 开源项目的一部分)使此扩展过程更容易,因此可以使您将跟多工作精力放在 HL7 架构下的业务规则上。

Alexander Tarabrin, 顾问 IT 架构师, IBM

Alexander Tarabrin 的照片Alexander Tarabrin 拥有 14 年 IT 从业经验,目前是 IBM(德国)的 IBM Software Group Services 的一名顾问 IT 架构师。Alexander 的工作领域包括数据建模、数据管理、行业模型、以及客户数据集成。



Hermann Voellinger, 高级 IT 架构师, IBM

Hermann Voellinger 是 IBM Software Group Services 的一名高级 IT 架构师。在过去 12 年中,他一直担任 IT 架构师,负责德国的大型数据仓库(DWH)项目。其中前 10 年,他在 German Development 实验室工作,担任文本和数据挖掘解决方案及工具的首席开发人员兼架构师。他的主要技能和关注领域是数据填充过程(ETL)、数据建模概念,以及 DWH 解决方案的策略和架构。



2011 年 4 月 18 日

概述

常用缩略词

  • IDE:集成开发环境
  • ISO:国际标准化组织
  • OASIS:结构化信息标准促进组织
  • W3C:万维网联盟
  • XML:可扩展标记语言

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 中屏幕截图

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

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

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

图 4. 向 CAM 模板添加子属性
显示将名为“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 消息的屏幕截图

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

图 6. 编辑 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 提供的方法,您可以发现花费更少的时间就可以重新创建轮,因此您可以花费更多的时间来专注于您支持的相关消息的业务逻辑。另外,如果您开发早期采用者功能,这类方法可帮助您与移动的目标分开,允许您适应使用正在发展的标准的不可避免的变化。


下载

描述名字大小
扩展和修改后的 CAM 模板downloads.zip28KB

参考资料

学习

  • 认识 CAM:新的 XML 验证技术(Brian M. Carey,developerWorks,2009 年 9 月):在此对 OASIS CAM 以及该方法与其他架构的不同方面的介绍中将语义和结构验证引入到下一级别。
  • 使用 OASIS CAM (CAMV) 的 XML 验证框架(Puneet Kathuria、David Webber、Martin Roberts;developerWorks,2010 年 5 月):探索使用 CAM 模板支持汽车行业中的供应链消息的实际示例。
  • 将 XML 验证引入新的级别(Michael Sorens,devX,2009 年 3 月):阅读介绍了许多 OASIS CAM 功能的优秀系列文章。
  • 从开发人员的角度了解 HL7 版本 3 (Vishnu 的博客,Sun,2007 年 8 月):查看对区分 HL7 版本 2 和版本 3 的一些因素的深入讨论。
  • 基于架构的代码生成(HL7 International):细读描述 HL7 International 对 HL7 v3 版本架构的立场的 wiki 条目,并提供有关架构和基础模型使用的建议。
  • developerWorks XML 专区:在 XML 专区获取提高您的专业技能所需的资源。
  • IBM developerWorks 行业:查看此站点以获得适用于开发人员的所有最新行业专用的技术资源。
  • IBM XML 认证:了解如何才能成为一名 IBM 认证的 XML 和相关技术的开发人员。
  • XML 技术库:访问 developerWorks XML 专区,获得广泛的技术文章和技巧、教程、标准和 IBM 红皮书,并阅读关于 XML 技巧 的更多信息。
  • developerWorks 技术活动网络广播:随时关注这些活动中的技术。
  • developerWorks 播客:收听面向软件开发人员的有趣访谈和讨论。
  • developerWorks 演示中心:包括面向初学者的产品安装和设置演示,以及为经验丰富的开发人员提供的高级功能。

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


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