オントロジーのクラス間の関係をOWL構文で定義する必要があります。私は何をすべきか?
2 に答える
#net
このように関連する#Node
ことは意味がないように思われるというcygri に同意し#net
ます#Node
。これを行うには、次のように記述できます。
<owl:Class rdf:ID="Node"/>
<owl:Class rdf:ID="net">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#hasPart"/>
<owl:someValuesFrom rdf:resource="#Node"/>
</owl/Restriction>
</rdfs:subClassOf>
</owl:Class>
2 つのクラスを直接接続するプロパティを定義したい場合もあります。例えば:
<#Node> <#isSimilarTo> <#Vertice> .
OWL でこれを行うには、以下を定義できますowl:AnnotationProperty
。
<owl:AnnotationProperty rdf:about="isSimilarTo"/>
<owl:Class rdf:ID="Node">
<isSimilarTo rdf:resource="#Vertice"/>
</owl:Class>
または、「パニング」を使用することもできます。つまり、クラスをインスタンスとして使用できます。次に例を示します。
<owl:ObjectProperty rdf:about="isSimilarTo"/>
<owl:Class rdf:ID="Node">
<rdf:type rdf:resource="&owl;Thing"/>
<isSimilarTo>
<owl:Thing rdf:about="#Vertice"/>
</isSimilarTo>
</owl:Class>
OWL DLでは、すべてのインスタンスを明示的に型指定する必要があることに注意してください。ここで、#Node
は のクラスとインスタンスの両方として宣言されていますowl:Thing
。owl:Thing
これは、 がクラスを含むことができるという意味ではありませんが#Node
、クラスとインスタンスという 2 つの異なるものを参照することを意味します。OWL DLでは、IRIが出現する文脈によって、その用語が何を指しているのかが常に明確になります。
まず、OWL を記述するために使用できる XML 構文が 2 つあることに注意してください (その他のいくつかの非 XML 構文に加えて)。スニペットは RDF/XML 構文です。もう 1 つの構文は OWL/XML です。OWL Primerには、両方の構文の例があります。
あなたのスニペットは言う:
- URI
<#net>
はクラスを識別します。 - このクラスには、「ネットワーク」というラベル (文字列) があります。
- このクラスは、URI で識別されるものと「hasPart」関係にあります
<#Node>
。
最初の 2 つのことは理にかなっていますが、最後の 1 つはあまり意味がありません。あなたが本当に言いたいことは次のとおりだと思います。
- URI
<#Node>
はクラスも識別します。 - URI
<#hasPart>
は、2 つのクラス ( ) の個体を接続するプロパティを識別しますowl:ObjectProperty
。 - hasPart プロパティのサブジェクトはネットワークです (つまり、hasPart のドメインは です
#net
)。 - hasPart プロパティのオブジェクトはノードです (つまり、hasPart の範囲は です
#node
)。
OWL Primer の例を見ると、これらのことを書き留める適切なアイデアが得られるはずです。ただし、RDF/XML 構文を手作業で記述するのは面倒で、エラーが発生しやすいことにも注意してください。TopBraid Composer のような OWL エディター、または OWL-API のようなプログラミング ライブラリーを使用して、OWL ファイルを作成することをお勧めします。どうしても手動で書きたい場合は、Turtle 構文を使用することをお勧めします (これも入門書に例があります)。これははるかに読みやすく、OWL と RDF のクエリ言語である SPARQL の学習に有利なスタートを切ることができるからです。