2012-03-27 4 views
3

私は現在、protgeを使ってオントロジーを開発しており、ノードがリストの最後のものかどうかを確認したいと考えています。だから、ノードと基本的にリストポイントとすべてのノードには、いくつかのコンテンツを持っており、別のノードを持つことができます。Protege:not hasNextを表現する方法は?

List startsWith some Node

Node hasContent some Content

Node hasNext some Node

今、私は名前のサブクラスを定義したいと思いますEndNodeそれは別のものを指していませんNode。これは私がこれまで試したものですが、分類した後、EndNodeは常にNothingに等しい:

Node and not(hasNext some Node)

Node and (hasNext exactly 0 Node)

答えて

2

まず、内蔵のリストには、使用可能なRDFに構築あり次のように:

ここ
ex:mylist rdf:type rdf:List . 
ex:myList rdf:first ex:firstElement . 
ex:myList rdf:rest _:sublist1 . 
_:sublist1 rdf:first ex:SecondElement . 
_:sublist1 rdf:rest rdf:nil . 

、あなたがリストの最後に到達知るために、あなたはrdf:nilと呼ばれる特別なリストが必要です。これは、プログラミング言語のリンクリストの末尾にあるnullポインタと同じ役割を果たします。 rdf:Listはよくウェブ上の既存のデータに使用されていても

しかし、それはどのような方法で述語rdf:firstrdf:restの使用を制限しないので、あなたは起動せず与えられたリストのための多くの最初の要素を持つことができます矛盾。

実際にリンクリストを厳密にモデル化したい場合は、OWLのかなり表現力豊かな機能が必要です。私はそれをしばらく前にして、それはhttp://purl.org/az/Listに見つけることができます。

NodeにはnextNodeが必要であることを指定して、空のクラスがあるのは正常です。ノードに内容または次の要素があることを強制するべきではありません。基数が最大1であり、ドメインと範囲がhasNextであり、EndNodeが次のノードを持たないノードであると言うべきです。しかし、まだ十分ではありません。それは、EndNodeがまったく存在しないことを課すものではないからです。無限のシーケンスやループがあるかもしれません。

ループまたは無限シーケンスを回避するには、推移的プロパティhasFollowerを定義し、クラスEndNodeに少なくともフォロワーが1つ存在しなければならないとします。

すべてのすべてでは、OWLに厳格なリストを実装することは完全にパフォーマンスの期間中に吸引しrdf:Listは状況の広い大半のために十分であるとして全く役に立たないほとんどの時間です。

+0

"rdf:リストは、大部分の状況で十分です。" OWLの推論を使用する場合を除き、OWLのRDF/XMLシリアライゼーションで使用されているRDFボキャブラリー用語を使用することはできません。 : –

+0

ジョシュア、私が知っている推論家のための本当の問題ではない。私はちょうどrdfでオントロジーを作ろうとした:リストはOWLクラスとして使用され、推論家(この場合はHermiTとFacT ++)は文句を言わなかった。 –

+0

同意。厳密に言えば、それは[OWL1で禁止されている](http://www.w3.org/TR/owl-semantics/mapping.html#4.2)であることに注意することが重要です。 OWL2の場合は許可されていますか? –

関連する問題