当我使用直接搜索查询时,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 ;
,则可以正常使用。
为什么会这样?
答案 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