如何从 sqlwrl 查询中的 UNION 操作 select 元素
How to select elements from UNION operation in sqwrl query
我能够 select s3 的大小,它在规则 1 中给出了正确答案。但是,我想 select s3 中的所有元素。我尝试了规则 2,但它给了我例外 "error running SQWRL queries: error running Drools rule engine"
我的目标是检索所有具有呕吐或发烧症状的疾病。任何帮助将不胜感激。
规则 1:
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:size(?n, ?s3) -> sqwrl:select(?n)
规则 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:select(?s3)
根据 documentation,您应该尝试使用二元 built-in 谓词 sqwrl:element(?e, ?sd)
,第一个元素参数 ?e
未绑定,即:
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)
我能够 select s3 的大小,它在规则 1 中给出了正确答案。但是,我想 select s3 中的所有元素。我尝试了规则 2,但它给了我例外 "error running SQWRL queries: error running Drools rule engine"
我的目标是检索所有具有呕吐或发烧症状的疾病。任何帮助将不胜感激。
规则 1:
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:size(?n, ?s3) -> sqwrl:select(?n)
规则 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:select(?s3)
根据 documentation,您应该尝试使用二元 built-in 谓词 sqwrl:element(?e, ?sd)
,第一个元素参数 ?e
未绑定,即:
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)