首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用限制时查询DBPEDIA SPARQL以包含所需的值

如何在使用限制时查询DBPEDIA SPARQL以包含所需的值
EN

Stack Overflow用户
提问于 2017-03-12 03:31:42
回答 1查看 129关注 0票数 0

我正在尝试用10本随机书籍来填充我的本地本体。我想把2本已知的书包括在测试清单中,也就是说,在我想指定的10本书中,有2本是随机的,其余8本可以是随机的。

我不知道如何将过滤器和极限结合在一起。

我想要查询中的2本书和8本随机书籍。

代码语言:javascript
运行
复制
FILTER (str(?name) IN ("Panther in the Basement", "Endless Night"))

我的代码

代码语言:javascript
运行
复制
SELECT  ?book ?date
WHERE {
?book rdf:type dbo:Book .
?book foaf:name ?name .
     ?book dbp:releaseDate ?date .

}
limit 10
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-12 09:27:24

还不清楚为什么要这样做,但是可以通过一个更复杂的查询来完成,这个查询是

  1. 其他8本书的资料
  2. 这两本书的数据
代码语言:javascript
运行
复制
SELECT DISTINCT  ?book ?date
WHERE
  {   { SELECT DISTINCT  ?book ?date
        WHERE
          { ?book  rdf:type         dbo:Book ;
                   foaf:name        ?name ;
                   dbp:releaseDate  ?date
            FILTER ( ?book NOT IN (dbr:Panther_in_the_Basement, dbr:Endless_Night) )
          }
        LIMIT   8
      }
    UNION
      { VALUES ?book { dbr:Panther_in_the_Basement dbr:Endless_Night }
        ?book  rdf:type         dbo:Book ;
               foaf:name        ?name ;
               dbp:releaseDate  ?date
      }
  }

注意,由于DBpedia数据集并不那么干净,并且有一些具有多个releaseDate值的书籍,所以这个查询可能会返回重复的图书。要克服这一问题,您必须使用GROUP BY + SAMPLE (或GROUP_CONCAT)

实际上,我认为这个查询的更紧凑的版本也应该能工作,但是它不会在DBpedia上返回任何结果

代码语言:javascript
运行
复制
SELECT DISTINCT  ?book ?date
WHERE
  { ?book  foaf:name        ?name ;
           dbp:releaseDate  ?date
      { { SELECT  ?book
          WHERE
            { ?book  rdf:type  dbo:Book }
          LIMIT   8
        }
      }
    UNION
      { VALUES ?book { dbr:Panther_in_the_Basement dbr:Endless_Night } }
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42743420

复制
相关文章

相似问题

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