DBPedia 城市重定向的 SPARQL 处理

SPARQL handling of DBPedia city redirects

此 SPARQL 语句有效:

PREFIX s: <http://dbpedia.org/resource/Del_Mar,_California>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT * WHERE {
  OPTIONAL { s: dbp:officialName ?officialName . }
  OPTIONAL { s: dbp:name ?foaf_name . }
  #-- ... [ about 20 more lines like the above ] ...
} LIMIT 2;

但有些城市有重定向。例如,Pacific_Beach,_California 重定向到 Pacific_Beach,_San_Diego。我该如何处理?

我读过 Joshua Taylor's answer to Retrieving dbpedia-owl:type value of resource with dbpedia-owl:wikiPageRedirect value?,我想知道我的 s: 前缀是否把我搞砸了?我似乎无法实施他的解决方案:

select ?type where {
  dbpedia:Cupertino dbpedia-owl:wikiPageRedirects*/dbpedia-owl:type ?type
}

一些其他资源建议使用 union:

阅读 Wikibooks 章节,XQuery/DBpedia with SPARQL - Football teams 让我更加困惑。

我正在尝试学习这些东西,但我确实迫切需要 "just make it work"。一个解决方案和一些阅读链接将不胜感激!

我建议再看一看“this answer 来自 Joshua Taylor”。其中一项建议是使用 SPARQL 检查数据。所以试试这个查询:

SELECT * WHERE {
   <http://dbpedia.org/resource/Pacific_Beach,_California> ?p ?o
}

这为您提供了 URI <http://dbpedia.org/resource/Pacific_Beach,_San_Diego> 的所有可用数据。请注意,在这种情况下,它不包括 dbpedia-owl:wikiPageRedirects 属性。重定向似乎是 DBPedia 浏览器内部的,不包含在 DBPedia 数据中。

使用上述查询将帮助您找到数据中的实际内容(在本例中没有什么特别有趣的)。

Pacific Beach, San Diego 不重定向到任何东西,但它是一些资源的重定向 target:

is dbo:wikiPageRedirects of

  • dbr:Pacific_Beach,_CA
  • dbr:Pacific_Beach,_California
  • dbr:Pacific_Beach,_San_Diego,_CA
  • dbr:Pacific_Beach,_San_Diego,_California
  • dbr:Pacific_Beach,_San_Diego_California

这意味着修改后的查询版本应该可以正常工作:

PREFIX s: <http://dbpedia.org/resource/Pacific_Beach,_San_Diego>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT * WHERE {
  OPTIONAL { s: dbp:officialName ?officialName . }
  OPTIONAL { s: dbp:name ?foaf_name . }
  #-- ... [ about 20 more lines like the above ] ...
} LIMIT 2

SPARQL results

请注意,使用 prefix 缩写单个 IRI 有点不寻常。使用 values 块来绑定特定变量会更常见,您可以在其余查询中使用该变量。也就是说,我会将该查询写为:

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

SELECT * WHERE {
  values ?s { <http://dbpedia.org/resource/Pacific_Beach,_San_Diego> }
  OPTIONAL { ?s dbp:officialName ?officialName . }
  OPTIONAL { ?s dbp:name ?foaf_name . }
  #-- ... [ about 20 more lines like the above ] ...
} LIMIT 2;

这样做的好处是,如果您想搜索其他城市的值,只需将它们添加到值列表即可。现在,如果您想添加一个重定向到其他内容的值,那不是问题。您只想添加一个非可选 模式来帮助您遵循重定向目标:

SELECT * WHERE {
  values ?x { <http://dbpedia.org/resource/Pacific_Beach,_California> }
  ?x dbo:wikiPageRedirects* ?s .
  OPTIONAL { ?s dbp:officialName ?officialName . }
  OPTIONAL { ?s dbp:name ?foaf_name . }
  #-- ... [ about 20 more lines like the above ] ...
} LIMIT 2

SPARQL results

最后请注意,如果您从浏览器复制和粘贴 URI,请确保在查询中使用正确的 URI。当您在浏览器中访问 DBpedia 资源时,例如 http://dbpedia.org/resource/foo,您将被重定向到浏览器中的人类可读形式 http://dbpedia.org/page/foo。这只是 DBpedia 的一个怪癖。 (实际上,当 Web 浏览器发出请求时,他们应该使用内容类型协商,并且只 return 前者的 HTML 文档。)