Sparql如何在联合搜索中选择一个结果询问另一个服务

Sparql如何在联合搜索中选择一个结果询问另一个服务,sparql,semantic-web,dbpedia,virtuoso,federated-queries,Sparql,Semantic Web,Dbpedia,Virtuoso,Federated Queries,如何选择一个rdf可能的标签将其发送到联合搜索 我有一个rdf记录,它有几个到另一个数据库的链接: <owl:sameAs rdf:resource="http://cantic.bnc.cat/registres/CUCId/a10035400"/> <owl:sameAs rdf:resource="http://viaf.org/viaf/61502721"/> <owl:sameAs rdf:resource="http://dbpedia.org/reso

如何选择一个rdf可能的标签将其发送到联合搜索

我有一个rdf记录,它有几个到另一个数据库的链接:

<owl:sameAs rdf:resource="http://cantic.bnc.cat/registres/CUCId/a10035400"/>
<owl:sameAs rdf:resource="http://viaf.org/viaf/61502721"/>
<owl:sameAs rdf:resource="http://dbpedia.org/resource/Delfi_Abella"/>
<owl:sameAs rdf:resource="http://id.loc.gov/authorities/names/nr2005020137"/>
<owl:sameAs rdf:resource="http://d-nb.info/gnd/158288475"/>
我怎么能告诉你用它就行了

问候

更新最初作为答案发布 也许我问的问题很糟糕:

我尝试在一次中完成两个不同的sparql。使用问题过滤器应用的第一部分的结果,我尝试询问DBPEDIA以获得我需要的结果

从没有任何过滤器的第一部分开始

PREFIX foaf:  <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX void: <http://rdfs.org/ns/void#>
PREFIX owl: <http://www.w3.org/2002/07/owl/>
PREFIX rdaGr2: <http://rdvocab.info/ElementsGr2/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbo:<http://dbpedia.org/ontology/>

SELECT *
WHERE {
  ?autid rdaGr2:dateOfBirth "1991" .
  ?autid owl:sameAs ?dbpediaid 
 }
我应用过滤器

PREFIX foaf:  <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX void: <http://rdfs.org/ns/void#>
PREFIX owl: <http://www.w3.org/2002/07/owl/>
PREFIX rdaGr2: <http://rdvocab.info/ElementsGr2/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbo:<http://dbpedia.org/ontology/>

SELECT *
WHERE {
  ?autid rdaGr2:dateOfBirth "1991" .
  ?autid owl:sameAs ?dbpediaid 
  FILTER regex(?dbpediaid,'dbpedia','i') .
}
我想将其发送到DBPEDIA的服务,但只需发送以下URL:

并非我从第一部分获得的所有URL:

http://cantic.bnc.cat/registres/CUCId/a10603050
http://viaf.org/viaf/169463957
http://cantic.bnc.cat/registres/CUCId/a10667283
http://viaf.org/viaf/303916880
http://cantic.bnc.cat/registres/CUCId/a10895814
http://viaf.org/viaf/107201286
http://d-nb.info/gnd/140511695
http://id.loc.gov/authorities/names/no2010103795
http://cantic.bnc.cat/registres/CUCId/a10985256
http://viaf.org/viaf/85925873
http://id.loc.gov/authorities/names/no2005021393
http://d-nb.info/gnd/141167203
http://dbpedia.org/resource/Emma_Roberts
因为其中一些与Dbpedia无关,然后Dbpedia会向我发送如下错误:

Virtuoso RDFZZ Error DB.DBA.SPARQL_REXEC('http://dbpedia.org/sparql', ...) returned Content-Type 'text/plain' status 'HTTP/1.1 400 Bad Request
'
Virtuoso 37000 Error SP030: SPARQL compiler, line 3: syntax error at '_' before ':'

