XQuery技術在中醫(yī)經(jīng)絡學中的應用_第1頁
XQuery技術在中醫(yī)經(jīng)絡學中的應用_第2頁
XQuery技術在中醫(yī)經(jīng)絡學中的應用_第3頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

XQuery技術在中醫(yī)經(jīng)絡學中的應用

摘要:討論了中醫(yī)經(jīng)絡學內在的網(wǎng)絡結構模型,提出一種通過層次模型和關系模型混合存儲經(jīng)絡和穴位的方法,在DB2數(shù)據(jù)庫中采用pureXML數(shù)據(jù)格式實現(xiàn)存儲,并利用XQuery技術對人體經(jīng)絡數(shù)據(jù)在數(shù)據(jù)庫中進行增、刪、改、查,實現(xiàn)了人體經(jīng)絡學習系統(tǒng)。

關鍵詞:人體經(jīng)絡;數(shù)據(jù)庫;pureXML;XQuery

1人體經(jīng)絡學的現(xiàn)狀

經(jīng)絡學是我國傳統(tǒng)中醫(yī)學的一個重要分支,是體會中醫(yī)的實質、快速進入中醫(yī)殿堂的捷徑。經(jīng)絡由經(jīng)和絡組成,經(jīng)是干線,絡是分支,人體有12條主干線,又稱為“十二正經(jīng)”,再加上奇經(jīng)八脈,共有三百六十多個穴位,此外還有無數(shù)的脈絡,經(jīng)絡縱橫交錯。這些經(jīng)絡通往五臟六腑,內臟有任何問題都會在經(jīng)絡相關的穴位上有所反映。有效地掌握和運用經(jīng)絡學知識能夠增強人們的體質,抵御疾病的侵襲。

目前的人體經(jīng)絡學是我國幾千年傳統(tǒng)醫(yī)學的積累,是無數(shù)醫(yī)學家智慧的結晶。雖然其具有一定的科學理論依據(jù),但是大部分內容還是幾千年經(jīng)驗的積累,對于大多數(shù)人,甚至是中醫(yī)學院的學生來說,想熟練掌握經(jīng)絡學的知識都是非常困難的一件事情。

當電子計算機出現(xiàn)之后,其在醫(yī)學領域得到了廣泛的應用。將計算機技術應用于經(jīng)絡學,尤其是制作出一套人體經(jīng)絡學學習系統(tǒng)和查詢系統(tǒng)是一個非常有現(xiàn)實意義的工作,有利于弘揚祖國的傳統(tǒng)文化。但經(jīng)絡本身是一個極其復雜的系統(tǒng),與陰陽五行、四季更迭有密切的關系,不同的經(jīng)絡、不同的穴位能夠治療不同的疾病,同時,與中西醫(yī)的其他分支也有緊密的聯(lián)系。用計算機來存儲各個經(jīng)絡、各個穴位的結構會有很多不同之處,而且不同的用戶可能根據(jù)自己的經(jīng)驗向系統(tǒng)中加入自己的經(jīng)驗,其內容也會經(jīng)常發(fā)生變化。而目前主流的數(shù)據(jù)庫管理系統(tǒng)都是關系模型的,以二維表為基本的存儲結構,這種結構要求存儲結構保持相對穩(wěn)定、一致,并不適合用于存儲經(jīng)絡和穴位。

2pureXML數(shù)據(jù)格式的優(yōu)勢

pureXML技術的出現(xiàn)為經(jīng)絡、穴位的描述提供了有效的手段。pureXML是具有良好格式的XML數(shù)據(jù),其具有層次化的結構,支持DTD和XMLSchema,非常適合存儲異構的數(shù)據(jù)。研發(fā)人體經(jīng)絡學習系統(tǒng)采用XML數(shù)據(jù)格式作為后臺的數(shù)據(jù)存儲方式比關系數(shù)據(jù)庫更加有優(yōu)勢。

目前XML的存儲方式主要有以下幾種:

將XML文檔分解成關系數(shù)據(jù)庫中的一系列表,在需要的時候再把相關字段抽取出來組合成XML文檔。這種方式適用于XML內容非常規(guī)范,并且業(yè)務需求變化不大的系統(tǒng);

以文本方式保存在文件系統(tǒng)中,這種方式需要使用DOM或者SAX方式對XML進行解析,效率不高,而且由于需要程序員自行維護文件系統(tǒng),增加了編程的難度,系統(tǒng)也不夠通用;

把一個XML文件作為一個大文本存儲在關系數(shù)據(jù)庫的一個字段中,很多數(shù)據(jù)庫管理系統(tǒng)都支持存儲最大達到2G的大文本,但是采用這種方式喪失了XML文檔固有的層次特性,無法對其內部進行分析檢索,如果分析其內部結構,又與第二種方式相似,造成效率低下,通用性降低;

把XML文檔存儲在支持XML解析和檢索的數(shù)據(jù)庫中,通過XQuery這種針對XML文檔的專用語言,來檢索XML文檔。這種方式可以保留XML文檔原有的層次結構,而且可以高效地定位到XML文檔中特定的節(jié)點,是最具有潛力的XML存儲方式。

