如何将外部SPARQL端点中的字符串标签与本地本体中的字符串标签相匹配?

如何将外部SPARQL端点中的字符串标签与本地本体中的字符串标签相匹配?,sparql,dbpedia,federated-queries,Sparql,Dbpedia,Federated Queries,但是约翰·麦凯恩不是一个占位符,他是唯一一个出现的人,只是用一堆不同的语言。但是,我预计还会有更多的查询出现,因为我可以运行以下查询: name strip_name name2 John McCain (en) | John McCain | John McCain John McCain (de) | John McCain | John McCain John McCain (es) | John McCain | John McCain ... 我可以用

但是约翰·麦凯恩不是一个占位符,他是唯一一个出现的人,只是用一堆不同的语言。但是,我预计还会有更多的查询出现,因为我可以运行以下查询:

name              strip_name    name2
John McCain (en) | John McCain | John McCain
John McCain (de) | John McCain | John McCain
John McCain (es) | John McCain | John McCain
...

我可以用其他我知道应该在我的本体中匹配的名字重复这个技巧,比如“杰米·奥利弗”和“唐纳德·特朗普”,但出于某种原因,在查询的一般版本中显示的唯一名字是约翰·麦凯恩。谁能给我解释一下吗?我肯定不理解服务块的某些部分,但我尝试了许多不同的配置,无法使此查询正常工作。感谢您的帮助。

我们的想法是远程执行筛选(
FILTER(STR(?name)=?name2
)(在DBpedia上)。正如注释所示:两个
UNION
子句相互独立,因此变量
?s
不共享。这意味着什么?第二个
UNION
子句缺少
的rdf:type foaf:Person。
三重模式,否则,它会变得非常低效。此外,没有具体说明实现了联邦查询。例如,可能首先检索来自远程端点的整个数据,然后将其与本地数据联接。或者将本地数据“管道化”到
服务
查询中。问题似乎在于Stardog无法执行此“管道化”:其思想是执行过滤(
FILTER(STR(?name))=?name2
)远程(在DBpedia上)。正如注释所示:两个
UNION
子句相互独立,因此变量
?s
不共享。这意味着什么?第二个
UNION
子句缺少
的rdf:type foaf:Person。
三重模式,否则,它会变得非常低效。此外,没有具体说明实现了联邦查询。例如,可能首先检索来自远程端点的整个数据,然后与本地数据联接。或者本地数据“管道”到
服务
查询中。问题似乎是Stardog无法执行此“管道”:
name              strip_name    name2
John McCain (en) | John McCain | John McCain
John McCain (de) | John McCain | John McCain
John McCain (es) | John McCain | John McCain
...
PREFIX ex: <http://www.semanticweb.org/caeleanb/ontologies/twittermap#>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?name (STR(?name) AS ?strip_name) ?name2
WHERE {
  ?p ex:displayName ?name2 .
  SERVICE <http://dbpedia.org/sparql> {
    { ?s rdfs:label ?name .
      ?s rdf:type foaf:Person . 
      FILTER(?name="Bill Nye"@en)}
    UNION
    { ?x rdfs:label ?name .
      ?x dbo:wikiPageRedirects ?s . 
    FILTER(?name="Bill Nye"@en)}

  }
  FILTER(STR(?name) = ?name2) .
}
name           strip_name  name2
Bill Nye (en) | Bill Nye | Bill Nye