在SPARQL中过滤后显示重复结果

时间:2014-02-22 15:03:16

标签: rdf sparql rdfs

我是SparQL的新手,目前我正在努力获得正确的结果,我已经在过去的3天内对此进行了实验,在广泛的Google搜索结束时,我觉得是时候要求帮助

我遇到的问题是查询结果正在显示,但是我只想用“Semantic Web”模块显示大学名称,但是即使使用当前的FILTER,结果显示所有三所大学其中只有两个“肯特大学和曼彻斯特大学”有这个特定的模块。我希望有人能够引导我朝着正确的方向前进,因为我不相信坎特伯雷基督教堂也应该被展示出来,更不用说展示它有那个模块了。

我目前尝试的代码:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX a: <https://dl.dropboxusercontent.com/u/270116418/schema.rdf>
SELECT DISTINCT ?University ?Modules
WHERE {
?u rdf:type a:University. ?c rdf:type a:Courses. ?m rdf:type a:Modules.
?u a:uniName ?University. ?c a:coursesName ?Courses. ?m a:moduleName ?Modules . 
FILTER regex( ?Modules, "Semantic")
}

以下是直接链接:

http://librdf.org/query?uri=http%3A%2F%2Fdl.dropboxusercontent.com%2Fu%2F270116418%2FAssignment_1.rdf+http%3A%2F%2Fdl.dropboxusercontent.com%2Fu%2F270116418%2FAssignment_1_2.rdf+http%3A%2F%2Fdl.dropboxusercontent.com%2Fu%2F270116418%2FAssignment_1_3.rdf&query=PREFIX+rdf%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E+%0D%0A%0D%0APREFIX+a%3A+%3Chttps%3A%2F%2Fdl.dropboxusercontent.com%2Fu%2F270116418%2Fschema.rdf%3E%0D%0A%0D%0A%0D%0ASELECT+DISTINCT+%3FUniversity+%3FModules%0D%0AWHERE+{%0D%0A%3Fu+rdf%3Atype+a%3AUniversity.+%3Fc+rdf%3Atype+a%3ACourses.+%3Fm+rdf%3Atype+a%3AModules.%0D%0A%3Fu+a%3AuniName+%3FUniversity.+%3Fc+a%3AcoursesName+%3FCourses.+%3Fm+a%3AmoduleName+%3FModules+.+FILTER+regex%28+%3FModules%2C+%22Semantic%22%29%0D%0A}%0D%0AORDER+BY+%3FUniversity&language=sparql&Run+Query=Run+Query&.cgifields=json&.cgifields=raw

提前谢谢你,

Chris.H

1 个答案:

答案 0 :(得分:2)

你有一个断开连接部分的模式。

追溯?模块,你只能到达?m。

?u rdf:type a:University.
?c rdf:type a:Courses.
?u a:uniName ?University.

如果在(?u,?c)上有多个匹配,那么它将使?m和?模块的匹配多个,从而导致重复。

使用SELECT *执行查询以查看完整详情。