目前IBM、Oracle、微軟等數(shù)據(jù)庫主要研發(fā)廠商都在自己的數(shù)據(jù)庫管理系統(tǒng)最新版本中增加了XML特性,其中IBM的DB2V9及后續(xù)版本是IBM最新推出的“混合型”數(shù)據(jù)庫管理系統(tǒng),除了支持傳統(tǒng)的關系數(shù)據(jù),還支持pureXML這種層次化的數(shù)據(jù),用戶可以在一個表中混合存儲關系數(shù)據(jù)和pureXML數(shù)據(jù),還可以使用SQL和XQuery語言自由地查詢和處理這兩種數(shù)據(jù),是目前對pureXML數(shù)據(jù)支持程度最高、與標準化組織制訂的標準最為接近的數(shù)據(jù)庫管理系統(tǒng)。

3用關系、層次混合模型存儲經(jīng)絡和穴位

人體中12條正經(jīng)、奇經(jīng)八脈、360多個穴位本身的名稱、位置等性質已經(jīng)固定,適合使用關系模型進行存儲,而各個穴位獨特的屬性、點按的手法、適合的病癥等信息存在很大差異,而且存儲結構本身也經(jīng)常發(fā)生變化,適合采用XML格式的層次模型進行存儲。

根據(jù)人體經(jīng)絡學習系統(tǒng)的需求,設計關系模型如下:

表1中所有字段都是固定的,適合于采用關系模型進行存儲。

表2中的最后一個字段cure,保存能夠治療的疾病以及治療的方法,其內容隨著穴位的改變會有很大不同,不適合采用固定結構的字段存儲,所以采用XML結構。

此外還包括藥品表、時令表、治療手法表等其他若干張表格,用于與經(jīng)絡表和穴位表相關聯(lián),因為中醫(yī)各個分支是相輔相成的,不能完全割裂開來。限于篇幅,此處省略其他表格的結構定義。

4使用XQuery操縱pureXML數(shù)據(jù)

首先給出pureXML中幾個基本定義。

定義一:標簽。用戶自定義的、用一對尖括號括起來的內容,稱為標簽,在pureXML中,標簽是成對出現(xiàn)的,結尾標簽與起始標簽同名,但在名字前面加上斜線(/)。

定義二:元素。在pureXML文檔中,一對首尾標簽所包含的完整部分(包括標簽本身)作為一個元素。

定義三:屬性。在pureXML文檔中,每個元素都可以擁有自己的若干屬性,屬性由“屬性名=屬性值”構成,屬性寫在元素名稱所在的標簽中,屬性與元素名稱之間、屬性與屬性之間使用空格進行分隔。

定義四:文本。元素的一對首尾標簽之間所包含的內容稱為文本(不包括標簽)。如果文本沒有內容,則首尾標簽可以簡寫為一個標簽,在標簽名后面加上一條斜線(/)。

下面是穴位表points中cure字段的一個例子:

<穴位id="101">

<名稱>筑賓穴名稱>

<功效>補腎功效>

<含義>“筑”為建筑房屋之意,與“杵”相通,是生活中搗蒜、搗米的工具。“賓”通“臏”,指膝蓋骨。“筑賓”指在膝蓋骨旁邊再搭一個柱子,起強身健骨的作用。含義>

<主治>

<強健>膝蓋發(fā)軟強健>

<神智>抑郁癥,癲癇,恐懼神智>

<解毒>解煙毒、裝修氣味毒、長期服藥體內淤毒,化痰,活血,祛濕解毒>

<尿酸>痛風,結石尿酸>

主治>

<手法>按揉手法>

<相關>太沖穴相關>

穴位>

在這個例子中,所有用尖括號括起來的都是標簽,標簽都是成對出現(xiàn)的。每一對標簽所包含的內容就是一個元素,如“<功效>補腎功效>”,一個元素中可能包含若干子元素。元素的屬性在元素名稱后面,如<筑賓穴id="101">當中的id="101",表示屬性id的值為101。元素除去標簽之外的部分為文本,如“<功效>補腎功效>”中的“補腎”。

XQuery相對于XML,就類似SQL相對于二維關系表,使用XQuery可以實現(xiàn)對XML數(shù)據(jù)中節(jié)點、屬性以及文本的增加、刪除、修改和查詢。下面以人體經(jīng)絡學習系統(tǒng)中幾個實際例子說明XQuery的主要用法:

4.1XML數(shù)據(jù)的查詢

如果要查詢哪個穴位可以治療結石,可以采用如下XQuery語句:

SELECTname,position,

XMLCAST(XMLQUERY('$i/穴位/主治'PASSINGcureas"i")ASCHAR(50))AScure,

XMLCAST(XMLQUERY('$i/穴位/手法'PASSINGcureas"i")ASCHAR(50))ASmethodFROMpoints

