首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尽管有过滤器,DBpedia查询还是多次返回某些音乐剧

尽管有过滤器,DBpedia查询还是多次返回某些音乐剧
EN

Stack Overflow用户
提问于 2011-02-28 04:07:28
回答 2查看 1.6K关注 0票数 3

我正在尝试对DBpedia使用SPARQL查询来检索音乐剧和一些相关属性的列表。然而,尽管使用了适当的过滤器(据我所知),结果还是不止一次地包含了许多音乐剧。下面是我的问题:

代码语言:javascript
复制
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX dbo: <http://dbpedia.org/ontology/>
    PREFIX dbpprop: <http://dbpedia.org/property/>
    SELECT ?label ?abstract ?book ?music ?lyrics
    WHERE { 
        ?play <http://purl.org/dc/terms/subject> <http://dbpedia.org/resource/Category:Broadway_musicals> ;
            rdfs:label ?label ;
            dbo:abstract ?abstract ;
            dbpprop:book ?book ;
            dbpprop:lyrics ?lyrics ;
            dbpprop:music ?music .
        FILTER (LANG(?label) = 'en')    
        FILTER (LANG(?abstract) = 'en')
        FILTER (LANG(?book) = 'en')
        FILTER (LANG(?lyrics) = 'en')
        FILTER (LANG(?music) = 'en')
    }

得到的列表有许多重复的条目。将查询粘贴到这里:DBpedia SPARQL Explorer,您将看到以“妈妈咪呀!”开头的查询。列表中有很多重复项。

你知道我在没有重复的情况下得到独特的结果会遗漏什么吗?谢谢!

格伦·麦克唐纳编辑,澄清这里是“复制”的音乐剧,而不是三重。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-28 12:43:15

SPARQL返回变量绑定。你的“副本”是你的投影属性中倍数的笛卡尔乘积。Mamma Mia有多个音乐作者和多个词作者,所以你可以得到他们的每一个可能的组合,这可能会在你的表中产生一行。

太痛苦了,是吧?“解决方案”是使用CONSTRUCT而不是SELECT,并处理返回图形而不是表。可能是这样的:

http://dbpedia.org/snorql/?query=PREFIX+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0D%0A++++PREFIX+dbo%3A+%3Chttp%3A%2F%2Fdbpedia.org%2Fontology%2F%3E%0D%0A++++PREFIX+dbpprop%3A+%3Chttp%3A%2F%2Fdbpedia.org%2Fproperty%2F%3E%0D%0A++++CONSTRUCT+%7B%0D%0A++++++++%3Fplay+rdfs%3Alabel+%3Flabel+%3B%0D%0A++++++++++++dbo%3Aabstract+%3Fabstract+%3B%0D%0A++++++++++++dbpprop%3Abook+%3Fbook+%3B%0D%0A++++++++++++dbpprop%3Alyrics+%3Flyrics+%3B%0D%0A++++++++++++dbpprop%3Amusic+%3Fmusic+.%0D%0A++++%7D%0D%0A++++WHERE+%7B+%0D%0A++++++++%3Fplay+%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Fterms%2Fsubject%3E+%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FCategory%3ABroadway_musicals%3E+%3B%0D%0A++++++++++++rdfs%3Alabel+%3Flabel+%3B%0D%0A++++++++++++dbo%3Aabstract+%3Fabstract+%3B%0D%0A++++++++++++dbpprop%3Abook+%3Fbook+%3B%0D%0A++++++++++++dbpprop%3Alyrics+%3Flyrics+%3B%0D%0A++++++++++++dbpprop%3Amusic+%3Fmusic+.%0D%0A++++++++FILTER+%28LANG%28%3Flabel%29+%3D+%27en%27%29++++%0D%0A++++++++FILTER+%28LANG%28%3Fabstract%29+%3D+%27en%27%29%0D%0A++++++++FILTER+%28LANG%28%3Fbook%29+%3D+%27en%27%29%0D%0A++++++++FILTER+%28LANG%28%3Flyrics%29+%3D+%27en%27%29%0D%0A++++++++FILTER+%28LANG%28%3Fmusic%29+%3D+%27en%27%29%0D%0A++++%7D

票数 5
EN

Stack Overflow用户

发布于 2011-02-28 17:58:31

复制品是完全相同的复制品吗?即每个重复结果的每个变量的每个值都是相同的

如果是,则在SELECT之后添加DISTINCT关键字,以强制SPARQL引擎丢弃重复的解决方案。

如果不是,那么Glenn是完全正确的,因为为各种属性提供了多个值,因此您将获得多个结果。您可以对子查询、GROUP BY等执行复杂的变通方法,但它们往往会导致查询效率较低。有时,您只需在客户端处理重复的内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5135577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档