Xquery hack: SELECT * FROM <tablename>
Xquery hack: SELECT * FROM <tablename>
我正在学习如何进入 xquery 数据库系统。我们正在将 SQL 个数据库转换为 XML。一个非常方便的习语或 hack 知道我到目前为止还没有看到如何快速 运行 等同于通常开始的愚蠢 SQL 查询。给定 table 命名为 "account" 并且知道它的大小合理,告诉数据库 "select * from account;" 看看会发生什么。
使用 XQuery,做到这一点并不容易。有没有人想出这种东西的配方,也许与获得本地名称有关?
相当于 SQL table 中的 SELECT *
的 XQuery 正在转储整个文档。 fn:doc() 是合适的工具。
因此,对于名为 account.xml
的文档,您将 select 整个文档如下所示:
doc('account.xml')
...根据您的实施和配置细节,可能是这样的:
doc('file://path/to/account.xml')
或
doc('http://yourcompany.com/your-database-namespace-root/account.xml')
(: 这个 'xml flattener' 函数的灵感来自于 'Identity transform' 的例子
https://en.wikipedia.org/wiki/Identity_transform#Using_XQuery :)
declare function local:copyChildElem2attrib ($element as element()) {
element { node-name($element) }
{ $element/@*,
for $child in $element/node()
return if ($child instance of element())
then
attribute { name($child) } { $child }
else $child
}
};
let $maxrecords := 150
let $myXtbl := doc('account.xml')
for $x at $pos in $myXtbl
where $pos < $maxrecords
return local:copyChildElem2attrib($x)
我正在学习如何进入 xquery 数据库系统。我们正在将 SQL 个数据库转换为 XML。一个非常方便的习语或 hack 知道我到目前为止还没有看到如何快速 运行 等同于通常开始的愚蠢 SQL 查询。给定 table 命名为 "account" 并且知道它的大小合理,告诉数据库 "select * from account;" 看看会发生什么。
使用 XQuery,做到这一点并不容易。有没有人想出这种东西的配方,也许与获得本地名称有关?
相当于 SQL table 中的 SELECT *
的 XQuery 正在转储整个文档。 fn:doc() 是合适的工具。
因此,对于名为 account.xml
的文档,您将 select 整个文档如下所示:
doc('account.xml')
...根据您的实施和配置细节,可能是这样的:
doc('file://path/to/account.xml')
或
doc('http://yourcompany.com/your-database-namespace-root/account.xml')
(: 这个 'xml flattener' 函数的灵感来自于 'Identity transform' 的例子 https://en.wikipedia.org/wiki/Identity_transform#Using_XQuery :)
declare function local:copyChildElem2attrib ($element as element()) {
element { node-name($element) }
{ $element/@*,
for $child in $element/node()
return if ($child instance of element())
then
attribute { name($child) } { $child }
else $child
}
};
let $maxrecords := 150
let $myXtbl := doc('account.xml')
for $x at $pos in $myXtbl
where $pos < $maxrecords
return local:copyChildElem2attrib($x)