XQuery技术在中医经络学中的应用_第1页
XQuery技术在中医经络学中的应用_第2页
XQuery技术在中医经络学中的应用_第3页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XQuery技术在中医经络学中的应用

摘要:讨论了中医经络学内在的网络结构模型,提出一种通过层次模型和关系模型混合存储经络和穴位的方法,在DB2数据库中采用pureXML数据格式实现存储,并利用XQuery技术对人体经络数据在数据库中进行增、删、改、查,实现了人体经络学习系统。

关键词:人体经络;数据库;pureXML;XQuery

1人体经络学的现状

经络学是我国传统中医学的一个重要分支,是体会中医的实质、快速进入中医殿堂的捷径。经络由经和络组成,经是干线,络是分支,人体有12条主干线,又称为“十二正经”,再加上奇经八脉,共有三百六十多个穴位,此外还有无数的脉络,经络纵横交错。这些经络通往五脏六腑,内脏有任何问题都会在经络相关的穴位上有所反映。有效地掌握和运用经络学知识能够增强人们的体质,抵御疾病的侵袭。

目前的人体经络学是我国几千年传统医学的积累,是无数医学家智慧的结晶。虽然其具有一定的科学理论依据,但是大部分内容还是几千年经验的积累,对于大多数人,甚至是中医学院的学生来说,想熟练掌握经络学的知识都是非常困难的一件事情。

当电子计算机出现之后,其在医学领域得到了广泛的应用。将计算机技术应用于经络学,尤其是制作出一套人体经络学学习系统和查询系统是一个非常有现实意义的工作,有利于弘扬祖国的传统文化。但经络本身是一个极其复杂的系统,与阴阳五行、四季更迭有密切的关系,不同的经络、不同的穴位能够治疗不同的疾病,同时,与中西医的其他分支也有紧密的联系。用计算机来存储各个经络、各个穴位的结构会有很多不同之处,而且不同的用户可能根据自己的经验向系统中加入自己的经验,其内容也会经常发生变化。而目前主流的数据库管理系统都是关系模型的,以二维表为基本的存储结构,这种结构要求存储结构保持相对稳定、一致,并不适合用于存储经络和穴位。

2pureXML数据格式的优势

pureXML技术的出现为经络、穴位的描述提供了有效的手段。pureXML是具有良好格式的XML数据,其具有层次化的结构,支持DTD和XMLSchema,非常适合存储异构的数据。研发人体经络学习系统采用XML数据格式作为后台的数据存储方式比关系数据库更加有优势。

目前XML的存储方式主要有以下几种:

将XML文档分解成关系数据库中的一系列表,在需要的时候再把相关字段抽取出来组合成XML文档。这种方式适用于XML内容非常规范,并且业务需求变化不大的系统;

以文本方式保存在文件系统中,这种方式需要使用DOM或者SAX方式对XML进行解析,效率不高,而且由于需要程序员自行维护文件系统,增加了编程的难度,系统也不够通用;

把一个XML文件作为一个大文本存储在关系数据库的一个字段中,很多数据库管理系统都支持存储最大达到2G的大文本,但是采用这种方式丧失了XML文档固有的层次特性,无法对其内部进行分析检索,如果分析其内部结构,又与第二种方式相似,造成效率低下,通用性降低;

把XML文档存储在支持XML解析和检索的数据库中,通过XQuery这种针对XML文档的专用语言,来检索XML文档。这种方式可以保留XML文档原有的层次结构,而且可以高效地定位到XML文档中特定的节点,是最具有潜力的XML存储方式。

目前IBM、Oracle、微软等数据库主要研发厂商都在自己的数据库管理系统最新版本中增加了XML特性,其中IBM的DB2V9及后续版本是IBM最新推出的“混合型”数据库管理系统,除了支持传统的关系数据,还支持pureXML这种层次化的数据,用户可以在一个表中混合存储关系数据和pureXML数据,还可以使用SQL和XQuery语言自由地查询和处理这两种数据,是目前对pureXML数据支持程度最高、与标准化组织制订的标准最为接近的数据库管理系统。

3用关系、层次混合模型存储经络和穴位

人体中12条正经、奇经八脉、360多个穴位本身的名称、位置等性质已经固定,适合使用关系模型进行存储,而各个穴位独特的属性、点按的手法、适合的病症等信息存在很大差异,而且存储结构本身也经常发生变化,适合采用XML格式的层次模型进行存储。

根据人体经络学习系统的需求,设计关系模型如下:

表1中所有字段都是固定的,适合于采用关系模型进行存储。

表2中的最后一个字段cure,保存能够治疗的疾病以及治疗的方法,其内容随着穴位的改变会有很大不同,不适合采用固定结构的字段存储,所以采用XML结构。

此外还包括药品表、时令表、治疗手法表等其他若干张表格,用于与经络表和穴位表相关联,因为中医各个分支是相辅相成的,不能完全割裂开来。限于篇幅,此处省略其他表格的结构定义。

4使用XQuery操纵pureXML数据

首先给出pureXML中几个基本定义。

定义一:标签。用户自定义的、用一对尖括号括起来的内容,称为标签,在pureXML中,标签是成对出现的,结尾标签与起始标签同名,但在名字前面加上斜线(/)。

