程春雷,潘澤強
CHENG Chun-lei,PAN Ze-qiang
(江西中醫(yī)學院 計算機學院,南昌 330004)
建立和完善中醫(yī)證—病—方—藥之間的關聯(lián),改善中醫(yī)藥信息的傳播和交流方式是中醫(yī)藥信息化、現(xiàn)代化過程中的重要研究問題。中醫(yī)學理論多以病因、病位、病機為實質基本點,以六經(jīng)結合八綱為抽象大綱,以臟腑經(jīng)絡體竅結合衛(wèi)氣營血津液精神為具體細目,匯合病因辨證等內容,實現(xiàn)中醫(yī)臨床和教學上的辨證論治。然而中醫(yī)方藥知識紛繁復雜,難以記憶,導致中醫(yī)臨床和教學在辨證分類與方劑選用之間普遍存在脫節(jié)情況。近年來中醫(yī)藥信息交流、傳播的方式和效率,也在很大程度上制約了中醫(yī)藥體系的發(fā)展速度和水平。
國家“重大新藥創(chuàng)制”專項子課題“重要新型給藥系統(tǒng)技術平臺”的重要研究分支就是要分析方劑要素、中醫(yī)證—病—方—藥的關系等問題,從海量的證方藥文本中,進行關聯(lián)、對應、聚類等分析,提取潛在可用的中醫(yī)診治知識和模式。本系統(tǒng)建立和完善了方劑要素及其關聯(lián)的基礎數(shù)據(jù)庫,并在Android嵌入設備上設計實現(xiàn)了中醫(yī)方藥信息系統(tǒng)[1,2]。系統(tǒng)隨身攜帶、隨時獲取等移動特點改善了中醫(yī)藥知識的傳播和交流方式,使得中醫(yī)研究人員獲取方藥專業(yè)知識變得簡單、高效;為中醫(yī)臨床提供更加豐富、便捷的治療方案參考;國內外的中醫(yī)學習人員可以隨時隨地從嵌入設備上獲取和鞏固中醫(yī)疾病診療知識、方劑知識和藥物知識,改善學習方式和學習效果;經(jīng)驗豐富的中醫(yī)師可以根據(jù)開放系統(tǒng)的特點,將個人的經(jīng)驗擴充到系統(tǒng)中,形成可擴充的輔助治療系統(tǒng),為中醫(yī)藥知識的積累和交流提供了一個便捷的平臺,為后續(xù)的文本數(shù)據(jù)挖掘提供了良好的信息基礎。
1.1 系統(tǒng)體系結構框架
整個系統(tǒng)采用B/S和C/S混合的體系結構[3],子系統(tǒng)間通過同步模塊實現(xiàn)數(shù)據(jù)的交流和共享。系統(tǒng)的總體結構如圖1所示。
圖1 系統(tǒng)總體結構圖
1.2 功能模塊設計
整個平臺分為“嵌入式中醫(yī)方藥管理子系統(tǒng)”、“中醫(yī)師桌面開方子系統(tǒng)”二大模塊。
嵌入方藥子系統(tǒng)是系統(tǒng)的核心,囊括了處方、方劑、藥物、治法、病因、病機、病位等實體的基本數(shù)據(jù)和關聯(lián)信息,實現(xiàn)了中醫(yī)方藥文本的多角度、關聯(lián)式、柔性檢索,以及移動數(shù)據(jù)的同步等功能。嵌入式方藥子系統(tǒng)實現(xiàn)過程中,充分考慮移動終端資源的相對稀缺性和移動用戶的操作習慣,避免頻繁輸入和切換,盡量一鍵鏈接式操作,為移動用戶提供一個實用、便捷的操作流程;桌面開方子系統(tǒng),方便中醫(yī)師臨床查方、輔助開方,對典型的處方進行有效管理;中心數(shù)據(jù)庫對整個平臺的中醫(yī)藥數(shù)據(jù)進行統(tǒng)一管理。
1.3 中醫(yī)方藥數(shù)據(jù)庫設計
歷代醫(yī)家根據(jù)自己的臨床經(jīng)驗總結了不少療效顯著的方劑,使中醫(yī)的方劑日益繁多,中醫(yī)方劑數(shù)量已逾萬種[4,5]。同時中醫(yī)臨床疾病的分類缺乏規(guī)范,證候和方藥種類繁多、對應關系復雜,難記難學。面對如此巨量、復雜的信息資源,光靠人腦記憶和分析已顯力不從心。平臺建立了一個中心中醫(yī)藥信息數(shù)據(jù)庫,該數(shù)據(jù)庫以方劑、方藥、證候、處方等實體的基本信息為基礎,以治法、病因、病機、方劑之間的關聯(lián)信息為核心,以方劑信息為組織主線,實現(xiàn)證、方、藥、病正確關聯(lián)組織。
2.1 硬件平臺
系統(tǒng)硬件平臺采用主頻528MHz的Qualcomm MSM7201處 理器,包括192 MB內存,256 MB Flash存儲器;配備分辨率為480×320像素的TFT-LCD電容式觸摸屏。外設數(shù)據(jù)連接包括Bluetooth、 WiFi、ExtUSB、WCDMA、GPS等方式。在程序調試階段,硬件平臺采用在PC機上建立開發(fā)環(huán)境模擬進行。
2.2 軟件平臺
本系統(tǒng)中的“嵌入式中醫(yī)方藥管理子系統(tǒng)”是基于Android平臺,采用面向對象的Java語言[6],遵從SyncML移動同步協(xié)議開發(fā)完成的。Android平臺內核是經(jīng)過精心剪裁和調優(yōu)的Linux Kernel,對于多元嵌入設備的硬件提供了優(yōu)秀的支持;提供了一個全新的Java虛擬機Dalvik,能夠提供優(yōu)異的執(zhí)行性能,使大部分J2SE核心類庫都已經(jīng)可以直接運行;提供了大量立即可用的類庫和應用軟件,為開發(fā)出桌面應用復雜度的手機軟件提供了可能。Android軟件棧層次如圖2所示:
圖2 Android軟件棧層次
2.3 方藥數(shù)據(jù)的存儲和管理
在移動終端設備上,選用嵌入式數(shù)據(jù)庫系統(tǒng)SQLite1.3來保存一個移動數(shù)據(jù)副本[7],以保證系統(tǒng)在移動終端上的常態(tài)離線工作。嵌入式數(shù)據(jù)庫SQLite是一個是用C語言編寫的開源嵌入式數(shù)據(jù)庫引擎。它完全獨立的,不具有外部依賴性,支持多數(shù)SQ192 標準,可以在所有主要的操作系統(tǒng)上運行。
2.4 嵌入式數(shù)據(jù)庫數(shù)據(jù)同步
移動數(shù)據(jù)副本和中心數(shù)據(jù)庫之間,不定時進行同步更新,保證數(shù)據(jù)一致性和擴展性。本系統(tǒng)采用SyncML[8]協(xié)議,在SyncML的開源java實現(xiàn)funambol項目的框架上進行二次開發(fā)[9],以實現(xiàn)移動終端SQLite1.3數(shù)據(jù)庫與中心數(shù)據(jù)庫之間的數(shù)據(jù)同步[10]。數(shù)據(jù)同步作為嵌入式數(shù)據(jù)庫系統(tǒng)最重要的一個功能特點,主要涉及的關鍵問題包括:ID表示的維護,修改元信息的維護,修改信息的交換,沖突的檢測,沖突的消解。本系統(tǒng)實現(xiàn)了SyncML協(xié)議里面定義的雙向同步,即實現(xiàn)了子系統(tǒng)異構數(shù)據(jù)庫之間的更新同步。同步模塊架構如圖3所示。
2.5 基于Android的嵌入設備的程序開發(fā)
在Android平臺上開發(fā)的程序有個重要特征,就是Android程序可以開放某個功能元件和程序數(shù)據(jù),其他Android程序可以直接調用該元件功能,而不需要把元件代碼重寫或鏈接到本程序,這就要求從Android程序任何部分都可啟動JAVA對象的實例化,該特征區(qū)別于其他平臺的應用程序一般有個入口函數(shù)。所以Android程序包括四種可以單獨實例化和運行的組件:Activities,Services,Broadcast receivers,Content providers:
圖3 同步模塊架構
以下是以方劑模塊為例,介紹Android的開發(fā)過程中的關鍵技術:
1)方劑模塊的界面布局。布局設計在Android平臺中有兩種實現(xiàn)方式:一是在運行時,通過程式代碼建立動態(tài)布局;二是預先建立靜態(tài)的XML布局文件,編譯成View資源,在運行時調用解析顯示。一般來說,第二種方式靈活性更好,修改方便、直觀。
2)布局文件的顯示。通過程式代碼調用編譯后的資源文件,解析并顯示可視化組件布局,系統(tǒng)的Activity子類RecipeStudy實現(xiàn)了方劑學習界面的顯示,它的初始化函數(shù)部分代碼如下:
3)定義數(shù)據(jù)訪問接口。本系統(tǒng)部署在Android移動設備,在嵌入式數(shù)據(jù)庫系統(tǒng)SQLite的支持下實現(xiàn)歷史、實時中醫(yī)藥信息的查詢,更新,以保證移動數(shù)據(jù)副本與中心服務器數(shù)據(jù)的一致性。系統(tǒng)的recipeDB數(shù)據(jù)庫的訪問接口類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)訪問移動數(shù)據(jù)庫。通過程式代碼調用自定義的移動數(shù)據(jù)庫接口,檢索、組織特定的類別的方劑信息。中醫(yī)方藥種類數(shù)量和關聯(lián)的信息的復雜程度已遠遠超過人腦的能力范圍,本系統(tǒng)從臟腑、六經(jīng)、三焦、衛(wèi)氣營血、外因、內因、不內外因、治法等幾十個角度對方劑進行分門別類,交叉學習,方便用戶理解證候、病因、治法、方藥、方劑之間的復雜關系。系統(tǒng)的Activity子類ListRecipe用以實現(xiàn)數(shù)據(jù)的訪問,其操作接口的部分代碼如下:
Cursor
cur=getContentResolver().query(getIntent().getData(),PROJECTION,sql,null,null);
5)方劑信息的柔性檢索。通過Android提供的Adapter元件,把可視化組件綁定到數(shù)據(jù)源,顯示柔性匹配的方劑信息,并把組件注冊到監(jiān)視器,實現(xiàn)系統(tǒng)的交互、關聯(lián)學習。系統(tǒng)的Activity子類ListRecipe實現(xiàn)數(shù)據(jù)源的綁定和顯示,其部分代碼如下:
SimpleAdapter adapter = new SimpleAdapter(this,fillMaps,R.layout.grid_item,from,to);
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
2.6 嵌入設備的程序部署
在部署Android應用程序到嵌入設備之前,開發(fā)人員必須對apk安裝文件進行數(shù)字簽名,在初次部署或后續(xù)升級時都要驗證數(shù)字簽名時效性。部署嵌入式應用主要包括以下三個步驟:
1)首先使用keytool工具生成某一時效(365天)的密匙文件:
$keytool –genkey –v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -validity 365
2)使用上面的key.Keystore文件對apk文件數(shù)字簽名:
$jarsigner –verbose -keystore my-release-key.keystore my_application.apk my_signed_application.apk
3)部署簽名后的apk文件到設備,在運行安裝apk文件時,首先判斷apk的數(shù)字簽名有無過期,如沒有過期,部署完成,之后運行過程中不再進行數(shù)字簽名的驗證。
本文描述了一種基于嵌入式技術的中醫(yī)方藥信息系統(tǒng)的關鍵技術和實現(xiàn),通過對方藥數(shù)據(jù)庫中的證候、病因、病位、治法、方藥、方劑等信息實體的關系的研究,建立和完善了證候和方藥之間的關系,在開放的Android平臺上設計實現(xiàn)了中醫(yī)方藥嵌入式系統(tǒng)。通過SyncML協(xié)議實現(xiàn)了桌面開方系統(tǒng)和Android移動終端的數(shù)據(jù)同步、更新和擴充。系統(tǒng)部署在移動電話終端便于隨身攜帶,改善了中醫(yī)方藥系統(tǒng)的知識傳播途徑。為國內外的中醫(yī)學習者提供方便快捷的好工具,為研究人員獲取專業(yè)的方藥知識提供了好幫手,經(jīng)驗豐富的中醫(yī)師可以根據(jù)開放系統(tǒng)的特點,將個人的臨床經(jīng)驗不斷擴充到中心數(shù)據(jù)庫,形成了開放的方藥信息平臺。
[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.嵌入式系統(tǒng)數(shù)據(jù)來集和發(fā)布的構建[J].計算機工程,2007,33(19):270-272.
[3]Zhang You-sheng.軟件體系結構.2版[M].北京:清華大學出版社,2006.