Sql XQuery中有动态绑定吗?

Sql XQuery中有动态绑定吗?,sql,oop,xquery,dynamic-programming,xquery-3.0,Sql,Oop,Xquery,Dynamic Programming,Xquery 3.0,我正在研究XQuery以及如何将其与SQL一起用于查询XML文档,我了解到XQuery 1.0版不支持动态绑定或面向对象设计,这意味着XQuery对于大型程序不是很有用。我可能弄错了,但动态绑定不是在XQuery 3.0中引入的吗?如果是,你能举个简单的例子吗 有以下几种: 返回具有给定名称和arity(如果有)的函数 表达式fn:function lookup(xs:QName('fn:substring'),2)('abcd',2)返回'bcd' 返回由函数项标识的函数的名称 表达式fn:f

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

有以下几种:

返回具有给定名称和arity(如果有)的函数

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

返回由函数项标识的函数的名称

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

返回由函数项标识的函数的arity

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

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

有:

返回具有给定名称和arity(如果有)的函数

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

返回由函数项标识的函数的名称

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

返回由函数项标识的函数的arity

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

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


当使用像XQuery这样的语言时,尽量避免强迫它进入另一种模式:不要尝试在不合适的情况下使用一种适用于一种语言(或一系列语言)的方法

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

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


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

当使用像XQuery这样的语言时,尽量避免强迫它进入一个不同的范例:不要试图在不合适的时候使用一种适用于一种语言(或一系列语言)的方法

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

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


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

谢谢。那么这是否意味着我们可以将XQuery与面向对象框架结合使用呢?也许。如果您命名了框架或者有一个具体的例子来说明您想要实现什么,那么回答起来可能会更容易。但是,请注意,XQuery是一种函数式语言。您可能可以将其与OO框架一起使用,但仅仅因为您可以,并不一定意味着您应该这样做。谢谢。我认为XQuery不支持创建对象。谢谢你说清楚。我在考虑如何在Oracle和以数据为中心的模型中构建xml,我想知道XQuery是如何处理此类数据的。谢谢。那么这是否意味着我们可以将XQuery与面向对象框架结合使用呢?也许。如果您命名了框架或者有一个具体的例子来说明您想要实现什么,那么回答起来可能会更容易。但是,请注意,XQuery是一种函数式语言。您可能可以将其与OO框架一起使用,但仅仅因为您可以,并不一定意味着您应该这样做。谢谢。我认为XQuery不支持创建对象。谢谢你说清楚。我在想xml是如何在Oracle和以数据为中心的模型中构建的,我想知道XQuery是如何处理这种类型的数据的。