【问题标题】:How to select elements from UNION operation in sqwrl query如何在 sqwrl 查询中从 UNION 操作中选择元素
【发布时间】:2017-02-04 16:20:15
【问题描述】:

我可以选择 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) 

【问题讨论】:

    标签: owl ontology reasoning swrl


    【解决方案1】:

    根据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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 2020-12-29
      相关资源
      最近更新 更多