Team:USTC Software/notebook
From 2010.igem.org
BERKELY DBXML 2.5 introduction by LIAOCHEN
Contents |
JUNE
新手入门2 Xpath的使用
Xpath是XML PATH LANGUAGE的简写。
第一部分我讲结构查询,就是查询XML这个树形结构的结点,就是<>里面包含的东西。
首先用DBD(支持用脚本语言批量作业??不是很确定)生成XML文件
putDocument "" ' for $i in (0 to 1000) return <part number="{$i}"> <description>Description of {$i}</description> <category>{$i mod 10}</category> { if (($i mod 10) = 0) then <parent-part>{$i mod 3}</parent-part> else "" } </part>' q
它还支持shell的运算,比如可以在其中插入{$i mod 3}的运算。还有if...else...end语句块。格式是
if (CONDITION) then (类似于<lable attribute="">value</lable>这样的东西就会加入一个XMLnode) else
比如说我想搜索这1000条记录中有parent-part这个属性的记录(这一句是包含在if-else块中,不是每个都有的),我可以输入
query 'collection("parts.dbxml")/part[parent-part]'
这里首先测试[parent-part]是否为真,然后返回记录,注意这时返回的是以part这个结点为根结点的树形结构。如果将/part[parent-part]改为/part/parent-part呢?大家可以print一下就知道差别了。因为这里返回的是以parent-part为根结点的树。那如果用/part/parent-part/string()呢?这是返回的是string的值,是text结点,它没有子结点。如果我们想查询不含parent-part的结点呢?只要将[parent-part]改为[not(parent-part)]就可以了。
第二部分我讲数值查询,就是查询XML这个树形结构的结点的值。
这里包含两部分,一个是查询结点的值,类似于<lable>VALUE<lable>,第二个是属性的值,类似于<lable attribute="VALUE"/>。对第一类来说,就用上面的那一千条记录为Container为例,如果要搜索parent-part结点的值为1的记录:
query 'collection("parts.dbxml")/part[parent-part = 1]'
第二类的查询我们以查询part的number为770的记录为例
query 'collection("parts.dbxml")/part[@number = 770]'
这里属性的名称用@标记。我们的搜索条件还可以是@number > 770 and(or @number < 1000等复合的bool表达式。
新手入门3 建立索引
这一节将介绍在记录中建立索引,这样我们在搜索数据库的时候可以方便的查找想要的结点或者它的值。setAutoIndexing可以把自动设置的一些索引关掉(傻X阿)。系统会自动的为所有的属性和叶结点建立属性。系统会为<attributes>VALUE<attributes>这样的类型加入index,并且为<label attribute=""/>中的attribute属性加入结点,而其中的label则不会被加入到index中。
下面将如何手动加入index。索引分为4个部分,path type,node type, key type, uniqueness. path type 一般都是node,node type可以是element 或者是attribute,key type可是是判断是否存在(presence)或者是判断是否相等(equality),最后的uniqueness是说判断的元素类型是否唯一,比如要判断数值,可以设置为double。一条加入index的命令就是:addIndex <Index Name> <Element NAME> (ex, node-element-presence-none, node-attribute-equality-double)...这个我看得也不是很明白。。。