首页 > 解决方案 > 从 sparql 中的绑定变量中提取具有不同语言的标签

问题描述

正如标题所示,我更喜欢英文和德文的标签。我试图通过它的语言提取每个标签并绑定到一个(新创建的)变量。

SELECT ?copyC ?enLabel ?defaultLabel
WHERE {
?targetC skos:prefLabel ?prefUri .
?prefUri skosxl:literalForm ?b
  # handle languages - english and german
  bind(if(langMatches(lang(?b),"en"),?b,?_) as ?enLabel)
  bind(if(langMatches(lang(?b),"de"),?b, ?_) as ?defaultLabel)
  ####
   .
  # create some uris
  BIND(IRI(CONCAT("http://example.com/", REPLACE(STR(?enLabel), "\\W", "", "i") )) AS ?copyC ) .
  BIND(IRI(CONCAT("http://example.com/", REPLACE(STR(?enLabel), "\\W", "", "i"),"_prefLabel_en" )) AS ?enLabelc ) .
    BIND(IRI(CONCAT("http://example.com/", REPLACE(STR(?defaultLabel), "\\W", "", "i"),"_prefLabel_de" )) AS ?defaultLabelc ) .  
  ####
}

玩具示例模型:

@prefix skos: <http://www.w3.org/2004/02/skos/core#> . 
@prefix skosxl: <http://www.w3.org/2008/05/skos-xl#> .  <http://example_copy.com/thing1> a skos:Concept ;     
    skosxl:prefLabel <http://example_copy.com/some_german_label>, <http://example>  <http://example_copy.com/some_german_label> a skosxl:Label ;     
    skosxl:literalForm "some german label"@de .  <http://example_copy.com/some_english_label> a skosxl:Label ;     
    skosxl:literalForm "some english label"@en .
    

结果:

?c                                ?enLabel                                         ?defaultLabel
1 <http://example.com/thing1> <http:/example.com/some_english_label>                                                                        
2                                                              <http:/example.com/some_german_label>

上面的查询跟随这篇文章: SPARQL filter language if possible in multiple value context

?englishLabelc 正确关联到绑定的 ?copyC 变量,但 ?defaultLabelc 不是。我的愿望是英语和德语标签都将正确地关联到绑定到 ?copyC 的 uri。我假设我如何“绑定” ?copyC 变量存在范围问题,但我不确定如何进行故障排除。如果我只是使用 ?b 变量来创建 ?copyC ,将创建两个概念 - 一个用于英语,一个用于德语标签,这正是我想要的。有人可以帮我解决这个问题吗?

标签: sparqlrdf

解决方案


推荐阅读