2013-05-30 3 views
2

Я читал документацию Jena, чтобы попытаться создать простой подход к обратной цепочке. У меня есть простое правило обратной привязки, которое я применяю к небольшой онтологии. мне было интересно, если есть в любом случае, чтобы сделать обратный вывод на каждый запрос основе, так что не все entailments вычисляются, когда я получу свой InfModel с:Обратная связь Jena reasoner

Modelfactory.createInfModel(reasoner,model) 

, а только тогда, когда они просят. Так, ниже правила:

[rule2: (?x rdfs:type ?z)<-(?x ?rdf:type ?y),(?y rdfs:subClassOf ?z)] 

мог зарегистрировать запрос с просьбой найти все виды определенного класса, который будет затем огнь вышеуказанного правила?

+1

Вы прогресс в этом? –

+0

Извините за поздний ответ. Да, я был доволен ответом, который у меня был, но, думаю, мой вопрос был немного не по себе. Я знал, что Йена позволила вам снова использовать аргументаторов в полном обратном направлении, просто не очень очевидно, что это происходит, когда вы выписываете модель вывода, она возвращает грубый + график вычетов. Для меня это выглядело так, как будто он делал некоторые рассуждения о цепочке цепочек, но если вы назовете .size() на графике вывода, вы увидите, что его размер коррелирует с необработанным графиком. Таким образом, до команды write фактически не было сделано никаких рассуждений, что должно означать количество записей в виде запроса. – Colin

+0

Запись, по существу, должна запрашивать все троек, которые, как и просят модель, отображать утверждения, сопоставляющие '(null, null, null)', поэтому дело не только в том, что запись учитывается как запрос, но и что запись должна запускать запрос в порядке чтобы получить тройки, которые нужно написать. Документы на Model.size() говорят, что «для виртуализованной модели, например, созданной механизмом вывода, она вернет оценочную нижнюю границу для числа операторов в модели, но это возможно для последующих listStatements на такой модели чтобы узнать больше заявлений, чем указано в виде размера(), - это поведение, которое вы видели. –

ответ

1

Согласно documentation on the backward chaining engine, поведению, которое вы хотите уже то, что обратный логический вывод двигатель обеспечивает:

Если правило рассуждающее работают в режиме обратного цепного он использует логическое программирование (LP) двигатель с подобным стратегия выполнения для двигателей Prolog. Когда запрашивается модель вывода, запрос переводится в цель, и движок пытается удовлетворить эту цель путем сопоставления с любыми сохраненными тройками и путем разрешения цели против правил обратной цепочки. [Курсив]

Если определить Reasoner с правилом, что вы предоставили, а затем, когда вы просите тройки вида x rdf:type z, рассуждающий будет, в то время, огнем это правило.

+0

Да, я читал это, но меня это смущает. Вы знаете, о каком вопросе они говорят? Это просто выполнение простой get (тройной) на модели. Когда я вычисляю модель вывода с использованием getInfGraph, все вхождения, по-видимому, вычисляются до выполнения любого выполняемого запроса. Который я нахожу довольно странным. – Colin

+0

@ user2370200 Хм ... да, сейчас я играю с некоторыми наборами правил назад, и я вижу поведение, о котором вы говорите. Похоже, что Йена выясняет, какие значения должны создать экземпляр главы правила, а затем запустить запрос. Я точно не знаю, что здесь происходит, но я продолжу расследование. –

+0

Я думаю, что добился прогресса. Я назвал .size на моем infgraph и обнаружил, что размер указывает, что никаких задержек не возникает, когда мой аргумент связан с моделью, это заставляет меня думать, что когда я вызываю метод .write, это рассматривается как запрос. – Colin

Смежные вопросы