Как написать операцию ИЛИ в запросе sqwrl

Для операции AND в запросе sqwrl это похоже на:

Symptom(fever) ^ Symptom(vomiting) ^ Disease(?y) ^ hasSymptom(?y,fever) ^ hasSymptom(?y,vomiting) -> sqwrl:select(?y)

Из приведенного выше правила выбираются заболевания, имеющие оба симптома. Как насчет операции ИЛИ в запросе sqwrl? Я хочу выбрать заболевания, для которых характерна лихорадка или рвота? Любая помощь будет высоко оценена.


person Muzogeek    schedule 02.02.2017    source источник


Ответы (2)


Правильный ответ для выбора заболеваний, сопровождающихся симптомами рвоты или лихорадки.

Symptom(fever) ^ Symptom(vomiting) ^ Disease(?x) ^ Disease(?y) ^ has_symptom(?x, fever) ^ has_symptom(?y, vomiting)˚sqwrl:makeSet(?s1, ?x) ^ sqwrl:makeSet(?s2, ?y)˚sqwrl:union(?s3, ?s1, ?s2) ^ sqwrl:element(?e, ?s3) -> sqwrl:select(?e)

person Muzogeek    schedule 05.02.2017

Я думаю, то, что вы ищете, можно сделать с помощью коллекций. С их помощью вы можете определить дизъюнктуру. Я не уверен, но, возможно, ваш желаемый запрос выглядит так:

Symptom(?fever) ^ Symptom(?vomiting) ^ Disease(?x) ^ Disease(?y) ^
hasSymptom(?x, ?fever) ^ hasSymptom(?y, ?vomiting) ˚
sqwrl:makeSet(?s1, ?x) ^ sqwrl:makeSet(?s2, ?y) ˚
sqwrl:union(?s3, ?s1, ?s2)
-> sqwrl:select(?s3)
person marli    schedule 02.02.2017
comment
Я получаю это исключение: ошибка при выполнении запросов SQWRL: ошибка при запуске механизма правил Drools: - person Muzogeek; 03.02.2017
comment
Однако я прочитал документацию по коллекциям и построил другое правило: Симптом(лихорадка) ^ Симптом(рвота) ^ Болезнь(?x) ^ ​​Болезнь(?y) ^ has_symptom(?x, лихорадка) ^ has_symptom(?y, рвота) )˚sqwrl:makeSet(?s1, ?x) ^ ​​sqwrl:makeSet(?s2, ?y)˚sqwrl:union(?s3, ?s1, ?s2) ^ sqwrl:size(?n, ?s3) -> sqwrl:select(?n) Я не получаю никаких исключений, и он возвращает мне правильный результат для размера. НО он не работает при выборе s3. - person Muzogeek; 03.02.2017