0

我想检索给定 isocode 语言缩写的完整语言名称。我的 SPARQL 查询如下(使用硬编码语言"fr"@en):

PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?language ?isocode
WHERE
{ ?language dbpprop:iso ?isocode.
  ?language a dbo:Language.
  FILTER (?isocode="fr"@en)
}

通过在线DBPedia 端点运行它会产生零结果——尽管我希望检索“法语”。这段代码在一两年前曾经工作过(如果我没有完全弄错的话)。由于没有弹出错误,我有点不知所措。法语DBPedia资源包含 language 和 iso 属性。

4

1 回答 1

2

您可以直接搜索所需的语言,而不是过滤。例如:

SELECT ?language WHERE {
  ?language dbpprop:iso "fr"@en .
  ?language a dbpedia-owl:Language .
}

SPARQL 结果

结果是

language
http://dbpedia.org/resource/Canadian_French
http://dbpedia.org/resource/New_England_French
http://dbpedia.org/resource/French_language
http://dbpedia.org/resource/Colonial_French

如果您确实希望将?isocode变量绑定到"fr"@en,则可以使用VALUES子句来指定(如果需要,也可以使用其他子句)。例如:

SELECT ?language ?isocode
WHERE {
  VALUES ?isocode { "fr"@en "fro"@en "fra"@en }
  ?language dbpprop:iso ?isocode .
  ?language a dbpedia-owl:Language .
}

SPARQL 结果

如果你真的想过滤,你仍然可以这样做。例如:

SELECT ?language ?isocode
WHERE {
  ?language dbpprop:iso ?isocode .
  ?language a dbpedia-owl:Language .
  FILTER ( str(?isocode) = "fr" && langMatches( lang(?isocode), "EN" ) )
}

SPARQL 结果

于 2013-08-12T18:07:33.420 回答