【问题标题】:How to write OR operation in sqwrl query如何在 sqwrl 查询中编写 OR 操作
【发布时间】:2017-02-02 00:21:22
【问题描述】:

对于 sqwrl 查询中的 AND 操作,是这样的:

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

从上面的规则来看,就是选择两种症状都有的疾病。 sqwrl 查询中的 OR 操作呢?我想选择有症状发烧或有呕吐症状的疾病?任何帮助将不胜感激。

【问题讨论】:

    标签: owl ontology reasoning swrl sqwrl


    【解决方案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:element(?e, ?s3) -> sqwrl:select(?e)

    【讨论】:

      【解决方案2】:

      我认为,您正在搜索的内容可以通过 collections 完成。使用它们,您可以定义析取。我不确定,但您想要的查询可能如下所示:

      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)
      

      【讨论】:

      • 我遇到了这个异常:运行 SQWRL 查询时出错:运行 Drools 规则引擎时出错:
      • 但是,我阅读了有关集合的文档并建立了另一个规则:症状(发烧)^症状(呕吐)^疾病(?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 时它不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2016-06-28
      相关资源
      最近更新 更多