2011-07-06 24 views
2

ORタイプステートメントを使用する必要があるSWRLルールを実装する方法を理解しようとしています。このシナリオは次のとおりです。オントロジには、 "hasProcess"というオブジェクトプロパティと多数のクラスのプロセスを持つ "MachineTool"クラスがあります。私たちは、 "EndMilling"または "Drilling"のhasProcess値を持つMachineToolの個人のリストを取得したいと考えています。ORステートメントを使用するSWRLルール

もし「または」ステートメントがSWRLルールは以下のようになりますせた。

MachineTool(?mt)^hasProcess(?mt, ?p)^(EndMilling OR Drilling)(?p) -> MyMachineTools(?mt) 

しかし、そのルールが合法ではありません。誰かが私たちが探しているものを達成できるルール(または一連のルール)を知っていますか?私は(、門徒は、現時点では奇妙なことされているが、それをテストしていない)一つの代替は可能性が考えていた:

EndMilling(?p) -> MyProcesses(?p) 
Drilling(?p) -> MyProcesses(?p) 
MachineTool(?mt)^hasProcess(?mt, ?p)^MyProcesses(?p) -> MyMachineTools(?mt) 

私はこの問題のすべての感想をお待ちしております。

+0

使用しているProtegeのバージョンを指定します。 – Kaarel

+0

私はその部分を明確にすべきだったと思います。最終的には、OWL APIを使用してルールをプログラムで作成して実行する必要があります。 Protege(3.xと4.1の両方)は、ルールがどのように見えるかを理解するまで、もっと複雑なルールで遊んでいます。 – Christian

+0

私の答えを少し編集しました。おそらくもっと役立っているかもしれません。一般に、どのSWRLサーフェスシンタックスが「公式」であり、どのツールがどのシンタックスをサポートしているのかは不明である。私はあなたの例がうまくいくと思います。 ProtegeとOWL-API開発者にバグ報告をしてください。 – Kaarel

答えて

3

OR は、OWLのObjectUnionOfを使用して表現された場合、SWRLルールでは法律であり、です。

私はこの問題が、あなたのコードサンプルに特集されているようなSWRLサーフェイス構文のツールサポートにあると思います。 Protege 3.xはこのOR構造を構文的にサポートしていません(少なくともチェックしたことはありませんでした)。Protege 4.1はそれをレンダリングできますが、それを再解析することはできません(rc5でチェックしただけです)。しかし、最近のOWL-API(v3.2.x)を使用していて、XMLや機能スタイルの構文のような構文を使用している場合、すべてがうまくいくはずです。 (Protege 3.xと4.xは大きく異なるOWL APIを使用するので、Protege 4.xとOWL-API 3.xでの作業をお勧めします)

ORを取得できない場合SWRLの場合、ObjectUnionOfと同等の名前付きクラスを使用できます。あなただけ述べているので、あなたの仕事は、周りの(第二のコードサンプル)は、意味的に等価な声明を与えるものではありません

EquivalentClasses(my-processes, ObjectUnionOf(end-milling, drilling)) 

machine-tool(?mt)^has-process(?mt, ?p)^my-processes(?p) 
                 -> my-machine-tool(?mt) 

注:

SubClassOf(end-milling, my-processes) 
SubClassOf(drilling, my-processes) 

述べると同じです:

SubClassOf(ObjectUnionOf(end-milling, drilling), my-processes) 

等価を述べるには、他の含意も必要です。

SubClassOf(my-processes, ObjectUnionOf(end-milling, drilling)) 

あなたのルールは簡単OWLで表現することができることに注意してください、すなわち、あなたがこのルールにまったくSWRLを必要としない。(可能な場合)OWLのすべてを記載した

SubClassOf(
    ObjectIntersectionOf(
     :machine-tool 
     ObjectSomeValuesFrom(
     :has-process 
     ObjectUnionOf(
      :end-milling 
      :drilling 
     ) 
    ) 
    ) 
    :my-machine-tool 
) 

は、いくつかの利点があり、例えばより優れたツールサポート(SWRLの推論システムよりも多くのOWL推論があります)、より強力な推論が可能になります(SWRL推論システムは既知の個人にのみルールを適用します)。

+0

私は希望の結果を得るために私の回避策を手に入れました。私はまだあなたの提案に興味があります。 SubClassOfの意味が分からないというあなたのコメントは、推論(Pelletなど)を使用していない場合にのみ発生します。私はSWRLを使って、このプログラムや関連するプログラムのさまざまなクエリを実行し、結果を得るために推論を使用しています。私は、推論者が指定されたプロセスのサブクラスを引っ張っていると思う(少なくともそうだと思われる)。あなたの下の例では、 "my-machine-tool"クラスのインスタンスをreasonerを使用せずに取得できますか? – Christian

+0

私は本当にあなたの質問を理解していませんが、私は私の答えを少し編集しました...あなたが何か働くことができたら、ここに答えを投稿してください(あなた自身の質問に答えることはOKです)。 「インスタンスを取得する」に関して:この「取得」を行うには、常にツールが必要です。 Reasonerは物事を意味的に正確かつ完全な形で取り出すツールです。したがって、常に推論を使用してください(もちろん、それはしばしば行うことを計算するには時間がかかりすぎない限り...)。 – Kaarel

関連する問題