Protege 4.3 を使用して、いくつかの SWRL ルールを作成しています。その中に選言を含むルールを書くことは可能ですか?例えば:
Person(?x), Age(?x,?age), (?age < 10 or ?age > 30) -> blabla(?x)
10歳未満または30歳以上のすべての人を意味します
残念ながら、ルール本体で希望する方法で選言を直接表現することはできませんが、いくつかの回避策があります。最も直接的な解決策は、次の 2 つのルールを記述することです。
Person(?x), Age(?x,?age), ?age < 10 -> blah(?x)
Person(?x), Age(?x,?age), ?age > 30 -> blah(?バツ)
SWRL はクラス式の使用をサポートしているため (Martin Kuba のOWL 2 および SWRL チュートリアル を参照)、次のようにすることができます。
Person(?x), ((some Age xsd:integer[< 10]) or (some Age xsd:integer[> 30]))(?x) -> blah(?x)
しかし、他のオントロジー エディタで記述したり、手動で記述したりしても、Protege は正しく表示できますが、Protege でそのルールを入力することはできません。あなたはそれをさらに単純にして、これを行うことができます:
Person(?x), ((some Age (xsd:integer[< 10] or xsd:integer[> 30]))(?x) -> blah(?x)
または父親でさえ、これを行います:
(Person and (some Age (xsd:integer[< 10] or xsd:integer[> 30])))(?x) -> blah(?x)
もちろん、この時点で、blah(?x)の内容によっては、Protege が受け入れる一般的なクラス公理を使用できる場合もあります。たとえば、blahが実際にはクラスNot10To30YearOldPersonである場合、次のような公理を使用できます。
Person and (age some (xsd:integer[< 10] or xsd:integer[> 30])) subClassOf not TenToThirtyYearOldPerson