我试图通过sparql查询从dbpedia获取总数,但我不能。 我的代码是
library(SPARQL)
endpoint <- 'http://live.dbpedia.org/sparql'
options <- NULL
prefix <- c("db","http://dbpedia.org/resource/")
sparql_prefix <- "PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dc: <http://purl.org/dc/terms/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
"
q <- paste(sparql_prefix,
'SELECT ?actor ?movie ?gross
WHERE {
?m dc:subject <http://dbpedia.org/resource/Category:American_films> .
?m rdfs:label ?movie .
FILTER(LANG(?movie) = "en")
?m dbo:gross ?a .
?a rdfs:label ?gross .
FILTER(DATATYPE(?gross) = xsd:double)
?m dbp:starring ?a .
?a rdfs:label ?actor .
FILTER(LANG(?actor) = "en")
}')
results <- SPARQL(endpoint,q,ns=prefix,extra=options)$results
但是返回了一个空白的data.frame
你知道如何获得总分吗?
答案 0 :(得分:3)
true
的值不是节点,在其上使用dbo:gross
没有意义。相反,它直接是一个价值。rdfs:label
的类型不是dbo:gross
,通常是xsd:double
,但有些电影使用其他货币。因此,固定查询看起来像:
<http://dbpedia.org/datatype/usDollar>
请注意,此查询仅会列出同时包含SELECT ?actor ?movie ?gross
WHERE {
?m dc:subject <http://dbpedia.org/resource/Category:American_films> .
?m rdfs:label ?movie .
FILTER(LANG(?movie) = "en")
?m dbo:gross ?gross .
?m dbp:starring ?a .
?a rdfs:label ?actor .
FILTER(LANG(?actor) = "en")
}
和至少一个dbo:gross
的电影。如果这不是您想要的,请考虑使用dbp:starring
。