Sparql 使用不同的语言代码搜索文字

Sparql 使用不同的语言代码搜索文字,sparql,Sparql,我有两个图,其中一个文字标记为@de,另一个未标记。我需要两者之间的连接。带有过滤器的普通解决方案运行速度非常慢 WHERE { ?tok nlp:lemma ?lem . ?tok2 wn:form ?t . filter (?tok2 = ?t) . ... 与fuseki一起使用的改进版本是 WHERE { ?tok nlp:lemma ?lem . Bind (str(?lem) as ?lems) . ?lu :orthForm ?lems . ...

我有两个图,其中一个文字标记为@de,另一个未标记。我需要两者之间的连接。带有过滤器的普通解决方案运行速度非常慢

WHERE {
 ?tok nlp:lemma ?lem . 
 ?tok2 wn:form ?t . 
 filter (?tok2 = ?t) . 
 ...  
与fuseki一起使用的改进版本是

WHERE {
 ?tok nlp:lemma ?lem .
 Bind (str(?lem) as ?lems) .
 ?lu :orthForm ?lems .
 ... 
我试过了?lu:xx str?lem。但这被标记为错误。为什么? 类似地,使用value?lems{str?lem}

我天真地假设绑定不会产生太多开销,因此上面的解决方案可能没有问题


当语言代码不同时,相同的方法是否也适用于搜索?三重模式中唯一允许的是变量、URI、对象中的文字和B节点。因此,您需要使用绑定或投影将变量转换为字符串,而不是模式?lu:xx str?lem。举第一个例子:

WHERE {
   ?lu :xx ?langLem .
   BIND(str(?langLem) AS ?lem)
}
或者,使用投影:

SELECT (str(?langLem) AS ?lem)
WHERE {
   ?lu :xx ?langLem .
}
我假设您试图在value?lems{str?lem}中使用VALUES语句。值通常用于将变量绑定到一组值,例如:

VALUES ?lem { :Euclid :Gauss }
?lem rdfs:label ?label .
…将?lem绑定到:Euclid和:Gauss并执行查询,返回结果的并集。即,它与:

{ :Euclid rdfs:label ?label }
UNION
{ :Gauss rdfs:label ?label }

我不明白第一个例子。过滤器看起来很奇怪,或者您真的希望主体和对象相同吗?