gpt4 book ai didi

sparql - SPARQL 查询中的 "or"

转载 作者:行者123 更新时间:2023-12-03 02:00:06 27 4
gpt4 key购买 nike

我不太明白为什么在SPARQL中他们没有实现基本的逻辑运算符。然而,在大多数情况下,可以通过多种方式获得相同的结果。

这个问题的目的是快速引用可以替代“or”语句的可能方式。

这是我能想到的:

1)联合

例如:

SELECT * WHERE
{ { ?s :propA ?o } UNION { ?s :propB ?o } }

-通常不合适,因为它可能变得非常冗长,因为

SELECT * WHERE { 
{ GRAPH ?g {?s ?p ?o. ?o ?pp ?data1}} UNION
{ GRAPH ?g {?s ?p ?o. ?o ?pp ?data2}}
}

不工作

SELECT * WHERE { 
GRAPH ?g {
?s ?p ?o.
{?o ?pp ?data1} UNION
{?o ?pp ?data2}
}
}

(至少 Stardog 没有)

2)过滤

例如:

SELECT * WHERE
{
?s ?p ?o.
FILTER (?p = :propA || ?p = :propB )
}

还有其他想法吗?

最佳答案

我不完全确定为什么你说 SPARQL 不提供“基本逻辑运算符”,因为你自己的示例清楚地表明它确实提供了:它提供了逻辑或 (||)和逻辑与 (&&) 作为 FILTER 条件的一部分,以及使用 UNION 的析取图形模式(当然,合取图形模式不需要特殊的句法)。

类似于OR的构造的其他变体也是可能的。对于“这个特定值必须是这些可能性之一”形式的查询,您可以使用集合成员运算符,IN:

SELECT * 
WHERE {
?s ?p ?o.
FILTER (?p IN (:propA, :propB, :propC ) )
}

您还可以对这种模式使用 VALUES 子句:

SELECT * 
WHERE {
VALUES ?p { :propA :propB :propC }
?s ?p ?o.
}

更新我忘记了一个,也许是最简单的一个。对于像您这样的查询,您正在寻找属性名称的一些替代方案,您实际上也可以使用属性路径表达式,如下所示:

SELECT * 
WHERE {
?s :propA|:propB|:propC ?o.
}

关于sparql - SPARQL 查询中的 "or",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30501124/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com