程春雷,潘澤強
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.