是否可以从 xQuery 打开 2 个文档并对它们进行连接?
最佳答案
是的,这是an example来自 XQuery spec .:
“连接是一种非常重要的查询类型,它将来自多个来源的数据组合成一个结果,这是一种非常重要的查询类型。在本节中,我们将说明如何在 XQuery 中表达几种类型的连接。我们将基于以下示例三个文件:
- 一个名为
parts.xml
的文档,其中包含许多part
元素;每个part
元素依次包含partno
和description
子元素。 - 一个名为
suppliers.xml
的文档,其中包含许多supplier
元素;每个supplier
元素依次包含suppno
和suppname
子元素。 - 一个名为
catalog.xml
的文档,其中包含有关供应商和零件之间关系的信息。目录文档包含许多item
元素,每个元素依次包含partno
、suppno
和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 function ),取而代之的是 doc()函数,它是“XQuery 1.0 and XPath 2.0 Functions and Operators”的一部分。
Chris 的回答中至少有两个错误:
- XQuery is case sensitive -- 符合规范的 XQuery 处理器不允许在 Chris 的示例中使用大写关键字。
- 没有必要给标准函数加上前缀,比如 doc(),我只是引用具有前缀的 XQuery 规范。否则,在我自己的代码中我会省略“
fn
”前缀。 - 函数 document() 不是标准的 XQuery/XPath 函数。 doc()应该改用函数。
关于xml - XQuery多个xml文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/484192/