シンプルなデータ マッピング
リレーショナル データベースのデータを RDF で表現するにはさまざまな方法があり、最適な方法は手元にある特定のデータに大きく依存します。継承、関連付け、および集計関係があると述べていますが、データの例がないと、最善のアプローチが何であるかを知るのは困難です. ただし、次のようなリソースに興味があるかもしれません。
継承
継承、関連付け、および集約の関係は通常、クラスのコンテキスト内で説明されますが、リレーショナル データベースのコンテキストでは意味がある場合とない場合があります。あなたの情報がデータベースでどのように表現されているかを知らなければ、
ChildTable rdfs:subClassOf ParentTable
意味があるかどうか。たとえば、各行が動物の個々のインスタンスを表すAnimalテーブルがあり、さらに各行が哺乳類の個々のインスタンスを表すMammalテーブルがある場合、それぞれが哺乳類のインスタンスは、対応する動物の行へのキーも持っています。たとえば、次の表があるとします。
Animal
AnimalId, LatinName, CasualName, FavoriteFood
71, Heloderma suspectum, "Jim the Gila Monster", "Eggs"
72, Canis lupus familiaris, "Semour", "Pizza"
73, Canis lupus familiaris, "Spot", "Kibble"
74, Felis catus, "Fluffy", "Fish"
75, Homo sapiens, "Fry", "Bachelor Chow"
Mammal
AnimalId, isBipedal
72, false
73, false
74, false
75, false
哺乳類と動物の間の遺伝を表すには、次のように言えます。
Mammal rdfs:subClassOf Animal
もちろん、Mammal
withAnimalId 72
が with と同じリソースでAnimal
あることを確認する必要がありAnimalId 72
ますが、リレーショナル データの直接マッピングを既に実装している場合、これは問題になりません。
協会
純粋な RDF(S) では、継承以上のことはできません。もちろん、ドメインとプロパティの範囲を宣言し、いくつかの型情報を推測することはできますが、たとえば、それぞれAnimal
が少なくとも 1 つの好きな食べ物を持っていることを保証する方法については、実際には多くのことを行うことはできません。少なくとも、rdfs:comment
データに何を含める必要があるかを示すために、プロパティとクラスに s の注釈を付ける必要があります。例えば:
Animal rdfs:comment "Each animal instance MUST have:
exactly one ID (hasID);
exactly one latin name (hasLatinName); and
exactly one favorite food (hasFavoriteFood).
Each animal instance MAY have:
up to one casual name (hasCasualName)." .
ただし、OWL を使用できる場合は、制限クラスとサブクラスの公理を使用して、これらのタイプの関係を表現できます。たとえば、次のOWL公理は、前のコメントで表現された制約を表しています:
Animal SubClassOf (hasId exactly 1 xsd:integer)
Animal SubClassOf (hasLatinName exactly 1 xsd:string)
Animal SubClassOf (hasFavoriteFood exactly 1 xsd:string)
Animal SubClassOf (hasCasualName max 1 xsd:string)
集計
RDF (および OWL) は、個人に関する情報を宣言的に表現するためのものであり、オブジェクト指向プログラミングのオブジェクトである必要はありません。オブジェクトの有効期間や所有権の概念が組み込まれていないため、関連付けと集約の区別はほとんどなくなります。OWLで表現できる公理のタイプは、アソシエーション関係の場合と同様に、プロパティが集約関係にどのように適合するかを説明するのにも役立ちます。
ただし、RDF および OWL クラスは、オブジェクト指向プログラミング クラスではなく、セットとしてより適切に考えられることに注意してください。これの優れた機能の 1 つは、多くの一般的なプログラミング言語とは異なり、クラスが 1 つの親クラスを持つことに制限されないことです。これは、集約が必要なオブジェクト指向プログラミングのいくつかのケースでは、多重継承の RDF 類似物が同様に機能することを意味します。