XQuery中是否存在动态绑定?

时间:2018-06-07 17:43:19

标签: sql oop xquery dynamic-programming xquery-3.0

我正在研究XQuery以及如何使用它来查询XML文档和SQL,我了解到XQuery 1.0版不支持动态绑定或面向对象设计,这意味着XQuery对大型程序不是很有用。我可能会弄错,但XQuery 3.0中没有引入动态绑定?如果可以,你能给出一个简单的例子吗?

2 个答案:

答案 0 :(得分:2)

Higher Order Functions

fn:function-lookup()返回具有给定名称和arity的函数(如果有)。

  

表达式fn:function-lookup(xs:QName('fn:substring'), 2)('abcd', 2)返回“bcd”。

fn:function-name()返回由函数项标识的函数的名称。

  

表达式fn:function-name(fn:substring#2)返回fn:QName("http://www.w3.org/2005/xpath-functions", "fn:substring")。 (返回的QName的名称空间前缀不可预测。)。

fn:function-arity()返回由函数项标识的函数的arity。

  

表达式fn:function-arity(fn:substring#2)返回2

fn:apply()

  

表达式fn:apply(fn:concat#3, ["a", "b", "c"])返回“abc”。

答案 1 :(得分:2)

当使用像XQuery这样的语言时,尽量避免强制它进入不同的范例:当不合适时,不要尝试使用一种语言(或语言族)的方法。

语言是围绕数据模型构建的,XDM数据模型是围绕XML构建的,XML是为文档标记而设计的。这会影响设计师的心态并成功使用它,您需要了解这种心态。它不是面向对象的,因为文档不是面向对象的。

正如你所说, XQuery 1.0没有动态绑定或多态,这确实使某些问题难以处理(文档肯定是非常多态的)。这可能就是为什么XSLT在竞争中保持其受欢迎程度的原因。当然,有一个原因,XQuery,因为它是静态可分析的,非常适合于那种在查询大型数据库时产生巨大差异的优化。

XQuery 3.0通过一流函数的机制引入了动态绑定。它是面向对象语言的继承和多态的一种不同方法,但它同样强大,并且它的优点是当你不使用它时它不会妨碍静态优化。