我正在研究XQuery以及如何使用它来查询XML文档和SQL,我了解到XQuery 1.0版不支持动态绑定或面向对象设计,这意味着XQuery对大型程序不是很有用。我可能会弄错,但XQuery 3.0中没有引入动态绑定?如果可以,你能给出一个简单的例子吗?
答案 0 :(得分:2)
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:concat#3, ["a", "b", "c"])
返回“abc
”。
答案 1 :(得分:2)
当使用像XQuery这样的语言时,尽量避免强制它进入不同的范例:当不合适时,不要尝试使用一种语言(或语言族)的方法。
语言是围绕数据模型构建的,XDM数据模型是围绕XML构建的,XML是为文档标记而设计的。这会影响设计师的心态并成功使用它,您需要了解这种心态。它不是面向对象的,因为文档不是面向对象的。
正如你所说,XQuery 3.0通过一流函数的机制引入了动态绑定。它是面向对象语言的继承和多态的一种不同方法,但它同样强大,并且它的优点是当你不使用它时它不会妨碍静态优化。