XQuery 中是否有动态绑定?
Is there dynamic binding in XQuery?
我正在研究 XQuery 以及如何使用它来查询 XML 文档以及 SQL 我了解到 XQuery 1.0 版不支持动态绑定或面向对象的设计,这意味着 XQuery 不支持对于大型程序非常有用。我可能弄错了,但动态绑定不是在 XQuery 3.0 中引入的吗?如果可以,你能举一个简单的例子吗?
fn:function-lookup() Returns 具有给定名称和元数的函数,如果有的话。
The expression fn:function-lookup(xs:QName('fn:substring'), 2)('abcd', 2)
returns 'bcd
'.
fn:function-name() Returns 函数项标识的函数名称。
The expression fn:function-name(fn:substring#2)
returns fn:QName("http://www.w3.org/2005/xpath-functions", "fn:substring")
. (The namespace prefix of the returned QName is not predictable.).
fn:function-arity() Returns 由功能项标识的功能的数量。
The expression fn:function-arity(fn:substring#2)
returns 2
.
The expression fn:apply(fn:concat#3, ["a", "b", "c"])
returns "abc
".
当使用像 XQuery 这样的语言时,尽量避免强迫它进入不同的范例:不要尝试使用一种不适合一种语言(或语言家族)的方法。
语言是围绕数据模型构建的,而 XDM 数据模型是围绕 XML 构建的,XML 是为文档标记而设计的。这会影响设计师的心态,要成功使用它,您需要了解这种心态。它不是面向对象的,因为文档不是面向对象的。
正如您所说,XQuery 1.0 没有动态绑定或多态性,这确实使某些问题难以解决(文档通常非常多态)。这可能就是 XSLT 在竞争中保持流行的原因。当然,这是有原因的,因为 XQuery 是静态可分析的,因此非常适合那种在查询大型数据库时产生巨大差异的优化。
XQuery 3.0 通过 first-class 函数的机制引入了动态绑定。它与面向对象语言的继承和多态性是不同的方法,但它同样强大,而且它的优点是当你不使用它时不会妨碍静态优化。
我正在研究 XQuery 以及如何使用它来查询 XML 文档以及 SQL 我了解到 XQuery 1.0 版不支持动态绑定或面向对象的设计,这意味着 XQuery 不支持对于大型程序非常有用。我可能弄错了,但动态绑定不是在 XQuery 3.0 中引入的吗?如果可以,你能举一个简单的例子吗?
fn:function-lookup() Returns 具有给定名称和元数的函数,如果有的话。
The expression
fn:function-lookup(xs:QName('fn:substring'), 2)('abcd', 2)
returns 'bcd
'.
fn:function-name() Returns 函数项标识的函数名称。
The expression
fn:function-name(fn:substring#2)
returnsfn:QName("http://www.w3.org/2005/xpath-functions", "fn:substring")
. (The namespace prefix of the returned QName is not predictable.).
fn:function-arity() Returns 由功能项标识的功能的数量。
The expression
fn:function-arity(fn:substring#2)
returns2
.
The expression
fn:apply(fn:concat#3, ["a", "b", "c"])
returns "abc
".
当使用像 XQuery 这样的语言时,尽量避免强迫它进入不同的范例:不要尝试使用一种不适合一种语言(或语言家族)的方法。
语言是围绕数据模型构建的,而 XDM 数据模型是围绕 XML 构建的,XML 是为文档标记而设计的。这会影响设计师的心态,要成功使用它,您需要了解这种心态。它不是面向对象的,因为文档不是面向对象的。
正如您所说,XQuery 1.0 没有动态绑定或多态性,这确实使某些问题难以解决(文档通常非常多态)。这可能就是 XSLT 在竞争中保持流行的原因。当然,这是有原因的,因为 XQuery 是静态可分析的,因此非常适合那种在查询大型数据库时产生巨大差异的优化。
XQuery 3.0 通过 first-class 函数的机制引入了动态绑定。它与面向对象语言的继承和多态性是不同的方法,但它同样强大,而且它的优点是当你不使用它时不会妨碍静态优化。