SPARQL query:
define sql:big-data-const 0  SELECT ?naixement
 WHERE  {  <http://dbpedia.org/resource/Emma_Roberts> <http://dbpedia.org/ontology/birthPlace> ?naixement .
     FILTER (_::default-20-7 =  <http://arties.cbuc.es:8990/CCUCAF>) }

SPARQL query:
define sql:big-data-const 0 
#output-format:text/html
define sql:signal-void-variables 1 define get:soft "soft" define input:default-graph-uri <http://arties.cbuc.es:8990/CCUCAF> PREFIX foaf:  <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX void: <http://rdfs.org/ns/void#>
PREFIX owl: <http://www.w3.org/2002/07/owl/>
PREFIX rdaGr2: <http://rdvocab.info/ElementsGr2/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbo:<http://dbpedia.org/ontology/>

SELECT ?naixement
WHERE {
  ?autid rdaGr2:dateOfBirth "1991" .
  ?autid owl:sameAs ?dbpediaid 
  filter regex( str(?dbpediaid),'dbpedia','i')

  SERVICE <http://dbpedia.org/sparql>
  {
    ?dbpediaid dbo:birthPlace ?naixement
  }
FILTER regex?dbpediaid、'dbpedia'、'i'可能会失败,因为?dbpediaid不是字符串;但是一个URI。相反,您应该执行FILTER regexstr?dbpediaid、'dbpedia'、'i'。但是,第二个查询返回一些结果这一事实使URI似乎被隐式转换为字符串。不过,这可能是您正在使用的特定实现的扩展

但是,当我使用Apache Jena执行以下查询时,得到的结果为空:

prefix dbpedia: <http://dbpedia.org/resource/>
prefix dbpedia-owl: <http://dbpedia.org/ontology/>

select * where {
  bind( dbpedia:Emma_Roberts as ?dbpediaid )
  filter regex( ?dbpediaid,'dbpedia','i')

  service <http://dbpedia.org/sparql> {
    ?dbpediaid dbpedia-owl:birthPlace ?naixement
  }
}
如果更改为使用str?dbpediaid,则会得到以下结果:

prefix dbpedia: <http://dbpedia.org/resource/>
prefix dbpedia-owl: <http://dbpedia.org/ontology/>

select * where {
  bind( dbpedia:Emma_Roberts as ?dbpediaid )
  filter regex( str(?dbpediaid),'dbpedia','i')

  service <http://dbpedia.org/sparql> {
    ?dbpediaid dbpedia-owl:birthPlace ?naixement
  }
}

请注意,如果查询引擎首先执行服务部分,那么这可能是一个非常昂贵的查询,因为它将首先检索所有dbpedia owl:birthPlace三元组,将它们带回来,然后与您关心的特定查询进行匹配。如果?dbpediaid的值只是来自一些三重匹配,而不是像我上面所做的那样使用bind,那么可能会有不同的行为。

对不起,也许我需要解释一下badly@jordiPallares您发布的答案实际上不是答案,应该是对问题的编辑。我想我理解您试图做的事情:您试图从一个地方而不是DBpedia查询数据,然后在由服务{…}执行的DBpedia查询中使用其中一些值作为参数。对吗?然后你说,因为其中一些与Dbpedia无关,然后Dbpedia向我发送了这样一个错误:…。错误消息并没有说问题在于URI与DBpedia无关,而是说DBpedia返回的是文本而不是SPARQL结果。它返回的实际文本是来自DBpedia:Virtuoso 37000 error SP030:SPARQL编译器的错误消息,第3行:在“:”之前的“u”处的语法错误,我猜想,这是指查询的行:FILTER uo::default-20-7=。我想它是在抱怨默认值20-7,但我不确定。如果你收到了如此详细的错误信息,那么你应该在原始问题中发布它。你确实收到了比原始问题中更详细的错误。你把它贴在了回信里;那就是我复制它的地方!
http://arties.cbuc.cat/openccuc/a10985256/  http://dbpedia.org/resource/Emma_Roberts
http://cantic.bnc.cat/registres/CUCId/a10603050
http://viaf.org/viaf/169463957
http://cantic.bnc.cat/registres/CUCId/a10667283
http://viaf.org/viaf/303916880
http://cantic.bnc.cat/registres/CUCId/a10895814
http://viaf.org/viaf/107201286
http://d-nb.info/gnd/140511695
http://id.loc.gov/authorities/names/no2010103795
http://cantic.bnc.cat/registres/CUCId/a10985256
http://viaf.org/viaf/85925873
http://id.loc.gov/authorities/names/no2005021393
http://d-nb.info/gnd/141167203
http://dbpedia.org/resource/Emma_Roberts
Virtuoso RDFZZ Error DB.DBA.SPARQL_REXEC('http://dbpedia.org/sparql', ...) returned Content-Type 'text/plain' status 'HTTP/1.1 400 Bad Request
'
Virtuoso 37000 Error SP030: SPARQL compiler, line 3: syntax error at '_' before ':'

SPARQL query:
define sql:big-data-const 0  SELECT ?naixement
 WHERE  {  <http://dbpedia.org/resource/Emma_Roberts> <http://dbpedia.org/ontology/birthPlace> ?naixement .
     FILTER (_::default-20-7 =  <http://arties.cbuc.es:8990/CCUCAF>) }

SPARQL query:
define sql:big-data-const 0 
#output-format:text/html
define sql:signal-void-variables 1 define get:soft "soft" define input:default-graph-uri <http://arties.cbuc.es:8990/CCUCAF> PREFIX foaf:  <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX void: <http://rdfs.org/ns/void#>
PREFIX owl: <http://www.w3.org/2002/07/owl/>
PREFIX rdaGr2: <http://rdvocab.info/ElementsGr2/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbo:<http://dbpedia.org/ontology/>

SELECT ?naixement
WHERE {
  ?autid rdaGr2:dateOfBirth "1991" .
  ?autid owl:sameAs ?dbpediaid 
  filter regex( str(?dbpediaid),'dbpedia','i')

  SERVICE <http://dbpedia.org/sparql>
  {
    ?dbpediaid dbo:birthPlace ?naixement
  }
prefix dbpedia: <http://dbpedia.org/resource/>
prefix dbpedia-owl: <http://dbpedia.org/ontology/>

select * where {
  bind( dbpedia:Emma_Roberts as ?dbpediaid )
  filter regex( ?dbpediaid,'dbpedia','i')

  service <http://dbpedia.org/sparql> {
    ?dbpediaid dbpedia-owl:birthPlace ?naixement
  }
}
-------------------------
| dbpediaid | naixement |
=========================
-------------------------
prefix dbpedia: <http://dbpedia.org/resource/>
prefix dbpedia-owl: <http://dbpedia.org/ontology/>

select * where {
  bind( dbpedia:Emma_Roberts as ?dbpediaid )
  filter regex( str(?dbpediaid),'dbpedia','i')

  service <http://dbpedia.org/sparql> {
    ?dbpediaid dbpedia-owl:birthPlace ?naixement
  }
}
--------------------------------------------------------------------------------------
| dbpediaid            | naixement                                                   |
======================================================================================
| dbpedia:Emma_Roberts | <http://dbpedia.org/resource/Rhinebeck_(village),_New_York> |
--------------------------------------------------------------------------------------