Я пишу файл правил (Fuseki Generic Reasoner), рассчитывающий подсчитать число объектов rdf определенного субъекта, чтобы я мог использовать этот номер, чтобы решить, создавать ли новую тройку. Тем не менее, я не могу найти приемлемый подход для решения этой проблемы.
Используя sparql, легко подсчитывать объекты.
select (count(?object) as ?c) where {foo:bar foo:p ?object}.
Но мне кажется трудно реализовать операцию с файлом правил.
Вот файл черепашки в формате rdf:
@prefix foo: <http://example/>
foo:bar1 foo:p foo:obj_A .
foo:bar1 foo:p foo:obj_B .
foo:bar1 foo:p foo:obj_C .
foo:bar2 foo:p foo:obj_A .
foo:bar2 foo:p foo:obj_B .
Что я ожидаю (псевдокод):
[rule1: (?s foo:is 'true') <- (count ?s foo:p ?o number as ?c), greaterThan(?c, 2)]
[rule2: (?s foo:is 'false') <- (count ?s foo:p ?o number as ?c), le(?c, 2)]
Так что я могу получить тройной (foo: bar1 foo: is 'true') и (foo: bar2 foo: is 'false')