如何使用SPARQL从Dbpedia获得总计

时间:2015-10-18 21:42:24

标签: xml r sparql dbpedia

我试图通过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

你知道如何获得总分吗?

1 个答案:

答案 0 :(得分:3)

  1. true的值不是节点,在其上使用dbo:gross没有意义。相反,它直接是一个价值。
  2. rdfs:label的类型不是dbo:gross,通常是xsd:double,但有些电影使用其他货币。
  3. 因此,固定查询看起来像:

    <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