首页 > 解决方案 > 如何在 SPARQL 中将字符串与变量绑定

问题描述

以下查询

PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX edm: <http://www.europeana.eu/schemas/edm/>
PREFIX ore: <http://www.openarchives.org/ore/terms/>

SELECT *
{
        SERVICE <http://sparql.europeana.eu> {
              ?CHO ore:proxyIn ?proxy;
              dc:title ?title ;
              dc:creator ?creator ;
              dc:date ?date .
              FILTER REGEX(str(?creator),"corelli","i").
              ?proxy edm:isShownBy ?mediaURL .
            } 
}

"corelli"从 Europeana 知识库中的一些作品中计算出一些标题。但是,当我尝试将变量?surname与字符串绑定时,"corelli"它什么也不返回。

例如

SELECT *
{
        values ?surname { "corelli" }
        SERVICE <http://sparql.europeana.eu> {

              ?CHO ore:proxyIn ?proxy;
              dc:title ?title ;
              dc:creator ?creator ;
              dc:date ?date .
              FILTER REGEX(str(?creator),?surname,"i").
              ?proxy edm:isShownBy ?mediaURL .
            } 
}

FILTER REGEX表达式似乎在那里不起作用(我正在使用 Blazegraph 实例来计算此查询)。如果我使用str(?surname)而不是?surname.

为什么会这样?

任何人都知道可以做些什么来设置 ?surname 一些字符串值(我可能想从另一个端点收集)并让查询找到数据?

标签: sparqlblazegraphfederated-queries

解决方案


您很可能看不到结果,因为查询超时。对于您正在使用的公共端点来说,它太重了。实际上,这两个查询都太繁重了,如果您尝试使用不同的字符串值进行几次尝试,您可能会注意到有时第一个查询也会超时,有时第二个查询会返回一些结果。


推荐阅读