Как написать ИЛИ операцию в запросе sqwrl
Для операции AND в запросе sqwrl это выглядит так:
Symptom(fever) ^ Symptom(vomiting) ^ Disease(?y) ^ hasSymptom(?y,fever) ^ hasSymptom(?y,vomiting) -> sqwrl:select(?y)
Из приведенного выше правила он выбирает заболевания, которые имеют оба симптома. А как насчет операции ИЛИ в запросе sqwrl? Я хочу выбрать заболевания с симптомами лихорадки или рвоты? Любая помощь будет высоко оценена.
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)
Я думаю, что вы ищете, можно сделать с коллекциями. С их помощью вы можете определить дизъюнкцию. Я не уверен, но, возможно, ваш желаемый запрос выглядит так:
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)