繁体   English   中英

如何使用SPARQL从Dbpedia获得总收入

[英]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

您有任何想法如何获得毛额吗?

  1. dbo:gross值不是节点,在其上使用rdfs:label没有意义。 相反,它直接是一个值。
  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM