我从上一个问题中获得了一些成功,但是对于某些(但不是全部)条目,获取其他DBpedia语言的结果是失败的。
例如,
SELECT * WHERE {
VALUES ?label {"Acid Rain"@en "Chocolate"@en}
?en rdfs:label ?label .
optional { ?en owl:sameAs ?es . FILTER regex(str(?es), "es.dbpedia") }
filter not exists {?en a skos:Concept}
}
退货
{ "head": { "link": [], "vars": ["label", "en", "es"] },
"results": { "distinct": false, "ordered": true, "bindings": [
{ "label": { "type": "literal", "xml:lang": "en", "value": "Chocolate" } , "en": { "type": "uri", "value": "http://dbpedia.org/resource/Chocolate" } , "es": { "type": "uri", "value": "http://es.dbpedia.org/resource/Chocolate" }},
{ "label": { "type": "literal", "xml:lang": "en", "value": "Acid Rain" } , "en": { "type": "uri", "value": "http://dbpedia.org/resource/Acid_Rain" }} ] } }
请注意,没有西班牙语结果"Acid Rain"
。但是,http://dbpedia.org/page/Acid_rain的owl:sameAs
部分显然具有西班牙语的结果,并且以开头。http://es.dbpedia
当DBpedia SPARQL端点owl:sameAs
清楚地列在DBpedia上时,为什么它们不返回结果?
我认为多个可选项应该已经奏效。也许@ASKW在评论中建议在Virtuoso中解决问题?
您应该能够在单个regex语句中获得不同的语言,例如:
FILTER regex(str(?es), "(es|pt).dbpedia") }
万一您在寻找标签的西班牙语和其他语言版本,有一种更简单的方法。如果是这样,请尝试以下操作:
SELECT *
WHERE {
VALUES ?label {"Acid Rain"@en "Chocolate"@en}
?en rdfs:label ?label .
?en rdfs:label ?allLabels .
FILTER (lang(?allLabels) = "es")
}
请注意,这样做OPTIONAL
可能会很昂贵,因为它会有效地增加搜索空间。因此,除非有必要,否则应避免使用,并且在您的情况下,则不需要可选的。
另一个解决方案BTW是使用CONTAINS()进行过滤。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句