【发布时间】:2015-05-28 08:28:30
【问题描述】:
我不太明白为什么在 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的工作方式与逻辑或完全一样,那么这两个查询将产生相同的结果,但当然它们不会。很抱歉我无法正确解释自己,我是 sparql 新手,而且英语不是我的母语,感谢您的理解和时间。 -
@ffa 我想我们在这里切线了,但是您误解了 UNION 在某种程度上不同于逻辑或。然而,它们在语义上是完全相同的。两个查询不同的原因仅仅是范围之一。第一个查询是
((?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))。 -
...不用担心你的英语,没关系,如果我不明白你说的话,我只是请你解释一下(我希望你也对我这样做):)
标签: sparql linked-data stardog