まず、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:nil。nullこれは、プログラミング言語のリンク リストの末尾にあるポインターと同じ役割を果たします。
ただし、は 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の状況で十分であるため、まったく役に立ちません。