3

私は現在、保護者を使用してオントロジーを開発しており、ノードがリストの最後のノードであるかどうかを判断したいと考えています。したがって、基本的にリストはノードを指し、すべてのノードにはコンテンツがあり、別のノードを持つことができます。

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)

4

1 に答える 1

2

まず、RDF には組み込みの List 構造があり、次の方法で使用できます。

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:nilnullこれは、プログラミング言語のリンク リストの末尾にあるポインターと同じ役割を果たします。

ただし、は Web 上の既存のデータでよく使用されていますが、述語およびrdf:Listの使用を制限するものではありません。そのため、不整合を引き起こすことなく、特定のリストに多くの最初の要素を含めることができます。rdf:firstrdf:rest

したがって、連結リストを厳密にモデル化したい場合は、OWL のかなり表現力豊かな機能が必要です。私は少し前にそれを行いました。これはhttp://purl.org/az/Listにあります。

Nodea には a が必要であると指定したため、空のクラスがあるのは正常ですnextNode。ノードにコンテンツまたは次の要素があることを強制しないでください。カーディナリティは最大 1 であり、ドメインと範囲hasNextは Node であり、それEndNodeは次のノードのないノードであると言うべきです。しかし、それだけでは十分ではありませんEndNode。無限シーケンスまたはループがある可能性があります。

ループや無限シーケンスを回避したい場合は、推移的なプロパティを定義hasFollowerし、クラスに少なくとも 1 つのフォロワーがあることを示す必要がありEndNodeます。

全体として、OWL で厳密なリストを実装することは、パフォーマンスの面で完全に最悪であり、ほとんどの場合、ほとんどrdf:Listの状況で十分であるため、まったく役に立ちません。

于 2012-04-17T14:16:06.697 に答える