我有如下所示的查询:
SELECT DISTINCT ?dataset ?title WHERE {
?dataset a dcat:Dataset ;
dcterms:title ?title ;
dcterms:description ?description .
{ ?dataset dcterms:title ?title .
?title bif:contains "'keyword_1'" }
UNION
{ ?dataset dcterms:description ?description .
?description bif:contains "'keyword_1'" }
{ ?dataset dcterms:title ?title .
?title bif:contains "'keyword_2'" }
UNION
{ ?dataset dcterms:description ?description .
?description bif:contains "'keyword_2'" }
}
从语义上讲,这个查询应该返回在它们的“标题”或“描述”(这是第一个 UNION 子句)中具有“keyword_1”并且在它们的“标题”或“描述”中具有“keyword_2”的所有数据集(第二个 UNION条款)。目的是将这两个 UNION 子句交叉在一起,即仅获取满足这两个子句的那些数据集。
这个验证器告诉我查询在语法上是正确的。但是,当向 Virtuoso 发送查询时,会返回以下错误:
Virtuoso 37000 Error SP031: SPARQL compiler: Internal error: sparp_find_triple_with_var_obj_of_freetext(): lost connection between triple pattern and an ft predicate
SPARQL query:
define sql:big-data-const 0
output-format:text/html<br>
define sql:signal-void-variables 1
你知道发生了什么吗?我不明白 Virtuoso 在说“三重模式和 ft 谓词之间失去联系”时试图告诉我什么......
提前致谢!