代码之家  ›  专栏  ›  技术社区  ›  Red Eyez

xquery中有动态绑定吗?

  •  1
  • Red Eyez  · 技术社区  · 7 年前

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

    2 回复  |  直到 7 年前
        1
  •  2
  •   Mads Hansen    7 年前

    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 “。

        2
  •  2
  •   Michael Kay    7 年前

    当使用像xquery这样的语言时,尽量避免将其强制转换成另一种范式:不要尝试在不合适的情况下使用一种语言(或一系列语言)的方法。

    语言是围绕数据模型构建的,xdm数据模型是围绕xml构建的,xml是为文档标记而设计的。这会影响设计师的思维方式,要成功地使用它,你需要了解这种思维方式。它不是面向对象的,因为文档不是面向对象的。

    正如您所说,XQuery1.0没有动态绑定或多态性,这确实使某些问题难以解决(文档通常非常多态)。这可能就是xslt在竞争中保持流行的原因。当然,有一个原因,那就是xquery,因为它是静态分析的,非常适合在查询大型数据库时产生巨大差异的那种优化。

    XQuery3.0通过一级函数机制引入了动态绑定。这是一种不同于面向对象语言的继承和多态性的方法,但它同样强大,而且它的优点是,当您不使用它时,它不会妨碍静态优化。