首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对dbpedia和linkedmdb的联合查询

对dbpedia和linkedmdb的联合查询
EN

Stack Overflow用户
提问于 2017-03-17 01:21:02
回答 1查看 713关注 0票数 0

我正在编写一个联邦查询,根据dbpedia中的电影获取书籍,然后使用dbpedia中的电影名称检索相应的imdblink链接。当我添加linkedmdb服务时,我将得到一个空集。

这是我的密码

代码语言:javascript
复制
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX movie: <http://data.linkedmdb.org/resource/movie/>
PREFIX dc: <http://purl.org/dc/terms/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbp: <http://dbpedia.org/property/>

 SELECT distinct ?name ?author ?filmname ?imdbID WHERE {
 SERVICE <http://dbpedia.org/sparql> {
    ?book rdf:type dbo:Book .
   ?book foaf:name ?name .
   ?book dbp:author ?author .
   ?author foaf:name ?authname .
  ?book ^dbo:basedOn ?movie . 
   ?movie a dbo:Film .
   ?movie foaf:name ?filmname
   FILTER (str(?name) IN ("Royal Flash","White Oleander", "Possession: A Romance", "Misery", "Intensity", "The War of The Roses", "Momo", "The Sicilian", "Derailed", "Ragtime"))

}
SERVICE <http://data.linkedmdb.org/sparql> {
    ?filmname foaf:page ?imdbID .  
    ?filmname dc:title ?title .
 FILTER(regex(str(?imdbID), "www.imdb.com" ) )
}

}

我使用的是以下端点http://www.sparql.org/query.html

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-17 04:13:05

因为?filename变量,它不起作用。

  1. 在第一个SERVICE子句中,您得到了?movie foaf:name ?filmname,因此,它们是字符串文本
  2. 在第二个SERVICE子句中,?filmname是URI

如果分别运行两个SPARQL查询,将变得非常容易。

你要做的就是在标题上匹配,也就是改变

?filmname dc:title ?title .

?filmname dc:title ?filmname .

注意,由于字符串的不同类型,例如有和没有语言标记等,这可能无法工作。在这种情况下,您必须再次匹配词法形式,即使用临时变量?filmname1?filmname2并使用

FILTER(str(?filmname1) = str(?filmname2))

代码语言:javascript
复制
PREFIX  dbo:  <http://dbpedia.org/ontology/>
PREFIX  dbp:  <http://dbpedia.org/property/>
PREFIX  movie: <http://data.linkedmdb.org/resource/movie/>
PREFIX  owl:  <http://www.w3.org/2002/07/owl#>
PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX  rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX  foaf: <http://xmlns.com/foaf/0.1/>
PREFIX  dc:   <http://purl.org/dc/terms/>

SELECT DISTINCT  ?name ?author ?filmname1 ?imdbID
WHERE
  { SERVICE <http://dbpedia.org/sparql>
      { ?book    rdf:type    dbo:Book ;
                 foaf:name   ?name ;
                 dbp:author  ?author .
        ?author  foaf:name   ?authname .
        ?book   ^dbo:basedOn ?movie .
        ?movie  rdf:type   dbo:Film ;
                foaf:name  ?filmname1
        FILTER ( str(?name) IN ("Royal Flash", "White Oleander", "Possession: A Romance", "Misery", "Intensity", "The War of The Roses", "Momo", "The Sicilian", "Derailed", "Ragtime") )
      }
    SERVICE <http://data.linkedmdb.org/sparql>
      { ?filmname  foaf:page  ?imdbID ;
                  dc:title   ?filmname2
        FILTER regex(str(?imdbID), "www.imdb.com")
      }
    FILTER ( str(?filmname1) = str(?filmname2) )
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42847596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档