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 数据的表达式:

  • 主表达式,包括语言的基本原语,例如文字,变量引用和函数调用
  • 用于在文档树中查找节点的路径表达式
  • 加法,减法,乘法,除法和模数的算术表达式
  • 用于比较两个值的比较表达式
  • 用于使用布尔逻辑的逻辑表达式
XPath 表达式可以使用完全通用性组成,这意味着在期望表达式的情况下,可以使用任何类型的表达式。 通常,表达式的操作数是其他表达式。 在以下示例中,逻辑表达式的操作数是比较表达式 1 = 12 = 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 数据类型

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 表达式中的任何位置使用函数调用。