Sparql 使用不同的语言代码搜索文字
我有两个图,其中一个文字标记为@de,另一个未标记。我需要两者之间的连接。带有过滤器的普通解决方案运行速度非常慢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 . ...
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 }
我不明白第一个例子。过滤器看起来很奇怪,或者您真的希望主体和对象相同吗?