Правило Stardog не срабатывает

У меня возникли проблемы с написанием правильного правила Stardog. Поскольку я не нашел способа проверить синтаксис правила, я не знаю, является ли это синтаксисом или логической ошибкой. В любом случае, похоже, что правило не срабатывает при включении рассуждений (reasoning=SL в версии 2, reasoning=true в версии 3).

@prefix : <http://www.example.org/rules#> .
@prefix rule: <tag:stardog:api:rule:> .
@base <http://www.example.org/rules#> .

[] a rule:SPARQLRule ;
  rule:content """
PREFIX : <http://www.example.org/rules#>
PREFIX draft: <http://our/prefix#>
IF {
    ?x a draft:Obs; draft:has_code ?code .
    ?z a <http://www.w3.org/ns/sparql#UUID> . // OR: BIND (UUID() AS ?z)
   }
THEN {
    ?z a draft:Code .
    ?x draft:has_code ?z .
}
""" .

Я пытаюсь запустить правило с помощью следующего запроса SPARQL:

PREFIX : <http://our/prefix>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?code
FROM <tag:stardog:api:context:default> 
FROM <http://our/graph> 
WHERE {
    ?s rdf:type :Obs .
    ?obs :has_code ?code .
}

person tstorms    schedule 31.03.2015    source источник


Ответы (1)


Вероятно, это связано с цикличностью правила. Вы делаете вывод :has_code, который, в свою очередь, будет использоваться для запуска правила снова, и снова, и так далее.

Это немного легче визуализировать, если вы рассмотрите, как правила с более чем одним атомом в заголовке разбиты.

person Michael    schedule 03.04.2015