XPath 概述
XPath 是万维网联盟 (W3C) 设计的表达式语言,用于允许处理符合 XQuery 1.0 和 XPath 2.0 数据模型的 XML 数据。 XQuery 是由万维网联盟 (W3C) 设计的功能编程语言,用于满足查询和修改 XML 数据的特定需求。 DB2® XPath 支持 XPath 2.0 建议中的语言构造子集。
XPath 语言提供了可从关键字,符号和操作数构造的多种表达式。 在大多数情况下,各种表达式,运算符和函数的操作数必须符合期望的类型。 在某些情况下, DB2 将忽略类型错误。
DB2 XPath 可用作 XMLTABLE SQL 内置表函数的自变量,该函数用于将 XML 值转换为关系结果集。
XPath 表达式
XPath 的基本构建块是表达式。 DB2 XPath 提供了多种用于处理 XML 数据的表达式:
- 主表达式,包括语言的基本原语,例如文字,变量引用和函数调用
- 用于在文档树中查找节点的路径表达式
- 加法,减法,乘法,除法和模数的算术表达式
- 用于比较两个值的比较表达式
- 用于使用布尔逻辑的逻辑表达式
1 = 1
和 2 =
2
:1 = 1 and 2 = 2
XPath 处理
XPath 表达式由用于建立处理环境的可选 prolog 和用于生成结果的 表达式 组成。 XPath 处理分为两个阶段: 静态分析阶段和动态评估阶段。
在静态分析阶段,将根据序言中定义的信息对表达式进行解析和扩充。 静态上下文用于解析表达式所使用的类型名称,函数名和变量名。 静态上下文 包含在对表达式求值之前可用的所有信息。 静态阶段在首次对表达式求值时发生。 如果在静态上下文中找不到必需的名称,那么将发生错误。
如果在静态分析阶段中未检测到任何错误,那么将发生动态评估阶段。 在动态求值阶段,将计算表达式的值。 在计算值时,动态类型与每个值相关联。 如果表达式的操作数具有与期望类型不匹配的动态类型,那么将发生类型错误。 如果求值未生成任何错误,那么将返回结果。 动态上下文 包含对表达式求值时可用的信息。
XPath 表达式的结果通常是 XML 节点和原子值的异质序列。 更具体地说, XPath 表达式的结果是 XPath 数据模型的实例。
XPath 2.0 和 XQuery 1.0 数据模型
XPath 2.0 和 XQuery 1.0 数据模型将 XML 文档表示为表示 XML 元素和属性的节点的层次结构 (树)。 数据模型的每个值都是可以包含零个,一个或多个项的序列。 这些项可以是原子值或节点。 每个 XPath 表达式都将 XPath 2.0 和 XQuery 1.0 数据模型的实例作为其输入,并返回 XPath 2.0 和 XQuery 1.0 数据模型的实例。
DB2 XPath 数据类型
- xs:integer
- xs:decimal
- xs:double
- xs:string
- xs:boolean
- xs:untypedAtomic
- xs:date
- xs:dateTime
- xs:time
- xs:duration
- xs:yearMonthDuration
- xs:dayTimeDuration
DB2 在动态评估阶段和静态分析阶段检查数据类型。 当表达式迂到不适当的类型时,将发生类型错误。 例如,使用加号运算符 (+) 将两个字符串相加的 XPath 表达式会导致类型错误,因为加号运算符只能在算术表达式中用于相加数值 yearMonthDuration, 和 dayTimeDuration 值。 可能时,将进行隐式类型转换和类型替换,以提供表达式期望的类型。
内置函数库
DB2 XPath 提供了用于处理 XML 数据的内置函数库。 该库包含以下类型的函数:
- 字符串函数
- 数字函数
- 日期和时间函数
- 对布尔值进行操作的函数
- 对序列进行操作的函数
这些内置函数位于 URI 为 http://www.w3.org/2005/xpath-functions
的名称空间中,缺省情况下,这些函数与前缀 fn
相关联。 缺省情况下,缺省函数名称空间设置为 fn
,这意味着您可以在此名称空间中调用函数而不指定前缀。
可以在期望表达式的 XPath 表达式中的任何位置使用函数调用。