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