WHEREXMLEXISTS('$i/穴位/主治[contains(尿酸,"結石")]'PASSINGcureAS"i");

其中,XMLQUERY函數(shù)是能夠使用路徑表達式或FLWOR表達式來進行XQuery查詢并返回結果的函數(shù),而XMLCAST是將XQuery查詢結果轉換為普通字符數(shù)據(jù)類型的函數(shù),XMLEXISTS函數(shù)能夠判斷一個XML文檔內部是否滿足一定的查詢條件。

4.2XML數(shù)據(jù)的修改

假設要把筑賓穴的尿酸項目改為“<尿酸>痛風,腎結石尿酸>”,可以采用類似如下的XQuery語句:

UPDATEpoints

SETcure=XMLQUERY(

'TRANSFORMCOPY$new:=$iMODIFYDOREPLACEVALUEOF

$new/穴位/主治/尿酸WITH"痛風,腎結石"RETURN$new'PASSINGcureas"i")

WHEREname='筑賓穴'

4.3向XML文檔中插入一個節(jié)點

假設要在“手法”元素后面插入一個新的元素“<適用人群>所有人適用人群>”,可以采用類似如下的XQuery語句:

UPDATEpoints

SETcure=XMLQUERY(

'COPY$new:=$iMODIFYDOINSERT<適用人群>所有人適用人群>

AFTER$new/穴位/手法

RETURN$new'PASSINGcureas"i")

WHEREname='筑賓穴'

4.4從XML文檔中刪除一個節(jié)點

假設要將“<強健>膝蓋發(fā)軟強健>”這個節(jié)點刪除掉,可以采用類似如下的XQuery語句:

UPDATEpoints

SETcure=XMLQUERY(

'COPY$new:=$iMODIFYDO

DELETE$new/穴位/主治/強健

RETURN$new'PASSINGcureas"i")

WHEREname='筑賓穴'

5人體經(jīng)絡學習系統(tǒng)的難點與實現(xiàn)

人體經(jīng)絡學習系統(tǒng)最困難的部分在于對中醫(yī)的理解,只有對經(jīng)絡學以及與之相關的中醫(yī)、中藥、五行、時令等多方面內容深入理解,才能夠建立起全面、高效的模型,并基于此編程實現(xiàn),解決這個困難最好的方法是與醫(yī)院或者中醫(yī)相關部門合作,并反復對項目的需求進行討論。

其次,該系統(tǒng)前臺通過Java實現(xiàn),后臺數(shù)據(jù)庫采用DB29.0以上的版本,DB29.0以上的版本能夠較好地支持XQuery,但前臺的顯示需要提供足夠的靈活性和便捷性,使用戶操作起來既不能很繁瑣,又可以實現(xiàn)很多自己定義的內容,從而體現(xiàn)出XML數(shù)據(jù)格式的優(yōu)勢。實現(xiàn)便捷性的思路是在頁面上大多數(shù)選項提供默認值,使用戶直接點擊“下一步”按鈕即可,實現(xiàn)靈活性的思路是在頁面上提供用戶自定義鏈接或按鈕,允許用戶增加自己命名的選項并賦予相應的值。

再次,要實現(xiàn)Java與pureXML的結合,即要在Java環(huán)境中使用pureXML,這可以通過選擇JavaXQueryAPI(簡稱XQJ)來實現(xiàn),該API可以從DataDirect下載免費的試用版,按照說明文檔進行安裝,然后把XQJJAR添加到類路徑中,接下來就可以編寫Java代碼運行XQuery了。每個程序包含兩個部分:建立/訪問XQuery數(shù)據(jù)源;執(zhí)行XQuery。核心代碼如下:

packageibm.dw.xqj;

importcom.ddtek.xquery3.XQConnection;

importcom.ddtek.xquery3.XQException;

importcom.ddtek.xquery3.xqj.DDXQDataSource;

privateStringfilename;

privateDDXQDataSourcedataSource;

privateXQConnectionconn;

dataSource=newDDXQDataSource();

conn=dataSource.getConnection();

首先建立一個新的數(shù)據(jù)源,該對象的類型是com.ddtek.xquery3.xqj.DDXQDataSource。然后使用數(shù)據(jù)源得到新的com.ddtek.xquery3.XQConnection對象。該對象可以接受查詢字符串并執(zhí)行。運行查詢需要經(jīng)過以下步驟:

(1)從XQConnection創(chuàng)建一個XQExpression對象。

(2)使用XQExpression對象的bindXXX()方法把變量綁定到查詢。

(3)執(zhí)行查詢,結果保存到XQSequence對象中。

以下是查詢代碼:

StringxmlFilename=args[0];

XQueryTestertester=newXQueryTester(xmlFilename);

tester.init();

finalStringsep=System.getProperty("line.separator");

StringqueryString=包含XQuery的字符串;

XQExpressionexpression=conn.createExpression();

expression.bindString(newQName("docName"),filename,conn.createAtomicType

(XQItemType.XQBASETYPE_STRING));

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論