sparql - 从 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 ,将创建两个概念 - 一个用于英语,一个用于德语标签,这正是我想要的。有人可以帮我解决这个问题吗?
解决方案
推荐阅读
- pandas - 循环编程 Pandas 交叉表
- asp.net-mvc - 数据注释属性验证与 MVC 中的客户端验证有何不同?
- reactjs - 子组件相互更新?
- c# - 为什么此 c# 代码无法编译 - 来自 StreamingMedia 的资产包/对象
- android - Android 应用中的 Material Design 主题 - 菜单项图标未从主题继承
- javascript - 我无法在反应中访问数据
- python - 为什么 np.corrcoef() 标准化为统一?
- javascript - 如何将栅格图层导入到传单 web 地图中?
- spring-boot - spring boot dynamodb 吞吐量配置
- javascript - 如何对被推入最初为空的数组的索引项求和?