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

时间:2017-04-18 15:43:59

标签: 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 .
 ... 

我尝试?lu :xx (str(?lem)) .,但这被标记为错误。为什么? 同样,使用value ?lems {str(?lem)}.

我天真地认为绑定不会产生太多开销,因此上述解决方案可能是o.k.

当语言代码不同my previous question

时,相同的方法是否适用于搜索

1 个答案:

答案 0 :(得分:1)

三重模式中唯一允许的是变量,URI,文字(在对象中)和bnodes。因此,您需要使用BIND或投影将变量转换为字符串,而不是模式?lu :xx (str(?lem))。举个例子:

WHERE {
   ?lu :xx ?langLem .
   BIND(str(?langLem) AS ?lem)
}

或者,使用投影:

SELECT (str(?langLem) AS ?lem)
WHERE {
   ?lu :xx ?langLem .
}

我假设您正在尝试使用VALUES中的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 }