如何在sqwrl查询中从UNION操作中选择元素

时间:2017-02-04 16:20:16

标签: owl ontology reasoning swrl

我可以选择s3的大小,它在规则1中给出了正确的答案。但是,我想选择s3中的所有元素。我尝试了规则2,但它给了我一个例外“运行SQWRL查询时出错:运行Drools规则引擎时出错”

我的目标是找回所有症状呕吐或发烧的疾病。任何帮助将受到高度赞赏。

规则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) 

1 个答案:

答案 0 :(得分:0)

根据documentation,您应该尝试使用二进制内置谓词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)