我不太明白为什么在SPARQL中他们没有实现基本的逻辑运算符。然而,在大多数情况下,可以通过多种方式获得相同的结果。
这个问题的目的是为了快速参考可以替代“或”语句的可能方法。
以下是我能想到的:
1)UNION
例如:
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)FILTER
例如:
SELECT * WHERE
{
?s ?p ?o.
FILTER (?p = :propA || ?p = :propB )
}
还有其他想法吗?
UNION
的作用类似于逻辑OR,那么这两个查询将产生相同的结果,但显然它们并没有。很抱歉我无法恰当地解释自己,我是SPARQL新手,同时英语也不是我的母语,非常感谢您的理解和时间。 - ffa((?s ?p ?o ?g) AND (?o ?pp ?data1 ?g)) OR ((?s ?p ?o ?g) AND (?o ?pp ?data2 ?g))
,第二个查询是(?s ?p ?o ?g) AND ((?o ?pp ?data1 ?g) OR (?o ?pp ?data2 ?g))
。 - Jeen Broekstra