数据库中XML文档存储、检索与时间序列查询语言扩展
立即解锁
发布时间: 2025-08-23 00:47:28 阅读量: 2 订阅数: 18 

### 数据库中XML文档存储、检索与时间序列查询语言扩展
#### 1. XML文档的存储与检索
在数据库领域,对于XML文档的存储和检索是一个重要的研究方向。这里介绍了一种基于对象关系数据库的XML文档存储和检索方法,该方法不仅适用于对象关系数据库,也适用于关系数据库。
##### 1.1 XML文档的存储
XML文档被分解为其树表示的路径,并存储在四个关系表中,这些关系表对用户或应用程序是隐藏的。用户或应用程序将XML文档视为树,并使用XML查询语言(如XQL)指定查询。
##### 1.2 XML文档的检索
- **查询重写**:XQL使用路径运算符(`/` 或 `//`)与元素类型等连接的表示法来提取元素包含的子文档。如果XQL查询不包含过滤器和索引,生成SQL查询的步骤如下:
1. 数据库中存储的简单路径以路径运算符 `/` 开头,并用 `/` 连接元素类型。如果XQL查询包含路径运算符 `//`,则使用 `LIKE` 谓词在 `WHERE` 子句中将简单路径中每个 `//` 替换为 `%/`,然后从 `Path` 关系中选择出路径ID。
2. 根据步骤1中获得的每个路径ID,从 `Element` 关系中检索 `docID` 和 `pos` 对。
以下是几个XQL查询重写为SQL查询的示例:
- **Query 1**:`/books//author`
```sql
SELECT e1.docID, e1.pos
FROM Element e1, Path p1
WHERE e1.pathID = p1.pathID
AND p1.pathexp LIKE '/books%/author'
ORDER BY e1.docID, e1.pos
```
- **Query 2**:`//book[summary/keyword = 'XML']`
```sql
SELECT e3.docID, e3.pos
FROM Element e1, Path p1, Text t2, Path p2, Element e3, Path p3
WHERE p1.pathexp LIKE '%/book'
AND p2.pathexp LIKE '%/book/summary/keyword'
AND p3.pathexp LIKE '%/book/author/family'
AND e1.pathID = p1.pathID
AND t2.value = 'XML'
AND t2.pathID = p2.pathID
AND e3.pathID = p3.pathID
AND e1.pos.contain(t2.pos)
AND e1.docID = t2.docID
AND e1.pos.contain(e3.pos)
AND e1.docID = e3.docID
ORDER BY e3.docID, e3.pos
```
- **Query 3**:`//book/author/family[0]`
```sql
SELECT e1.docID, e1.pos
FROM Element e1, Path p1
WHERE e1.pathID = p1.pathID
AND p1.pathexp LIKE '%/book/author/family'
AND e1.index = 0
ORDER BY e1.docID, e1.pos
```
##### 1.3 实验结果
使用PostgreSQL作为对象关系数据库,XML Parser for Java作为XML处理器进行了实验。实验使用了莎士比亚戏剧的XML文档集合,相关数据如下表所示:
| 项目 | 数量或数据大小 |
| ---- | ---- |
| 总XML文档大小 | 7.65 Mbytes |
| 文档数量 | 37 |
| 平均文档大小 | 206.71 Kbytes |
存储测试数据所需的数据大小如下表:
| 项目 | 数据大小 |
| ---- | ---- |
| 关系 `Element` | 4.10 Mbytes |
| 关系 `Attribute` | 0 bytes |
| 关系 `Text` | 7.32 Mbytes |
| 关系 `Path` | 1.5 Kbytes |
| 总计 | 11.42 Mbytes |
0
0
复制全文
相关推荐










