Sparql 如何搜索具有不同语言代码的字符串

Sparql 如何搜索具有不同语言代码的字符串,sparql,Sparql,我需要在两个具有相同字符串但语言代码不同的图形中搜索项目(“xx”@en和“xx”@eng-来自wordnet)。明显地 “xx”@en不等于“xx”@eng 可以使用(适当定义的前缀nlp): 但是,此查询花费的时间太长,是浪费时间的。应该可以执行以下操作: ?a nlp:lemma ?s . ?b rdfs:label ?s . 但我看不出,除了手动将wordnet三元组中的所有@eng更改为@en,我不想这样做 有解决办法吗? 谢谢大家! 您可以通过只过滤en和eng来减少搜索空间,但

我需要在两个具有相同字符串但语言代码不同的图形中搜索项目(“xx”@en和“xx”@eng-来自wordnet)。明显地 “xx”@en不等于“xx”@eng

可以使用(适当定义的前缀nlp):

但是,此查询花费的时间太长,是浪费时间的。应该可以执行以下操作:

?a nlp:lemma ?s . 
?b rdfs:label ?s .
但我看不出,除了手动将wordnet三元组中的所有
@eng
更改为
@en
,我不想这样做

有解决办法吗?
谢谢大家!

您可以通过只过滤
en
eng
来减少搜索空间,但是比较标记为字符串的语言的字符串部分的唯一方法是将它们转换为字符串

也就是说,如果存在除
en
eng
之外的语言标记字符串,则以下可能更有效:

select * where {
   ?a nlp:lemma ?as . 
   ?b rdfs:label ?bs . 
   filter (lang(?as) = "en" || lang(?as) = "eng")
   filter (str(?as)=str(?bs)) . 
     # more code using ?a and ?b
}

谢谢-它将查询处理时间减少了4倍!最后,我将
@en
@eng
文本添加到我生成的三元组中。现在它真的跑得很快。我不明白为什么wordnet princeton使用不同的语言代码。代码是ISO-639-2/T(3个字符),而不是在RDF中更常见的ISO-639-1(2个字符)。这将是有用的,有一个函数之间转换这些!
select * where {
   ?a nlp:lemma ?as . 
   ?b rdfs:label ?bs . 
   filter (lang(?as) = "en" || lang(?as) = "eng")
   filter (str(?as)=str(?bs)) . 
     # more code using ?a and ?b
}