Слюни, обход графика, запрос для поиска корневых узлов

#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. Извините, я не был ясен в своем запросе. Вместо всех корневых данных мне нужны только корневые данные для определенной базы данных.