#graph #drools #traversal
#График #слюни #обход
Вопрос:
У меня есть класс на стороне Java с существенным поведением, таким как:
declare Datum
description: String
broader: List <Datum>
narrower: List <Datum>
end
Я хочу написать
query rootDatumsFor(Datum datum)
это предоставляет список корневых данных, то есть обрабатывает более широкое свойство и возвращает список каждого элемента данных, который имеет пустой более широкий список.
Я совершенно запутался, как это написать — в основном из-за задействованного отрицания.
Я думаю, что хочу что-то вроде
query rootDatumsFor( Datum datum )
not Datum() from $datum.broader
or
rootDatumsFor( $datum.broader )
end
Но я запутался в обеих частях. Если нет более широких терминов, которые не должны обнаруживаться, как мне «вернуть» текущее значение $datum? Я чувствую, что каждая часть хочет получить $result, и я хочу сделать $result: $datum, но это неверно.
И я не уверен, как выполнить рекурсию. Должен ли я иметь rootDatumsFor(datum, result) и делать это через привязку?
Я видел примеры, которые делают такие вещи, как Datum ( this == $datum), но, похоже, это не принимается, когда я пытаюсь это сделать.
Буду признателен за любую помощь, пока я продолжаю перечитывать документ, чтобы найти небольшую подсказку, как действовать дальше.
Ответ №1:
Чтобы найти все базовые факты с пустым broader
списком, все, что вам нужно сделать, это
query rootDatumsFor( Datum $datum )
$datum: Datum( broader.size() == 0 )
end
Комментарии:
1. Извините, я не был ясен в своем запросе. Вместо всех корневых данных мне нужны только корневые данные для определенной базы данных.