1. BDB XML之运行Shell
1.1 下载BDB XML 二进制文件
- 首先打开官网的下载页面 Oracle Berkeley DB Downloads
- 下载适合自己电脑的安装包
- 我的电脑是64为就下载按照我的电脑是64为就下载x64
注意:*.msi 是二进制编译好的文件, .zip 和.tar.gz 是windows 和linux
压缩的未编译的源码文件,我们要下载二进制编译好的文件
默认安装路径是:
C:\Program Files\Oracle\Berkeley DB XML 6.1.4\bin
1.2 配置环境变量
新建 CLASSPATH 环境变量,配置如下:
path路径追加如下:
C:\Program Files\Oracle\Berkeley DB XML 6.1.4\bin
1.3 运行Shell 命令
如果是默认路径安装,dbxml.exe 位置在
C:\Program Files\Oracle\Berkeley DB XML 6.1.4\bin
1.3.1 进入db xml Shell
刚才我们已经配置过环境变量,因此现在如果想要运行这个shell命令,只需要打开我们操作系统的命令行窗口,输入:
dbxml
便可以进入dbxml shell 中。
效果如下所示:
我们可以将看到dbxml>提示符,这个提示符号后面跟应输入的命令。 大多数命令都是简单的一行命令。
但是,有些是更复杂的XQuery示例,它们将跨越多行。 每个示例都将显示要输入的命令和结果输出。
当输出太长时,省略号(…)将用于缩写中间结果。
使用BDB XML时,我们会发现文档内容存储在container(容器)中。 这是BDB XML中的第一个基本概念:container(容器)包含XML文档的集合。 容器内的文档可能共享也可能不共享相同的模式。
1.3.2 创建一个Container(容器)
要开始探索学习BDB XML,我们首先需要创建一个container(容器)。
比如我们想要创建一个简单的电话簿数 容器的名称是phone.dbxml。
输入命令如下:
createContainer phone.dbxml
执行成功后会显示如下:
我们可以看到C:\Users\fairy\根目录下生成了一个phone.dbxml
这是新的文档存储容器。 容器包含XML数据,索引,文档元数据和任何其他有用信息,并由BDB XML管理。
永远不要直接编辑容器(因为当你打开之后可以看到是乱码 -_-!!!)始终允许BDB XML库为您管理容器。 '.dbxml’扩展有助于识别磁盘上的BDBXML数据库,但它只是一个非严格要求的命名约定。
除了创建容器之外,BDB XML shell还自动打开它并使其可供我们使用。
1.3.3 向容器DB中添加数据
比如我们想要添加如下的内容:
<phonebook>
<name>
<first>Tom</first>
<last>Jones</last>
</name>
<phone type="home">420-203-2032</phone>
</phonebook>
那么继续在命令行下输入以下命令
putDocument phone1 '<phonebook>
<name>
<first>Tom</first>
<last>Jones</last>
</name>
<phone type="home">420-203-2032</phone>
</phonebook>' s
执行成功后可以看到
我们再添加一组这样的数据
<phonebook>
<name>
<first>Lisa</first>
<last>Smith</last>
</name>
<phone type="home">420-992-4801</phone>
<phone type="cell">390-812-4292</phone>
</phonebook>
在命令行下输入以下命令:
putDocument phone2 '<phonebook>
<name>
<first>Lisa</first>
<last>Smith</last>
</name>
<phone type="home">420-992-4801</phone>
<phone type="cell">390-812-4292</phone>
</phonebook>' s
执行成功如下所示:
值得注意的是:XML文档内容包装在单引号字符中,命令由s字符终止。 这表明我们正在使用字符串添加新文档。
单引号字符用于任何包含空格或需要跨越多行的命令参数。
1.3.4 从容器DB中查询数据
现在容器中已经有了两条数据。 接下来我们学习仅基于XPath语句的基本XQuery查询。 后续部分将演示更复杂的XQuery语句。
XPath是XQuery规范的核心部分。 它与SELECT语句在SQL中的功能大致相同。 它主要用于识别数据集中的数据子集。
命令行下输入以下命令进行查询
query '
collection("phone.dbxml")/phonebook/name/last/string()'
执行成功后如图所示:
注意:string()函数不返回目标节点,而是返回目标节点的字符串值。
要打印查询的结果输入命令
print
可以看到如下结果
注意:这里先执行查询命令,然后再执行print才行
print 命令会默认打印最近查询的结果集
否则会出现错误:
找到Lisa的家庭电话号码,输入以下命令查询:
query '
collection("phone.dbxml")/phonebook[name/first = "Lisa"]/phone[@type =
"home"]/string()'
执行成功如下所示:
打印查询结果输入以下命令
print
执行成功如下所示:
如果查询420开头的,那么输入如下命令
query '
collection("phone.dbxml")/phonebook/phone[starts-with(., "420")]/string()'
执行成功后如下所示:
打印查询结果输入命令:
print
打印结果如下:
这些查询只是检索数据的子集,就像关系数据库中的基本SELECT语句一样。 每个查询由两部分组成。
- 查询的第一部分标识要检查的文档集(相当于投影)。 这是通过诸如collection()之类的XQuery导航功能完成的。 在此示例中,collection(“phone.dbxml”)指定我们要应用查询的容器。
- 第二部分是XPath语句(相当于一个选择)。 第一个示例的XPath语句是/ phonebook / name / last / string(),它基于我们的文档结构,将检索所有姓氏并将它们显示为字符串。
理解XPath是理解XQuery的第一步。
我们也可以使用union运算符(“|”)和collection()函数对多个容器执行查询。 例如,要查询容器c1.dbxml和c2.dbxml,您将使用以下表达式:
(collection("c1.dbxml") | collection("c2.dbxml"))/name/string()