我使用DBpedia在R中使用SPARQL获取页面类别。但是,它有一些问题。我正在使用的源代码:
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?categoryUri ?categoryName WHERE {
<http://dbpedia.org/resource/xxx> dcterms:subject ?categoryUri.
## xxx are random words (e.g. Agree, Film, Work, Plan...)
?categoryUri rdfs:label ?categoryName.
FILTER (lang(?categoryName) = "en")
}
问题是:
如果需要重定向的话,则无法检索类别(例如,同意 - >协议)
无法从上述源代码中使用消歧页面,因为在单词类别中有很多子页面(例如工作)
那么,我该如何解决上述问题呢?如果有人能提供你的帮助,我真的很感激!
答案 0 :(得分:1)
SPARQL只做你写的东西,所以没有任何魔力。如果某个资源:s
可能通过属性:p
连接到其他资源,请添加三元模式:s :p ?o .
- 有时您甚至可以考虑在传递解析时使用属性路径关闭:p
,即:s :p* ?o .
。
重定向已解决:
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dcterms: <http://purl.org/dc/terms/>
SELECT * WHERE
{ <http://dbpedia.org/resource/Agree> (dbo:wikiPageRedirects)* ?page
OPTIONAL
{ ?page dcterms:subject ?categoryUri}
}
请注意OPTIONAL
子句,这是必需的,因为并非DBpedia中的所有资源都属于某个类别。
包括消歧页面:
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dcterms: <http://purl.org/dc/terms/>
SELECT * WHERE
{ <http://dbpedia.org/resource/Agree> (dbo:wikiPageRedirects)*/(dbo:wikiPageDisambiguates)* ?page
OPTIONAL
{ ?page dcterms:subject ?categoryUri}
}