根据人体经络学习系统的需求,设计关系模型如下:
表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.1 XML数据的查询
如果要查询哪个穴位可以治疗结石,可以采用如下XQuery语句:
SELECT name, position,
XMLCAST(XMLQUERY('$i/穴位/主治' PASSING cure as "i")AS CHAR(50)) AS cure,
XMLCAST(XMLQUERY('$i/穴位/手法' PASSING cure as "i")AS CHAR(50)) AS method
FROM points
WHERE XMLEXISTS('$i/穴位/主治[contains(尿酸, "结石")]' PASSING cure AS "i");
其中,XMLQUERY函数是能够使用路径表达式或FLWOR表达式来进行XQuery查询并返回结果的函数,而XMLCAST是将XQuery查询结果转换为普通字符数据类型的函数,XMLEXISTS函数能够判断一个XML文档内部是否满足一定的查询条件。
4.2 XML数据的修改
假设要把筑宾穴的尿酸项目改为“<尿酸>痛风,肾结石尿酸>”,可以采用类似如下的XQuery语句:
UPDATE points
SET cure=XMLQUERY(
'TRANSFORM COPY $new:=$i MODIFY DO REPLACE VALUE OF
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说计算机XQuery技术在中医经络学中的应用(2)在线全文阅读。