是否可以从 xQuery 打开 2 个文档并对它们进行联接?
是的,这里是一个例子来自XQuery 规范.:
“连接将来自多个源的数据组合成一个结果,是一种非常重要的查询类型。在本节中,我们将说明如何在 XQuery 中表达几种类型的连接。我们的示例将基于以下三个文档:
- 一个名为
parts.xml
其中包含许多part
元素;每个part
元素又包含partno
and description
子元素。
- 一个名为
suppliers.xml
其中包含许多supplier
元素;每个supplier
元素又包含suppno
and suppname
子元素。
- 一个名为
catalog.xml
其中包含有关供应商和零件之间关系的信息。目录文档包含很多item
元素,每个元素又包含partno
, suppno
, and price
子元素。
传统(“内部”)联接返回来自两个或多个相关源的信息,如以下示例所示,该示例组合了来自三个文档的信息。该示例生成从目录文档派生的“描述性目录”,但包含零件描述而不是零件编号,以及供应商名称而不是供应商编号。新目录按零件描述的字母顺序排列,其次按供应商名称排列。*
<descriptive-catalog>
{
for $i in fn:doc("catalog.xml")/items/item,
$p in fn:doc("parts.xml")/parts/part[partno = $i/partno],
$s in fn:doc("suppliers.xml")/suppliers
/supplier[suppno = $i/suppno]
order by $p/description, $s/suppname
return
<item>
{
$p/description,
$s/suppname,
$i/price
}
</item>
}
</descriptive-catalog>
上一个查询仅返回有关具有供应商的零件和具有零件的供应商的信息。一个外连接是一种连接,它保留来自一个或多个参与源的信息,包括在另一个源中没有匹配元素的元素。例如,一个左外连接供应商和零件之间可能会返回有关没有匹配零件的供应商的信息。”
请注意,XQuery 没有标准的 document() 函数(它是一个XSLT 函数),而是有doc()函数,它是“的一部分XQuery 1.0 和 XPath 2.0 函数和运算符".
克里斯的回答至少有两个错误:
-
XQuery 区分大小写-- 符合标准的 XQuery 处理器将不允许 Chris 示例中使用的大写关键字。
-
不需要在标准函数前面加上前缀像 doc() 一样,我只是引用 XQuery 规范,它有前缀。否则,在我自己的代码中我会省略“
fn
“ 字首。
-
函数 document() 不是标准的 XQuery/XPath 函数. The doc()应该使用函数来代替。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)