我有两张图,其中一个文字被标记(@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
时,相同的方法是否适用于搜索答案 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 }