假设我有这些信息
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)
我在连接的方式上遗漏了一些东西。结果有效,但仅当其中一组只有一个元素时(即,如果我尝试删除金发女郎)
我将 Protege 5.2 与 SWRL 和 SQWRL Tab 2.0.5 一起使用
提前致谢