プログラミング言語を説明するオントロジーを作成していますが、次の問題があります。言語には強い型または弱い型があり、スキーマをこれら2つのオプションに制限する必要があります...では、どうすればよいでしょうか。
これが私のスキーマのサンプルです:
:Language a rdfs:Class .
:typing a rdf:Propery ;
rdfs:domain :Language ;
rdfs:range ? .
前もって感謝します。
EduardoSilvaが投稿した回答に同意しません。関数プロパティは、関数の範囲から1つの値のみを持つことができます。これは複数回使用できますが、OWL推論機能はそれらのトリプルからいくつかの含意を行うことができます。たとえば、いくつかの個人example:x1
プロパティと機能プロパティ:p
があり、データに次のように表示されている場合:
example:x1 :p :foo .
example:x1 :p :bar .
そうしないと、の機能的性質が侵害されるため、あなたはそれを推測する権利があり、同じ個人でなければなりません:foo
。あるいは、他の方法でとが異なる個人であることがわかっている場合、上記の2つの追加のトリプルを考えると、OWLモデルに一貫性がありません。:bar
:p
:foo
:bar
言い換えると、test:typing
示されている2つのタイプのスキームが実際に同じであることが必要である限り、一部のリソースに2つの値を設定することは問題ありません。これはおそらくあなたが望むものではありません。さらに、元の範囲の説明に記載されていない新しい値を含むトリプルストアを停止することはできません。test:typing
例えば:
:ruby a test:Language ;
test:typing test:duckTyping.
これは、機能プロパティであることと矛盾しません。test:typing
プロパティの範囲を特定の値の列挙の1つに制限するために、実際に必要なのはOWL列挙クラスです。例えば:
test:typing
a owl:ObjectProperty ;
rdfs:domain test:Language ;
rdfs:range [
owl:oneOf ( test:strongTyping test:weakTyping )
].
列挙されたクラスの拡張(許容値のセット)は、正確に指定された個人のコレクションです。他の人は許可されていません。
1つの解決策は、「機能プロパティ」を定義することだと思います。これは、「範囲」をクラスの1人のメンバーに制限するプロパティです(例:Person hasGender Gender、性別は女性または男性、1つのみ)。
これはフクロウで次のようになります(すぐにProtegeで作成されます):
<owl:ObjectProperty rdf:about="&test;typing">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="&test;Language"/>
<rdfs:range rdf:resource="&test;Type"/>
</owl:ObjectProperty>
(その場合、Typeには、強いサブクラスと弱いサブクラスがあります)。
お役に立てれば。