我想知道如何用sparql表达以下问题:
“把每个孩子都上麻省理工学院的父母给我”
更广泛地说,我想知道查询sparql的限制是什么?在数据库中有哪些问题不能用sparql来表示?
谢谢你的帮助
发布于 2014-04-28 05:06:09
您可以使用否定的存在量化来表示这一点。如下所示:
SELECT ?parent
WHERE { ?parent a :Parent .
FILTER NOT EXISTS {
?c :childOf ?parent .
?c :enrolledIn ?school .
FILTER (str(?school) != "MIT")
}
}这个问题询问所有没有孩子的家长,他们就读于与麻省理工学院不同的学校。
发布于 2014-04-27 16:44:25
您的问题涉及量化,是常规SPARQL 1.0中不能表示为一个查询的事物的一个例子。(它可以用SPARQL 1.1表示,如Jeen Broekstra的答案所示,也可以表示为OWL类。)
然而,许多SPARQL1.0实现已经开发了扩展来处理量化。一个商业例子是智能维语义平台,,它会给您提供如下内容:
SELECT ?parent
WHERE { ?child :hasParent ?parent FORALL(?child){ ?child :hasSchool "MIT" } }牛津大学计算机实验室的SPARQLog就是一个学术例子。我不知道这个系统是一个容易下载的系统,但是这篇论文是免费的,它提供了实现SPARQL量化的困难。
至于你关于SPARQL极限的问题,它太笼统了,无法用几句话来回答,但这里有一个指向相关论文的链接,同样涉及SPARQL1.0:http://arxiv.org/abs/cs/0605124
发布于 2014-04-27 14:05:37
对于具体问题,您可以阅读有关关系划分的内容。或者,你可以找到所有没有去麻省理工学院的孩子,找到他们的父母,并将这些父母从所有父母的名单中删除。
抱歉,帮不上斯派克的忙。
https://stackoverflow.com/questions/23322329
复制相似问题