hl7 v3 java对接相关学习

注(文末有相关参考文章链接)
一、现在 HL7 的最新版本是 V3。 在 HLV3 以前, HL7 的开发方法被称作 MDF(Message Development Framework, 消息开发框架) , 是基于消息开发的。 它使信息可以互传。 HL7 的目的是实现互通, 互通的意思不仅能够互传, 还可以互用, 为了实现这个目标, HL7 开发了 V3, 加入了 RIM, Data Type, Vocabulary 等内容, 它的开发方法被称作HDF(HL7 Development Framework, HL7 开发框架) , 但 MDF 仍然是 HDF 的核心基础。在 HL7 V3 中信息的互通是通过语法(Syntactic) 和语义(semantic) 来实现的, 语法是数据交换或消息传输的标准, 它是面向结构的, 使数据能够交换(我们可以把语法的统一理解为可以将数据从系统 A 移到系统 B 的技术), 这点 V2 已经做到, 但是 V3 为了实 现语义对它加以改进; 语义是数据或文档格式的标准, 它是面向含义的, 使交换的数据能 够被理解(我们可以把语义的统一理解为系统 A 和系统 B 可以相互理解并一起工作的技术)具体来说, V3 则通过下面的内容实现互通:
(1) 语义互通:
• 通用信息模型(Common Information Model)
• 数据类型(Data Type)
• 词汇集(Vocabulary)
(2) 语法互通:
• 消息结构(Messaging)
HL7 V3 通过信息模型来解决问题(和数据模型不同, 信息模型是抽象的, 面向业务的,
与实施无关, 而数据模型是具体的, 面向结构的, 是针对实施的, 所以信息模型不能直接映射到数据模型) 。 我们先用通用信息模型、 数据类型和词汇集生成具体的业务模型, 业务数据在这个模型中得以规范, 这就实现了前面说到的语义的互通。 再用通过遵循标准的消息结构传输这些数据, 从而实现了前面说到的语法的互通。HL V3 在消息(Messaging) 结构上也于 V2 大不一样, V2 的消息结构是分段的, 而 V3的消息结构遵循 XML 标准。 由于 XML 不仅是一种标识语言, 更是一种可以定义描述对象结构的元语言, 这就使得系统间交换的信息可以互相“理解” 。所以, HL7 V3 与之前的版本有着质的区别, 它越来越强调宏观的抽象模型(提供了一个高层面的框架结构) , 同时还制定了越来越具有复用价值的模型和制品, 人们可以基于它开发其他具体的业务模型。

二、HL7V3开发过程
HL7V3 的开发方法如下图所示, 它有三个阶段:
• 1)用例建模:用例模型是其他模型的基础, 它提供了所需的业务, 帮助理解对消息的需求。
• 2)交互建模: 交互模型详细说明了业务交互而产生的通信内容。
• 3)信息建模: HL7 最终通过信息模型来解决问题。 RIM 的子集被用来建立消息信息模型(RMIM) , 它包括对应于一个消息或一组消息的数据, 这些消息呈现为层级消息描述 HMD(Hierarchical Message Description) , HMD 提供一个表格式的表示, 显示每个消息包括的属性, 定义每个触发事件的消息成分的出现或缺失。 这个过程就是 RMIM 的本地化过程,L7 在信息模型中定义了许多通用的元消息类型 CMET( Common Message Element Type) , 在建模时可以直接拿来使用, 不必做任何修改。

三、xml技术和xml模式
1)hl7消息的结构
在这里插入图片描述
V3 消息是一个结构化的XML文件,其结构分为相互嵌套的三层结构:传输层、控制行为层和消息体。消息体封装在控制行为包中,包含了所需交换的业务数据。控制行为包又被封装在消息的传输包中,包括一些触发事件、位置、主题等信息。传输包作为消息的最外层,用来决定信息的传输和确认方式,它包含了消息的发送方(sender)、接收方(receiver)、消息的确认方式(acceptAckCode)等信息。
2)hl7消息的构建(构建工具暂不研究)
在这里插入图片描述

四、xml的解析和封装
Xml的解析和封装此处用的是java方法,将ml文件转化为xsd文件,然后用xsd文件生成JavaBean文件,通过JavaBean对数据进行存取,xsd文件用于xml的校验。
1) xml解析:
将xml转换成JavaBean再提取数据
2) xml封装
将JavaBean转换成xml再对xml进行校验

五、Java实际到xml解析和封装
应用java的JAXB(Java Architecture for XML Binding) 是一个业界的标准,可以进行JavaBean和xml之间进行转换。
1) xml解析代码

JAXBContext jaxbContext = JAXBContext.newInstance( new PRPAIN201311UV02().getClass());
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
PRPAIN201311UV02 script = (PRPAIN201311UV02) unmarshaller.unmarshal(file);

其中PRPAIN201311UV02()为根节点生成的Javabean,file为xml,script为获取xml的所有值的对象。
2) xml封装代码

public static String convertToXml(Object obj, String encoding) {
		String result = null;
		try {
			JAXBContext context = JAXBContext.newInstance(obj.getClass());
			Marshaller marshaller = context.createMarshaller();
			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
			marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
			marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);
// 是否省略xml头信息
			StringWriter writer = new StringWriter();
			marshaller.marshal(obj, writer);
			result = writer.toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
封装xml的过程就是解析xml的逆过程。

3)需要添加或删除字段时,修改xml和对应的Javabean文件即可。

xml转换成xsd文件,生成JavaBeans的链接

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值