Altova XMLSpy 2023 Enterprise Edition

XQuery文档可用于查询XML数据库(XML DB)。目前,仅IBM DB2数据库支持XQuery功能。使用XQuery查询XML DB的机制主要包括:(i) 向XQuery引擎指示要查询DB中的XML,而不是XML文档中的XML;(ii) 访问DB中的XML数据。

 

下方详细介绍了该机制的实现步骤:

 

1.在文档开头插入XQUERY关键词,设置XQuery文档以查询XML DB。

2.对于活动的XQuery文档,启用DB支持 (通过信息窗口)并连接到DB(使用“快速连接”对话框)。

3.在XQuery文档中,插入DB特定的XQuery扩展以访问DB数据并使其可用于XQuery操作。

4.XMLSpy执行Xquery文档。

 

设置XQuery文档以查询XML DB

要设置XQuery文档以查询XML DB,请打开XQuery文档(或新建XQuery文档),然后在文档开头(prolog之前)输入关键词XQUERY(大小写无关);参见下方示例

 

XQUERY (: Retrieve details of all customers :)

declare default element namespace "https://www.altova.com/xquery/databases/db2";

<a> {db2-fn:xmlcolumn("CUSTOMER.INFO")} </a>

 

如果该文档使用了可选的xquery version表达式,则仍需要使用XQUERY关键词:

 

XQUERY xquery version "1.0"; (: Retrieve details of all customers :)

declare default element namespace "http://https://www.altova.com/xquery/databases/db2";

<a> {db2-fn:xmlcolumn("CUSTOMER.INFO")} </a>

 

提示:XMLSpy的内置XQuery引擎将XQUERY关键词理解为表示要访问一个XML数据库。因此,试图在任何XML文档上执行包含XQUERY关键词的XQuery文档,而不是包含在XML DB中的文档,将导致错误。

 

为XQuery启用DB支持和连接到DB

要启用对XQuery文档的DB支持,请在信息窗口中选中“启用数据库支持”复选框参见下方截图)。请注意,DB支持必须为每个XQuery文档单独启用,并且每次重新打开XQuery文档时都要启用。

XQEnableDBSupport

当您在信息窗口中启用DB支持时,将弹出一个“快速连接”对话框,使您能够连接到数据库。目前,仅支持IBM DB2。有关如何连接到DB,请参见连接到数据库部分。如果存在到数据源的连接,它们将列在信息窗口的的“数据源”组合框中(参见下方截图),并且可以选择其中一个数据源作为活动XQuery文档的数据源。在信息窗口中,您还可以从“根对象”组合框中的可用对象中选择一个根对象。

XQDataSourceComboBox

可以通过单击信息窗口中的XQicQuickConnect图标随时访问“快速连接”对话框(使您能够连接到DB)。

 

提示:当您关闭XQuery文档时,与DB的连接也会被关闭。如果您随后重新打开XQuery文档,您还必须重新连接到DB。

 

IBM DB2特定的XQuery语言扩展

两个IBM DB2特定的函数可用于XQuery文档,以在IBM DB2数据库中检索数据:

 

db2-fn:xmlcolumn将检索整个XML列,而不搜索或过滤该列。

db2-fn:sqlquery将基于SQL SELECT语句检索值。

 

使用这些函数检索的XML数据可以使用标准的XQuery构造函数进行操作。参见下方示例

 

db2-fn:xmlcolumn: 该函数的参数是一个区分大小写的字符串,用于标识一个表格中的XML列。字符串参数必须是一个XML类型的限定列名。该函数在不应用搜索条件的情况下返回列中的所有XML数据,作为一个序列。在以下示例中,CUSTOMER表格的INFO (XML) 列的所有数据都在顶级<newdocelement>元素内返回:

 

XQUERY (: Retrieve details of all customers :)

declare default element namespace "https://www.altova.com/xquery/databases/db2";

<newdocelement> {db2-fn:xmlcolumn("CUSTOMER.INFO")} </newdocelement>

 

检索到的数据可以使用XQuery构造函数进行查询。在下方示例中,使用了一个XQuery构造函数对从CUSTOMER表格的INFO (XML)列检索到的XML数据进行过滤,以便仅检索来自多伦多的客户的个人资料。

 

XQUERY (: Retrieve details of Toronto customers :)

declare default element namespace "https://www.altova.com/xquery/databases/db2";

<newdocelement> {db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo[addr/city='Toronto']} </newdocelement>

 

请注意:在上方示例中,每个单元格中XML文件的文档元素是customerinfo,由db2-fn:xmlcolumn返回的XML序列的根节点被认为是在customerinfo节点上方的抽象节点。

 

db2-fn:sqlquery: 该函数将SQL Select语句作为其参数,并返回一个由XML值组成的序列。检索到的序列可以使用XQuery构造函数进行查询。在下面的示例中,在CUSTOMER表格的INFO列中过滤出CID字段中的值在10001004之间的记录。请注意,虽然SQL不需要区分大小写,但XQuery需要。

 

XQUERY (: Retrieve details of customers by Cid:)

declare default element namespace "https://www.altova.com/xquery/databases/db2";

 

<persons>

  {db2-fn:sqlquery("SELECT info FROM customer WHERE CID>1000 AND CID<1004")/

  <person>

     <id>{data(@Cid)}</id>

     <name>{data(name)}</name>

  </person>}

</persons>

 

上方的XQuery文档返回以下输出:

 

<persons xmlns="https://www.altova.com/xquery/databases/db2">

  <person>

 <id>1001</id>

 <name>Kathy Smith</name>

  </person>

  <person>

 <id>1002</id>

 <name>Jim Jones</name>

  </person>

  <person>

 <id>1003</id>

 <name>Robert Shoemaker</name>

  </person>

</persons>

 

请注意以下几点:

 

Prolog中的默认元素命名空间声明应用于整个XQuery文档,用于XML文档的导航以及新元素的构造。这意味着XQuery选择器name已被扩展为<default-element-namespace>:name,并且构造的元素,如persons位于默认元素命名空间中。

SQL Select语句不区分大小写。

Select语句的WHERE子句应该引用另一个数据库项而不是正在访问的XML文件中的节点。

db2-fn:sqlquery函数之后的“/”代表返回的序列的第一个项,而该项是用于进一步导航的上下文节点。

 

执行XQuery

要执行XQuery文档,请选择XQuery执行命令(XSL/XQuery菜单)。或者,按Alt+F10或单击“XQuery执行”图标ic_xquery_transform。执行的结果将显示在一个新文档中。

 

© 2017-2023 Altova GmbH