【问题标题】:Sparql of DbPedia based upon name not subject基于名称而不是主题的 DbPedia 的 Sparql
【发布时间】:2015-11-13 15:03:02
【问题描述】:

我正在尝试查询 dbpedia 以获取一些人的数据,但我没有主题,只有我想查询的人的姓名和他们的出生/死亡日期。

我正在尝试按照这些思路进行查询。我想要姓普雷斯利的每个人的姓名、出生日期、死亡日期和缩略图。然后我打算做的是遍历返回的结果并找到与 Elvis Presley 1935-1977 的最佳匹配,这是我拥有的数据。

PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?Name ?thumbnail ?birthDate ?deathDate WHERE {
  {
dbo:name ?Name ;
dbo:birthDate ?birthDate ;
dbo:birthDate ?deathDate ;
dbo:thumbnail ?thumbnail ;
FILTER contains(?Name@en, "Presley") 
}

构建我的 sparql 查询的最佳方式是什么?

更新:

我整理了这个查询,它似乎在某种程度上有效,但我不完全理解它,我无法弄清楚包含,但它至少运行并返回结果。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?subject ?thumbnail ?birthdate ?deathdate WHERE {
  {
     ?subject rdfs:label "Elvis Presley"@en ;
                                     dbo:thumbnail ?thumbnail ;
                                      dbo:birthDate ?birthdate ;
                                      dbo:deathDate ?deathdate ;
       a owl:Thing .       

  }
  UNION
  {
    ?altName rdfs:label "Elvis Presley"@en ;
                                      dbo:thumbnail ?thumbnail ;
                                      dbo:birthDate ?birthdate ;
                                      dbo:deathDate ?deathdate ;
             dbo:wikiPageRedirects ?s .
  }
}

【问题讨论】:

  • 您的 UNION 子句大多是多余的,除了最后 2 个三元组模式,实际上它们或多或少地无用 w.r.t。包含一些有意义的信息。

标签: sparql dbpedia


【解决方案1】:

某些实体可能没有所有这些信息,因此最好使用可选。您可以使用 foaf:surname 直接检查姓氏。

select * where {
  ?s foaf:surname "Presley"@en
  optional { ?s dbo:name ?name }
  optional { ?s dbo:birthDate ?birth }
  optional { ?s dbo:deathDate ?death }
  optional { ?s dbo:thumbnail ?thumb }
}

【讨论】:

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