假设我有这个信息
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
提前致谢
答案 0 :(得分:0)
问题仍然悬而未决,但解决方案是使用 SPARQL 来实现我想要的。
如果您需要有关未解决问题的更多信息。你可以在这里找到它 https://github.com/protegeproject/swrlapi/issues/43