[英]How to get gross from Dbpedia with SPARQL
我试图通过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
您有任何想法如何获得毛额吗?
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
。 如果这不是您想要的,请考虑使用OPTIONAL
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.