SPARQL 不返回 DBpedia 中存在的 owl:sameAs 个属性
SPARQL not returning owl:sameAs properties that exist in DBpedia
我在 中取得了一些成功,但对于某些(但不是全部)条目,其他 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}
}
returns
{ "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 端点在 DBpedia 上明确列出时 return 结果不是 owl:sameAs
?
我认为多个选项应该有效。也许是@ASKW 在评论中提出的 Virtuoso 问题?
您应该能够在单个正则表达式语句中获得不同的语言,例如:
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
可能会很昂贵,因为它有效地增加了搜索 space。因此,除非必要,否则请避免使用,并且在您的情况下不需要可选。
顺便说一句,另一个解决方案是使用 CONTAINS() 进行过滤。
我在
例如,
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}
}
returns
{ "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 端点在 DBpedia 上明确列出时 return 结果不是 owl:sameAs
?
我认为多个选项应该有效。也许是@ASKW 在评论中提出的 Virtuoso 问题?
您应该能够在单个正则表达式语句中获得不同的语言,例如:
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
可能会很昂贵,因为它有效地增加了搜索 space。因此,除非必要,否则请避免使用,并且在您的情况下不需要可选。
顺便说一句,另一个解决方案是使用 CONTAINS() 进行过滤。