SQWRL查询选择分组集的差异

时间:2018-04-02 20:35:03

标签: ontology protege swrl sqwrl

假设我有这个信息

Individual  |   Sex     |   HairColor
---------------------------------------
Joseph      |   Male    |   Black
Peter       |   Male    |   Black
Kevin       |   Male    |   Blonde
Andrew      |   Male    |   Brown
Boris       |   Male    |   Brown
Chistine    |   Female  |   Black
Julia       |   Female  |   Black
Julieth     |   Female  |   Brown
Judith      |   Female  |   Brown
Mary        |   Female  |   Blonde

我的个人都不同。我有一个男性和女性的阶级断言。而且我还将属性hasHairColor以其价值声明给每个人。

问题是,如何查询所有头发颜色与黑色不同的男性(本体可能有许多其他头发颜色)?

到目前为止,我已尝试使用错误结果进行此查询...

1. Male(?x) ^ Male(?y) ^ hasHairColor(?y, "Black") ^ differentFrom(?x, ?y) -> sqwrl:select(?x)
2. Male(?x) ^ Male(?y) ^ hasHairColor(?y, "Black")  .  sqwrl:makeSet(?males, ?x) ^ sqwrl:groupBy(?males, ?x) ^ sqwrl:makeSet(?blacks, ?y) ^ sqwrl:groupBy(?blacks, ?y)  .  sqwrl:notEqual(?males, ?blacks) -> sqwrl:select(?x)
3. Male(?x) ^ Male(?y) ^ hasHairColor(?y, "Black")  .  sqwrl:makeSet(?males, ?x) ^ sqwrl:groupBy(?males, ?x) ^ sqwrl:makeSet(?blacks, ?y) ^ sqwrl:groupBy(?blacks, ?y)  .  sqwrl:difference(?diff, ?males, ?blacks) -> sqwrl:select(?x)

我错过了联接的方式。结果有效,但只有当其中一个集合只有一个元素时(即如果我试图删除金发)

我正在使用带有SWRL和SQWRL Tab 2.0.5的Protege 5.2

提前致谢

1 个答案:

答案 0 :(得分:0)

问题仍然悬而未决,但解决方案是使用 SPARQL 来实现我想要的。

如果您需要有关未解决问题的更多信息。你可以在这里找到它 https://github.com/protegeproject/swrlapi/issues/43