繁体   English   中英

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}
}

回报

{ "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 owl:sameAsowl:sameAs部分显然具有西班牙语的结果,并且以http://es.dbpedia

当DBpedia SPARQL端点在DBpedia上明确列出时,为什么它们不返回owl:sameAs结果?

我认为多个可选项应该起作用。 也许@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()进行过滤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM