SPARQL查询,选择一切,除了东西匹配?

我得到舒适的经常查询的SPARQL,但我仍然有问题与票友的东西。 我的最新问题是试图选择一切,除了东西,where子句相匹配。 例如,假设我想找到所有谁喜欢车的颜色,他们的妻子不喜欢的丈夫(我工作的一个专有的模式,所以原谅的例子,只是相信,这是有道理的,在实际模型)。

我可能有:

<bob> <spouse> <alice> <bob> <likes> <red> <alice> <likes> <red> <carl> <spouse> <dorothy> <carl> <likes> <blue> <dorothy> <likes> <yellow> <eric> <spouse> <fannie> <eric> <likes> <black>

那是什么选择卡尔和Eric,而不是鲍勃查询? 奖励积分,如果你可以选择蓝色和黑色的相同的查询。 选择鲍勃是简单的:

select ?husband ?color where {?husband <spouse> ?wife . ?husband <likes> ?color . ?wife <likes> ?color}

我正在寻找的是:

select ?husband ?color where {?husband <spouse> ?wife . ?husband <likes> ?color . NOT (?wife <likes> ?color)}

但很明显,这是错误的。 那么,什么是正确的?

--------------解决方案-------------

一个正确的答案,我通过其他渠道发现的是这样的:

select ?husband ?color where {?husband <spouse> ?wife . ?husband <likes> ?color . OPTIONAL {?wife <likes> ?wifecolor FILTER (?wifecolor = ?color)} FILTER (!BOUND(?wifecolor))}

它至少当埃里克,但我还没有考卡尔。

还有一个更简单,更自然的方式来做到这一点在SPARQL 1.1(但它相当于可选/必然会溶液):

SELECT ?husband ?color
WHERE {
?husband <spouse> ?wife .
?husband <likes> ?color .
FILTER NOT EXISTS {?wife <likes> ?color}
}

分类:SQL 时间:2015-03-15 人气:0
本文关键词: SQL,SPARQL
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.711 (s). 10 q(s)