0

Protege 4.3 を使用して、いくつかの SWRL ルールを作成しています。その中に選言を含むルールを書くことは可能ですか?例えば:

Person(?x), Age(?x,?age), (?age < 10 or ?age > 30) -> blabla(?x)

10歳未満または30歳以上のすべての人を意味します

4

1 に答える 1

2

残念ながら、ルール本体で希望する方法で選言を直接表現することはできませんが、いくつかの回避策があります。最も直接的な解決策は、次の 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

ルールではなく公理

于 2014-03-20T14:16:06.297 に答える