【发布时间】:2019-07-08 23:27:41
【问题描述】:
我有一个相当复杂的 SPARQL 查询,其结构如下所述,涉及多个图形模式 UNION 和嵌套 FILTER NOT EXISTS。
我希望查询保持通用,并且我希望能够在执行时为某些变量注入值,我的想法是在查询末尾附加一个VALUES 关键字来指定某些变量的值查询中的变量。在下面的结构中,我设置了?x 的值,并说明了查询中?x 适用的所有位置。
但是,在 Fuseki 中,我看到执行这样的查询大约需要 4 到 5 秒,但是手动将查询中的 ?x 变量替换为 URI,而不是指定 VALUES 子句,使其运行起来非常快。
- 我一直认为在
WHERE子句末尾使用VALUES关键字就像为某些变量设置内联值,所以我希望使用VALUES子句或用它们对应的URI 替换变量是在查询执行方面也是如此。有人可以确认VALUES关键字的预期行为吗?还要解释在WHERE子句之外或WHERE子句内部使用它的区别? - 使用
VALUES设置的变量出现在FILTER NOT EXISTS子句中这一事实是否有所改变? - 您能否确认这是满足上述要求的正确方法(我希望查询保持通用,并且希望能够在执行时为某些变量注入值)?
- 这种行为是否可能特定于 Fuseki 处理
VALUES的方式?
谢谢!
SELECT DISTINCT ...
WHERE {
# ?x ...
# ... basic graph pattern here
{
{
# ... basic graph pattern here
FILTER NOT EXISTS {
# ?x ...
# ... basic graph pattern here
}
FILTER NOT EXISTS {
# ... basic graph pattern here
FILTER NOT EXISTS {
# ?x ...
# ... basic graph pattern here
}
}
}
UNION
{
?x ...
# ... basic graph pattern here
}
UNION
{
# ... basic graph pattern here
FILTER NOT EXISTS {
?x ...
# ... basic graph pattern here
}
FILTER NOT EXISTS {
# ... basic graph pattern here
FILTER NOT EXISTS {
?x ...
# ... basic graph pattern here
}
}
}
UNION
{
?x ...
}
}
}
VALUES ?x { <http://example.com/Foo> }
【问题讨论】: