程春雷,潘泽强
CHENG Chun-lei,PAN Ze-qiang
(江西中医学院 计算机学院,南昌 330004)
建立和完善中医证—病—方—药之间的关联,改善中医药信息的传播和交流方式是中医药信息化、现代化过程中的重要研究问题。中医学理论多以病因、病位、病机为实质基本点,以六经结合八纲为抽象大纲,以脏腑经络体窍结合卫气营血津液精神为具体细目,汇合病因辨证等内容,实现中医临床和教学上的辨证论治。然而中医方药知识纷繁复杂,难以记忆,导致中医临床和教学在辨证分类与方剂选用之间普遍存在脱节情况。近年来中医药信息交流、传播的方式和效率,也在很大程度上制约了中医药体系的发展速度和水平。
国家“重大新药创制”专项子课题“重要新型给药系统技术平台”的重要研究分支就是要分析方剂要素、中医证—病—方—药的关系等问题,从海量的证方药文本中,进行关联、对应、聚类等分析,提取潜在可用的中医诊治知识和模式。本系统建立和完善了方剂要素及其关联的基础数据库,并在Android嵌入设备上设计实现了中医方药信息系统[1,2]。系统随身携带、随时获取等移动特点改善了中医药知识的传播和交流方式,使得中医研究人员获取方药专业知识变得简单、高效;为中医临床提供更加丰富、便捷的治疗方案参考;国内外的中医学习人员可以随时随地从嵌入设备上获取和巩固中医疾病诊疗知识、方剂知识和药物知识,改善学习方式和学习效果;经验丰富的中医师可以根据开放系统的特点,将个人的经验扩充到系统中,形成可扩充的辅助治疗系统,为中医药知识的积累和交流提供了一个便捷的平台,为后续的文本数据挖掘提供了良好的信息基础。
1.1 系统体系结构框架
整个系统采用B/S和C/S混合的体系结构[3],子系统间通过同步模块实现数据的交流和共享。系统的总体结构如图1所示。
图1 系统总体结构图
1.2 功能模块设计
整个平台分为“嵌入式中医方药管理子系统”、“中医师桌面开方子系统”二大模块。
嵌入方药子系统是系统的核心,囊括了处方、方剂、药物、治法、病因、病机、病位等实体的基本数据和关联信息,实现了中医方药文本的多角度、关联式、柔性检索,以及移动数据的同步等功能。嵌入式方药子系统实现过程中,充分考虑移动终端资源的相对稀缺性和移动用户的操作习惯,避免频繁输入和切换,尽量一键链接式操作,为移动用户提供一个实用、便捷的操作流程;桌面开方子系统,方便中医师临床查方、辅助开方,对典型的处方进行有效管理;中心数据库对整个平台的中医药数据进行统一管理。
1.3 中医方药数据库设计
历代医家根据自己的临床经验总结了不少疗效显著的方剂,使中医的方剂日益繁多,中医方剂数量已逾万种[4,5]。同时中医临床疾病的分类缺乏规范,证候和方药种类繁多、对应关系复杂,难记难学。面对如此巨量、复杂的信息资源,光靠人脑记忆和分析已显力不从心。平台建立了一个中心中医药信息数据库,该数据库以方剂、方药、证候、处方等实体的基本信息为基础,以治法、病因、病机、方剂之间的关联信息为核心,以方剂信息为组织主线,实现证、方、药、病正确关联组织。
2.1 硬件平台
系统硬件平台采用主频528MHz的Qualcomm MSM7201处 理器,包括192 MB内存,256 MB Flash存储器;配备分辨率为480×320像素的TFT-LCD电容式触摸屏。外设数据连接包括Bluetooth、 WiFi、ExtUSB、WCDMA、GPS等方式。在程序调试阶段,硬件平台采用在PC机上建立开发环境模拟进行。
2.2 软件平台
本系统中的“嵌入式中医方药管理子系统”是基于Android平台,采用面向对象的Java语言[6],遵从SyncML移动同步协议开发完成的。Android平台内核是经过精心剪裁和调优的Linux Kernel,对于多元嵌入设备的硬件提供了优秀的支持;提供了一个全新的Java虚拟机Dalvik,能够提供优异的执行性能,使大部分J2SE核心类库都已经可以直接运行;提供了大量立即可用的类库和应用软件,为开发出桌面应用复杂度的手机软件提供了可能。Android软件栈层次如图2所示:
图2 Android软件栈层次
2.3 方药数据的存储和管理
在移动终端设备上,选用嵌入式数据库系统SQLite1.3来保存一个移动数据副本[7],以保证系统在移动终端上的常态离线工作。嵌入式数据库SQLite是一个是用C语言编写的开源嵌入式数据库引擎。它完全独立的,不具有外部依赖性,支持多数SQ192 标准,可以在所有主要的操作系统上运行。
2.4 嵌入式数据库数据同步
移动数据副本和中心数据库之间,不定时进行同步更新,保证数据一致性和扩展性。本系统采用SyncML[8]协议,在SyncML的开源java实现funambol项目的框架上进行二次开发[9],以实现移动终端SQLite1.3数据库与中心数据库之间的数据同步[10]。数据同步作为嵌入式数据库系统最重要的一个功能特点,主要涉及的关键问题包括:ID表示的维护,修改元信息的维护,修改信息的交换,冲突的检测,冲突的消解。本系统实现了SyncML协议里面定义的双向同步,即实现了子系统异构数据库之间的更新同步。同步模块架构如图3所示。
2.5 基于Android的嵌入设备的程序开发
在Android平台上开发的程序有个重要特征,就是Android程序可以开放某个功能元件和程序数据,其他Android程序可以直接调用该元件功能,而不需要把元件代码重写或链接到本程序,这就要求从Android程序任何部分都可启动JAVA对象的实例化,该特征区别于其他平台的应用程序一般有个入口函数。所以Android程序包括四种可以单独实例化和运行的组件:Activities,Services,Broadcast receivers,Content providers:
图3 同步模块架构
以下是以方剂模块为例,介绍Android的开发过程中的关键技术:
1)方剂模块的界面布局。布局设计在Android平台中有两种实现方式:一是在运行时,通过程式代码建立动态布局;二是预先建立静态的XML布局文件,编译成View资源,在运行时调用解析显示。一般来说,第二种方式灵活性更好,修改方便、直观。
2)布局文件的显示。通过程式代码调用编译后的资源文件,解析并显示可视化组件布局,系统的Activity子类RecipeStudy实现了方剂学习界面的显示,它的初始化函数部分代码如下:
3)定义数据访问接口。本系统部署在Android移动设备,在嵌入式数据库系统SQLite的支持下实现历史、实时中医药信息的查询,更新,以保证移动数据副本与中心服务器数据的一致性。系统的recipeDB数据库的访问接口类DataProvider部分代码如下所示:
@Override public Cursor query(Uri uri,String[]projection,String selection,String[]selectionArgs,String sortOrder){
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor c=db.rawQuery(selection,null);
return c;}
4)访问移动数据库。通过程式代码调用自定义的移动数据库接口,检索、组织特定的类别的方剂信息。中医方药种类数量和关联的信息的复杂程度已远远超过人脑的能力范围,本系统从脏腑、六经、三焦、卫气营血、外因、内因、不内外因、治法等几十个角度对方剂进行分门别类,交叉学习,方便用户理解证候、病因、治法、方药、方剂之间的复杂关系。系统的Activity子类ListRecipe用以实现数据的访问,其操作接口的部分代码如下:
Cursor
cur=getContentResolver().query(getIntent().getData(),PROJECTION,sql,null,null);
5)方剂信息的柔性检索。通过Android提供的Adapter元件,把可视化组件绑定到数据源,显示柔性匹配的方剂信息,并把组件注册到监视器,实现系统的交互、关联学习。系统的Activity子类ListRecipe实现数据源的绑定和显示,其部分代码如下:
SimpleAdapter adapter = new SimpleAdapter(this,fillMaps,R.layout.grid_item,from,to);
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
2.6 嵌入设备的程序部署
在部署Android应用程序到嵌入设备之前,开发人员必须对apk安装文件进行数字签名,在初次部署或后续升级时都要验证数字签名时效性。部署嵌入式应用主要包括以下三个步骤:
1)首先使用keytool工具生成某一时效(365天)的密匙文件:
$keytool –genkey –v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -validity 365
2)使用上面的key.Keystore文件对apk文件数字签名:
$jarsigner –verbose -keystore my-release-key.keystore my_application.apk my_signed_application.apk
3)部署签名后的apk文件到设备,在运行安装apk文件时,首先判断apk的数字签名有无过期,如没有过期,部署完成,之后运行过程中不再进行数字签名的验证。
本文描述了一种基于嵌入式技术的中医方药信息系统的关键技术和实现,通过对方药数据库中的证候、病因、病位、治法、方药、方剂等信息实体的关系的研究,建立和完善了证候和方药之间的关系,在开放的Android平台上设计实现了中医方药嵌入式系统。通过SyncML协议实现了桌面开方系统和Android移动终端的数据同步、更新和扩充。系统部署在移动电话终端便于随身携带,改善了中医方药系统的知识传播途径。为国内外的中医学习者提供方便快捷的好工具,为研究人员获取专业的方药知识提供了好帮手,经验丰富的中医师可以根据开放系统的特点,将个人的临床经验不断扩充到中心数据库,形成了开放的方药信息平台。
[1]Mark L.Murphy.The Busy Coder’s Guide to Android Development[M].United States of America:Commons Ware,LLC.,2008.
[2]Po Qi-bai,Chen Zhong-rong.嵌入式系统数据来集和发布的构建[J].计算机工程,2007,33(19):270-272.
[3]Zhang You-sheng.软件体系结构.2版[M].北京:清华大学出版社,2006.