在 Oracle XML DB 中使用 XQuery
本教程描述了如何在 Oracle XML DB 中使用 XQuery。
大约 1 小时。
本教程包括下列主题:
单击此图标可以加载和查看本教程的所有屏幕截图。(警告:此操作会同时加载所有屏幕截图,网速较慢时,响应时间可能会比较长。)
注意:您还可以在下面的步骤中将光标放在每个单独的图标上,仅加载和查看与该步骤相关的屏幕截图。
XML Query (XQuery) 是由 World Wide Web 联合会致力推出的标准,它使您能够从 XML 文档提取数据。XML Query 是专门为使用 XML 数据模型而设计的,并且成为以 XML 语言表达的数据的综合性查询语言,正如 SQL 曾经是世界上很多以关系表表达的结构化数据查询语言,以及像关键字搜索曾经增强 Internet 中的大量信息访问功能一样。
由于 XQuery 基本完成,IT 社区已经开始调查 XML 的业务使用,并确定 XQuery 所能提供的价值。作为商业数据库技术的创新领导者,Oracle 数据库 10g 第 2 版提供了完善的自带 XQuery 引擎,该引擎与传统的 Oracle 数据库服务器进行集成,以帮助各种组织探索其 XQuery 需求。
在 SQL 方面,SQL 2003 引入了 XML 数据类型,以作为在 SQL 中封装 XML 的方法。SQL 委员会正致力于通过 XQuery 集成 XML 查询。通过引入新的 SQL 函数,即将完成这项工作:XMLQuery 和新的结构:XMLTable 这两者均使用 XQuery 操作 XML 和 SQL 值。由于前者允许使用 XQuery 查询和构建 XML,因此前者称为以 XQuery 为中心的方法。由于后者允许将 XQuery 值细分为关系值,因此后者称为以 SQL 为中心的方法。
Oracle 数据库 10g 第 2 版通过这些 SQL 标准函数在数据库服务器中实现了 XQuery 支持。还在 SQL*Plus 中实现了新的 XQUERY 命令,以允许用户在命令行中输入 XQuery 表达式。通过 Oracle 数据库 10g 第 2 版中 XQuery 基于标准的实现,应用程序开发人员可以使用喜好的 API (例如 JDBC、ODP.NET)来利用 Oracle 数据库 XQuery 功能。
开始本教程之前,您应该:
| 1. | ||
| 2. |
从 OTN 下载 JDeveloper 10g,并将其解压缩到某个目录 (c:\jdev1012) 中。 |
|
| 3. |
下载 xquery.zip 文件并将其解压缩到您的工作目录 (c:\wkdir) 中。 |
|
| 4. | 确保在 Path 环境变量设定中设置了 <database oracle home>\jdk\bin 目录。 |
|
在 Oracle 数据库 10g 随附的示例架构中,已经提供了一个 XML 模式(作为 OE 模式的一部分)。在本部分中,您将使用企业管理器查看其内容。执行以下步骤:
| 1. | 打开浏览器,输入以下 URL: http://localhost:1158/em/ 输入 system/oracle,然后单击 Login。
|
| 2. | 单击 Administration 选项卡。
|
| 3. | 向下滚动。
|
| 4. | 单击 XML Database 下的 Configuration 链接。
|
| 5. | 输入 2100 作为 FTP 端口,输入 8080 作为 HTTP 端口。然后单击 OK。
|
| 6. |
现在已经完成了配置设置。单击 Database Instance 路径式导航栏。
|
| 7. | 在 XML Database 下的 Administration 选项卡中,选择 Resources 链接。
|
| 8. | 单击 Go 查看所有资源。
|
| 9. | 这将显示所有资源。展开 home。
|
| 10. | 展开 OE - PurchaseOrders - 2002 - Apr 以显示 XML 文档列表。单击列表中的第一个 XML 文档。
|
| 11. | 这将显示该文档的一般信息。要查看该文档的实际内容,单击 Display Contents。
|
| 12. | 这将显示文件内容。单击 Show formatted XML Content。
|
| 13. | 查看格式化的 XML 文档。完成后,将关闭窗口。
|
| 14. |
单击 Database Instance 路径式导航栏。
|
| 15. | 在 XML Database 下的 Administration 选项卡中,单击 XMLType Tables。
|
| 16. | 单击 Go。
|
| 17. | 单击表名 PURCHASEORDER。
|
| 18. | 这将显示 XSD 的定义。向下滚动查看详细信息。
|
要在 JDeveloper 中查看 XML 模式,您需要执行以下任务:
| 创建 WebDAV 连接 | ||
| 查看 XML 模式 | ||
在访问 XML DB 中的 XML 模式文档之前,您需要创建 WebDAV 连接。执行以下步骤:
| 1. | 双击 <jdev_dir>\jdev\bin\jdevw.exe。
注意:系统可能会询问您是否要升级前一版本。
|
| 2. |
单击 Connection 选项卡。在 Navigator 窗口中,右键单击 WebDAV Server,然后选择 New WebDAV Connection...
|
| 3. | 在 Welcome 窗口中,单击 Next。
|
| 4. |
在 Name 域中输入 WebDAVConnection1,在 URL 域中输入 http://localhost:8080/,然后单击 Authentication Required。然后单击 Next。
|
| 5. | 输入 OE 作为用户名和密码。然后单击 Next。
|
| 6. | 单击 Test Connection。
|
| 7. | 测试成功。单击 Next。
|
| 8. | 单击 Finish。
|
| 9. | 展开刚才创建的 WebDAVConnection1 连接。
|
现在,您可以查看 XML 模式。执行以下步骤:
| 1. | 展开 home - OE - PurchaseOrders - 2002 - Apr。双击列表中的第一个文档,这将显示 XML 文档。
|
| 2. |
在 Navigator 窗口中向下滚动,然后双击 purchaseOrder.xsd。
|
| 3. | 这将在图形布局中显示 XML 模式。展开 PurchaseOrder 类型。
|
| 4. | 展开 Actions 类型。
|
| 5. | 展开 Action,您将看到两个类型对象:User 和 Date。现在,返回 XML 文档以查看它们的定义位置。单击 XML Document 选项卡。
|
| 6. | Action 对象包含一个 KPARTNER 用户类型。
|
在本部分中,您将运行一些 XQuery 表达式及其关联的解释计划来访问有关 XML 文档的信息。执行以下步骤:
| 1. | 打开一个命令提示符,然后输入以下命令: cd wkdir sqlplus oe/oe
|
| 2. | 您运行的第一个 xquery 将选择所有 XML 文档。执行以下脚本: @xquery01
|
| 3. | 您运行的第二个 xquery 将选择特定用户的 XML 文档。执行以下脚本: @xquery02
|
| 4. | 您运行的下一个 xquery 将查看特定的订货单。执行以下脚本: @xquery03
|
| 5. | 您运行的下一个 xquery 将列出包含特定部件 ID 的所有订货单。执行以下脚本: @xquery04
|
| 6. | 您运行的下一个 xquery 将列出特定订货单中每行项目的描述。执行以下脚本: @xquery05
|
您可以通过创建索引来增强 XQuery 的性能。在本部分中,您将创建一个索引,然后运行相同的 XQueries 来查看改变性能的解释计划如何获得增强。执行以下步骤:
| 1. |
从 SQLPlus 会话中,登录 OE 用户。 @createXMLIndexes
|
| 2. | 您运行的下一个 xquery 将查看特定的订货单。执行以下脚本: @xquery03
|
| 3. | 您运行的一个 xquery 将列出包含特定部件 ID 的所有订货单。执行以下脚本: @xquery04
|
| 4. | 您运行的下一个 xquery 将列出特定订货单中每行项目的描述。执行以下脚本: @xquery05
|
您可以使用 XQuery 通过视图从 SQL 数据生成 XMl。执行以下步骤:
| 1. |
首先,使用 XMLTable() SQL/XML 函数和 XQuery 表达式来根据关系表创建 XML 视图。执行以下脚本: @createXQueryView
|
| 2. | 现在,可以根据刚刚创建的 XML 视图来显示 XQuery。执行以下脚本: @xqueryXQLView
|
虚拟 XML 文档可指导您如何将 XMLType 视图中行的内容作为 Oracle XML DB 信息库中的文档来提供。执行下列任务:
| 1. | 首先需要创建一个要从前面创建的 XML 视图创建一个虚拟 XML 文档的触器。执行以下脚本: @folderXQDepartments
|
| 1. |
切换到 JDeveloper。从 Navigator 窗口中,右键单击 WebDAV 连接中的 /home/OE,然后选择 Refresh。
|
| 2. | 展开 XQDepartments。
注意:如果在此步骤中遇到一个错误,则试着再次执行第 1 步,然后再次展开 XQDepartments。
|
| 3. | 双击列表中的第一个 .xml 文档。该 Accounting.xml 文档直接在 XMLType 视图的行中显示 XML 数据。
|
| 1. |
您还可以查询虚拟 XML 文档。请注意如何使用 XQuery 标准 doc() 函数来检索 XML DB 信息库中的 XML 文档。首先,您将查看具有 Accounting 显示名的虚拟文档列表。执行以下脚本: @departmentsXQueries01
|
| 2. | 现在,可以显示其中一个虚拟 XML 文档的内容。执行以下脚本: @departmentsXQueries02
|
| 3. | 最后,您可以执行 XQuery 来选择虚拟 XML 文档的其中一项。执行以下脚本: @departmentsXQueries03
|
通过 RESOURCE_VIEW 和 PATH_VIEW 公开 XML DB 信息库的内容。公共的 synonyms 可允许所有数据库用户使用这些视图。可以像使用任何其他数据库视图那样来使用这些视图。执行以下步骤:
| 1. | 执行以下脚本: @resourceViewXQuery01
|
XQuery 是通用的查询语言。它可用于将 XML 文档从一种结构转换为另一种结构。执行以下步骤:
| 1. | 标记和其他 XQuery 表达式已经对订货单进行转换,以生成明显不同的 XML 文档报告。执行以下脚本: @xqueryTransform
|
JDBC 通过以下 SQL/XML 函数的本地实现来支持 XQuery 语言:XMLQuery 和 XMLTable。以下示例演示了如何使用 XMLTable() 函数的 PASSING 子句将动态变量绑定到 XQuery 表达式。执行下列任务:
| 1. | 切换到 JDeveloper。单击 Navigator 的 Applications 选项卡,然后单击 Add to Applications 图标。
|
| 2. |
从 <working directory>\JDBC 目录中 选择 XQuerySamples.jws。然后单击 Open。
|
| 1. | 展开 XQuerySamples > SimpleXQuery > Application Sources,然后右键单击 SimpleXQuery.java,并单击 Open。
|
| 2. | 略微向下滚动到 OracleConnection 语句,然后更改主机名和 SID 信息(如果需要)。
|
| 3. | 更改 XQueryBind 下所有 .java 文件的 JDBC 连接信息。 |
| 1. | 您需要设置类路径。选择 Tools > Default Project Properties。
|
| 2. | 选择 Libraries,然后单击 New...。
|
| 3. |
输入 Oracle Database 10gR2 作为库名称,然后为类路径单击 Edit。
|
| 4. | 单击 Add Entry...。
|
| 5. |
导航到 C:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar 文件,并单击 Select。
|
| 6. | 单击 Add Entry...。
|
| 7. |
导航到 C:\oracle\product\10.2.0\db_1\RDBMS\jlib\xdb.jar 文件,并单击 Select。
|
| 8. | 单击 Add Entry...。
|
| 9. |
导航到 C:\oracle\product\10.2.0\db_1\lib\xmlparserv2.jar 文件,并单击 Select。
|
| 10. | 单击 OK。
|
| 11. | 单击 OK 保存新的库。
|
| 12. | 单击 OK 关闭 Project Properties 窗口。
|
| 13. | 现在,您需要将该库添加到项目中。右键单击 SimpleXQuery,然后选择 Project Properties。
|
| 14. | 从库列表中选择 Oracle Database 10gR2,然后单击 > 进行选择。然后单击 OK。
|
| 15. | 右键单击 XQueryBind,然后选择 Project Properties。
|
| 16. | 从库列表中选择 Oracle Database 10gR2,然后单击 > 进行选择。然后单击 OK。
|
| 1. | 右键单击 XQuerySamples,然后选择 Make。
|
| 2. | 查看 Message 窗口,确保未收到错误消息。
|
| 1. | 右键单击 SimpleXQuery,然后选择 Run。
|
| 2. | 输出将显示在 Log 区域。
注意:如果收到错误消息,请检查路径环境变量,以确保指定了 jdk 目录。请参阅前提条件 #4。 |
| 3. | 右键单击 XQueryBind,然后选择 Run。
|
| 4. | 输出将显示在 Log 区域。
|
在本教程中,您学习了如何:
| 使用 XQuery 查询 Oracle XML DB 中存储的 XML 文档 | ||
|
添加 XML 索引,并演示在执行 XQuery 时解释计划如何变化 |
||
|
使用 XQuery 创建 XML 视图,以及使用 XQuery 查询 XML 视图 |
||
|
从 XML 视图创建虚拟 XML 文档,以及使用 XQuery 查询这些 XML 文档 |
||
|
在资源视图中使用 XQuery 从 XML 信息库检索信息 |
||
|
使用 XQuery 转换 XML 文档 |
||
| 使用 XQuery 通过 JDBC 查询 Oracle XML DB | ||