Team:USTC Software/notebook
From 2010.igem.org
BERKERLY DB XML 介绍 by LIAO CHEN
新手入门1 基本操作
http://www.oracle.com/technology/global/cn/products/berkeley-db/xml/index.html 下载BDB (Berkerly DB XML 2.5),可以很好支持XML文件的查找与插入,删除,索引操作,既支持命令行也支持应用程序的调用。
在BDB中,所有的文件存在container中,这些container实际上是XML文档和其他信息的集合,它即可作为整个文档(一个单元)存储,又可作为许多结点存储--这时整个文档分解为一个一个小的结点。
这个软件的安装比较诡异,在install/bin/里面有dbxml的命令,直接输入(我是运行完外面的build.sh后才运行的,安装时间暴长...)。这时出现prompt。注意:每一个xml文档都存在container中,container是xml文档的集合,它还包括索引,metadata(data about data)。我们首先要创建一个container对象:
dbxml> createContainer <CONTAINER NAME>
这里不像mysql需要打开数据库(use <database name>),DBD会自动为我们打开。DBD管理文档的格式不是组织关系数据库,无须像mysql一样要定义每一个表的格式,比如create table phonebook values (id INT(3) not null, varchar(120)...),它直接输入xml格式的文件即可:
dbxml> putDocument phone1 '<phonebook> <name> <first> liao </first> <second> chen </second> </name> <phone type="mobile">xxxxx5873</phone> </phonebook>' s
这里要注意三点,第一是这种格式的输入(当然可以load文件)的xml文档是以单引号为起始终止限定符,第二是s结尾是说xml以string格式输入新的document,第三是它和mysql不一样,不用打分号作为一个语句的结束。
下面我门说XQuery,我们可以理解它和SQL SELECT语句是差不多的。XPATH是XQuery的中心实现,它就是一系列语句,用于查询XML文档数据集合的子集。它和SQL查询有些类似,比如我们要查<CONTAINER NAME>这个collection中的/phonebook/name/first这个结点的所有的记录,我们输入
dbxml> query 'collection("<CONTAINER NAME>")/phonebook/name/first/string()'(给出找到了几个拥有这个first的记录) dbxml> print (会打印出找到的结点的VALUE)
这条语句将找到的记录的/phonebook/name/first的结点的值以STRING形式显示。理解XPATH语句是必备的。query的表达式分为两个部分,第一个是导航函数collection(),用它定位文件,后面是搜索的表达式,它遵循XPATH语法格式。collection支持多个文件搜索(collection("CONTAINER1") | collection( "CONTAINER2")),中间用管道符连接。
Query的条件搜索expression格式很多,我在下面会列出最重要的一些命令,其他的命令看dbxml> help. 对于每一条命令,可以查询其细节,help <COMMAND>.
新手入门2 Xpath的使用
Xpath是XML PATH LANGUAGE的简写。
首先我发现DBD支持用脚本语言批量生成XML文件
putDocument "" ' for $i in (0 to 1000) return <part number="{$i}"> </part>' q
它还支持shell的运算,比如可以在其中插入{$i mod 3}的运算。还有if...else...end语句块。