REGEX过滤器名称上的SPARQL

时间:2016-09-09 13:51:38

标签: regex sparql

当我使用直接搜索查询时,REGEX过滤器名称上的SPARQL有效。它不使用查询正则表达式。

PREFIX dbpedia: <http://dbpedia.org/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dcterms: <http://dublincore.org/2010/10/11/dcterms.rdf#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX grs: <http://www.georss.org/georss/point>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select distinct ?iri ?logo ?description 
  {
    values ?hasLogo { foaf:depiction dbpedia-owl:thumbnail }
    values ?hasName { foaf:name rdfs:label }
    ?iri a                    dbpedia-owl:Company ;
         dbpedia-owl:abstract ?description ;
         filter(regex(?Name, "Lufthansa", "i" )) ;
        ?hasLogo              ?logo .
        filter( langMatches(lang(?description),"en") )
    }

由于filter(regex(?Name, "Lufthansa", "i" )) ;

,上面的代码无效

如果我使用直接搜索?Name "Lufthansa"@en ;,则可以正常使用。

为什么会这样?

2 个答案:

答案 0 :(得分:2)

尝试通过sparql.org's query validator运行查询。这不合法。看起来你想要以下内容。您仍然必须以通常的方式获取变量绑定。只有这样才能添加额外的过滤器。您不能只使用过滤器表达式代替三重模式(部分)。

select distinct ?iri ?logo ?description  {
  values ?hasLogo { foaf:depiction dbpedia-owl:thumbnail }
  values ?hasName { foaf:name rdfs:label }
  ?iri a dbpedia-owl:Company ;
       dbpedia-owl:abstract ?description ;
       ?hasName ?Name ;
       ?hasLogo ?logo .

  filter langMatches(lang(?description),"en")
  filter(regex(?Name, "Lufthansa", "i" )) ;
}

答案 1 :(得分:2)

select distinct ?iri ?name ?description {
?iri a dbpedia-owl:Company ;
rdfs:label ?label ;
foaf:name ?name ;
dbpedia-owl:abstract ?description .
#foaf:depiction|dbpedia-owl:thumbnail ?logo .
filter(regex(?name, "\\blufthansa\\b","i" )) .
filter(regex(?label, "\\blufthansa\\b","i" ))
# filter( langMatches(lang(?description),"en") )
}
limit 100