定义二:元素。在pureXML文档中,一对首尾标签所包含的完整部分(包括标签本身)作为一个元素。

定义三:属性。在pureXML文档中,每个元素都可以拥有自己的若干属性,属性由“属性名=属性值”构成,属性写在元素名称所在的标签中,属性与元素名称之间、属性与属性之间使用空格进行分隔。

定义四:文本。元素的一对首尾标签之间所包含的内容称为文本(不包括标签)。如果文本没有内容,则首尾标签可以简写为一个标签,在标签名后面加上一条斜线(/)。

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

<穴位id="101">

<名称>筑宾穴名称>

<功效>补肾功效>

<含义>“筑”为建筑房屋之意,与“杵”相通,是生活中捣蒜、捣米的工具。“宾”通“膑”,指膝盖骨。“筑宾”指在膝盖骨旁边再搭一个柱子,起强身健骨的作用。含义>

<主治>

<强健>膝盖发软强健>

<神智>抑郁症,癫痫,恐惧神智>

<解毒>解烟毒、装修气味毒、长期服药体内淤毒,化痰,活血,祛湿解毒>

<尿酸>痛风,结石尿酸>

主治>

<手法>按揉手法>

<相关>太冲穴相关>

穴位>

在这个例子中,所有用尖括号括起来的都是标签,标签都是成对出现的。每一对标签所包含的内容就是一个元素,如“<功效>补肾功效>”,一个元素中可能包含若干子元素。元素的属性在元素名称后面,如<筑宾穴id="101">当中的id="101",表示属性id的值为101。元素除去标签之外的部分为文本,如“<功效>补肾功效>”中的“补肾”。

XQuery相对于XML,就类似SQL相对于二维关系表,使用XQuery可以实现对XML数据中节点、属性以及文本的增加、删除、修改和查询。下面以人体经络学习系统中几个实际例子说明XQuery的主要用法:

4.1XML数据的查询

如果要查询哪个穴位可以治疗结石,可以采用如下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函数是能够使用路径表达式或FLWOR表达式来进行XQuery查询并返回结果的函数,而XMLCAST是将XQuery查询结果转换为普通字符数据类型的函数,XMLEXISTS函数能够判断一个XML文档内部是否满足一定的查询条件。

4.2XML数据的修改

假设要把筑宾穴的尿酸项目改为“<尿酸>痛风,肾结石尿酸>”,可以采用类似如下的XQuery语句:

UPDATEpoints

SETcure=XMLQUERY(

'TRANSFORMCOPY$new:=$iMODIFYDOREPLACEVALUEOF

$new/穴位/主治/尿酸WITH"痛风,肾结石"RETURN$new'PASSINGcureas"i")

WHEREname='筑宾穴'

4.3向XML文档中插入一个节点

假设要在“手法”元素后面插入一个新的元素“<适用人群>所有人适用人群>”,可以采用类似如下的XQuery语句:

UPDATEpoints

SETcure=XMLQUERY(

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

AFTER$new/穴位/手法

RETURN$new'PASSINGcureas"i")

WHEREname='筑宾穴'

4.4从XML文档中删除一个节点

假设要将“<强健>膝盖发软强健>”这个节点删除掉,可以采用类似如下的XQuery语句:

UPDATEpoints

SETcure=XMLQUERY(

'COPY$new:=$iMODIFYDO

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

RETURN$new'PASSINGcureas"i")

WHEREname='筑宾穴'

5人体经络学习系统的难点与实现

人体经络学习系统最困难的部分在于对中医的理解,只有对经络学以及与之相关的中医、中药、五行、时令等多方面内容深入理解,才能够建立起全面、高效的模型,并基于此编程实现,解决这个困难最好的方法是与医院或者中医相关部门合作,并反复对项目的需求进行讨论。

其次,该系统前台通过Java实现,后台数据库采用DB29.0以上的版本,DB29.0以上的版本能够较好地支持XQuery,但前台的显示需要提供足够的灵活性和便捷性,使用户操作起来既不能很繁琐,又可以实现很多自己定义的内容,从而体现出XML数据格式的优势。实现便捷性的思路是在页面上大多数选项提供默认值,使用户直接点击“下一步”按钮即可,实现灵活性的思路是在页面上提供用户自定义链接或按钮,允许用户增加自己命名的选项并赋予相应的值。

再次,要实现Java与pureXML的结合,即要在Java环境中使用pureXML,这可以通过选择JavaXQueryAPI(简称XQJ)来实现,该API可以从DataDirect下载免费的试用版,按照说明文档进行安装,然后把XQJJAR添加到类路径中,接下来就可以编写Java代码运行XQuery了。每个程序包含两个部分:建立/访问XQuery数据源;执行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();

首先建立一个新的数据源,该对象的类型是com.ddtek.xquery3.xqj.DDXQDataSource。然后使用数据源得到新的com.ddtek.xquery3.XQConnection对象。该对象可以接受查询字符串并执行。运行查询需要经过以下步骤:

(1)从XQConnection创建一个XQExpression对象。

(2)使用XQExpression对象的bindXXX()方法把变量绑定到查询。

(3)执行查询,结果保存到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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论