【问题标题】:Sparql about dbpedia:World_Wide_WebSparql 关于 dbpedia:World_Wide_Web
【发布时间】:2014-01-08 17:26:11
【问题描述】:

我是语义网的新手,我正试图弄清楚如何编写一个 SPARQL 查询以从 dbpedia 中提取有关特定主题的所有信息。不仅是礼节,还有与之相关的一切。

我什至不知道如何开始这样的查询。

我想获得有关万维网的所有三元组。

PREFIX dbpedia: <http://dbpedia.org/resource/>

SELECT DISTINCT ?s ?p ?o 
WHERE  {
  ?s ?p ?o .
  ?s ?p dbpedia:World_Wide_Web  

  #  FILTER( lang(?s) = "en" )   -- doesn't work with filter

}Limit 100

这只会返回一些带有 owl:sameAs 谓词的三元组

你能帮帮我吗?

【问题讨论】:

  • “与它相关的一切”并不是很清楚你的意思。 RDF 大约是三元组。对事物的唯一描述是它是主体或客体的三元组。您的查询只是询问所有以 dbpedia:World_Wide_Web 为对象的主题。
  • 您的过滤器工作正常。但是,只有字面量才有语言,而且字面量不能成为 RDF 中三元组的主题,所以不会得到任何结果。
  • 我想了解有关用于 Web 的编程语言以及开发 WWW 的人以及为 WWW 的事件......类似的东西
  • 您可以浏览dbpedia数据,例如dbpedia.org/page/World_Wide_Web。你真正想要摆脱的是什么?请注意,“要求代码的问题必须证明对正在解决的问题的最低限度的理解。包括尝试的解决方案、它们为什么不起作用以及预期的结果。”您正在寻找什么样的预期结果?
  • 我想知道如何从 获得有关 TBL 的信息

标签: sparql dbpedia


【解决方案1】:

您可以通过这样的查询获得所有以dbpedia:World_Wide_Web 作为主语或宾语的三元组(当然,这只给出 1000)。对于任何字面量的对象,我们可以限制它们的语言值:

select ?s ?p ?o where {
  values ?web { dbpedia:World_Wide_Web }
  { ?web ?p ?o bind( ?web as ?s ) } union
  { ?s ?p ?web bind( ?web as ?o ) }

  # for literal objects, take only English ones
  filter( !isLiteral(?o) || langMatches(lang(?o),'en') )
}
limit 1000

SPARQL results

这包括如下结果,这似乎与您在 cmets 中提到的一致:

http://dbpedia.org/resource/World_Wide_Web  http://dbpedia.org/property/company  http://dbpedia.org/resource/CERN
http://dbpedia.org/resource/World_Wide_Web  http://dbpedia.org/property/inventor  http://dbpedia.org/resource/Tim_Berners-Lee

这将产生 很多 的结果,因此您可能希望限制可以使用的属性。您应该能够执行以下操作,但是在当前的 DBpedia 端点上,它会导致错误。

select ?s ?p ?o where {
  values ?web { dbpedia:World_Wide_Web }
  values ?p   { rdf:type dbpedia-owl:abstract }

  { ?web ?p ?o bind( ?web as ?s ) } union
  { ?s ?p ?web bind( ?web as ?o ) }
}
limit 1000
Virtuoso 37000 Error SP031: SPARQL compiler: Internal error: sparp_gp_attach_filter_cbk(): attempt to attach a filter with used variable

SPARQL query:
define sql:big-data-const 0 
#output-format:text/html
define sql:signal-void-variables 1 define input:default-graph-uri <http://dbpedia.org> select ?s ?p ?o where {
  values ?web { dbpedia:World_Wide_Web }
  values ?p   { rdf:type dbpedia-owl:abstract }

  { ?web ?p ?o bind( ?web as ?s ) } union
  { ?s ?p ?web bind( ?web as ?o ) }
}
limit 1000

作为一种解决方法,您可以这样做:

select ?s ?p ?o where {
  values ?web { dbpedia:World_Wide_Web }

  { ?web ?p ?o bind( ?web as ?s ) }
  union
  { ?s ?p ?web bind( ?web as ?o ) }

  filter( ?p in (rdf:type, dbpedia-owl:abstract ))  ###
}
limit 1000

SPARQL results

【讨论】:

  • 哇!非常感谢约书亚!我从来没有这样想过。我还可以插入我想要允许的谓词列表吗?这会像 values ?p { rdf:type, dc:terms/alternative } bind { what you did } 吗?
  • 太棒了!如何将查询限制为我键入的几个(列表)属性?
  • 太棒了!非常感谢!如果你在罗马尼亚,我会给你一杯啤酒!你帮了我很多。我会试着看看为什么这不起作用,如果我发现我会发布答案。再次感谢!
  • @AlexDoro 我更新了答案。 values ?p { p1 p2 ... } 的简单答案应该有效,但 DBpedia 的端点出于某种原因拒绝了它。您可以改为使用 ``filter( ?p in (p1, p2, ...) )`。希望filtervalues 一样高效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多