【问题标题】:Combining identical subjects in DBpedia SPARQL query在 DBpedia SPARQL 查询中组合相同的主题
【发布时间】:2014-09-26 09:53:45
【问题描述】:

我正在使用来自 PHP 的以下 SPARQL 查询,其中 $title 对于所有五个查询三元组都是相同的:

SELECT * WHERE {
    { <http://dbpedia.org/resource/$title> rdfs:label ?pageTitle . }
    UNION
    { <http://dbpedia.org/resource/$title> owl:sameAs ?sameAs . }
    UNION
    { <http://dbpedia.org/resource/$title> dbpedia-owl:abstract ?abstract . }
    UNION
    { <http://dbpedia.org/resource/$title> dbpedia-owl:thumbnail ?thumbnail . }
    UNION
    { <http://dbpedia.org/resource/$title> dbpedia-owl:wikiPageID ?wikiID . }
}

有没有办法简化这一点,使$title 在查询中只指定一次?我在想某个地方可能会涉及一个匿名节点?也许? :-)

【问题讨论】:

  • 你有什么理由想要在这里建立一个工会,特别是?看起来您的结果将是一个包含五列(每个变量一列)的表,但在每一行中,这些列中的一列将有一个值。您是否更喜欢包含两列的解决方案:一列表示属性,一列表示值?
  • @JoshuaTaylor 你是对的,因为dbpedia.org/sparql 的 HTML 输出(使用网络浏览器)你会得到你所描述的,但是 JSON 输出给了我一些没那么无用的东西:o)是有一种方法可以获得你所描述的输出而不做那些联合的事情(例如来自jimkont的答案 - 我正要尝试)

标签: php rdf sparql dbpedia triples


【解决方案1】:
SELECT * WHERE {
<http://dbpedia.org/resource/$title> ?p ?o . 
FILTER (?p IN (rdfs:label, owl:sameAs, dbpedia-owl:abstract, dbpedia-owl:thumbnail, dbpedia-owl:wikiPageID))  

您也可以使用VALUES (?x) {&lt;...&gt;, &lt;...&gt; },而不是FILTER (?x IN ()),正如另一个回复中提到的那样

【讨论】:

  • 我接受了这个答案,因为它摆脱了那些丑陋的UNIONs
【解决方案2】:

尝试重写查询如下:

SELECT * WHERE {
  { ?id rdfs:label ?pageTitle . }
  UNION
  { ?id owl:sameAs ?sameAs . }
  UNION
  { ?id dbpedia-owl:abstract ?abstract . }
  UNION
  { ?id dbpedia-owl:thumbnail ?thumbnail . }
  UNION
  { ?id dbpedia-owl:wikiPageID ?wikiID . }
} values (?id) { (<http://dbpedia.org/resource/$title>) }

这是一个非常好的 SPARQL 1.1 功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多