带有扩展字符的 sparql

sparql with extended characters

我正在尝试使用 sparql 和 运行 查询 dbpedia 以解决重音等扩展字符的问题。

例如这个查询 Albrecht_Dürer

select ?abstract ?thumbnail where { 
        dbpedia:Albrecht_D%C3%BCrer dbpedia-owl:abstract ?abstract ;
                                 dbpedia-owl:thumbnail ?thumbnail .
        filter(langMatches(lang(?abstract),"en"))}

我在这里读到 post,建议对 unicode 使用 \u 开关,但这没有用,即 dbpedia:Albrecht_D\uC3BCrer

在每种情况下,当我在 Virtuoso 中尝试时,SPARQL 编译器都会出错。我做错了什么?

更新:

我已经设法将 URL 放入如下:

SELECT * WHERE
{
  <http://dbpedia.org/resource/Albrecht_Dürer> dbpedia-owl:abstract ?abstract ;
                                     dbpedia-owl:thumbnail ?thumbnail .
            filter(langMatches(lang(?abstract),"en"))
}

它现在 "succeeds" 但没有 return 任何结果,即使我在查看指定页面时可以看到 Albrecht_Dürer 有摘要和缩略图。

语法没问题,因为我得到的结果是:

SELECT * WHERE
{
  <http://dbpedia.org/resource/Elvis_Presley> dbpedia-owl:abstract ?abstract ;
                                     dbpedia-owl:thumbnail ?thumbnail .
            filter(langMatches(lang(?abstract),"en"))
}

有人知道为什么吗?

我相信你不能把 unicode 字符放在 URI 中。您可以做的是通过正则表达式过滤它们。这是我想出的:

select distinct ?abstract ?thumbnail where 
{?uri rdfs:label ?label.
?uri dbpedia-owl:abstract ?abstract ;
dbpedia-owl:thumbnail ?thumbnail . 
FILTER (REGEX(STR(?label), "^Albrecht D\u00fcrer")) .
FILTER(langMatches(lang(?abstract),"en")).
}