あなたがやりたいことは、お気に入りのプログラミング言語のカスタムコードを使用して、IMOの方がうまく処理できるようです。このようなことをOWLで表現するのは難しく、確かに効率的ではありません。
しかし、FWIW、ここにあなたができることがあります。シートベルトを締めてください。ここから、高度なOWL2モデリングへの旅が始まります。基本色が「青」、「緑」、「赤」であると仮定します。3つの文字列を含むデータ型を定義できます(私はTurtle構文を使用します)。
:baseColor a rdfs:Datatype;
owl:equivalentClass [
a rdfs:Datatype;
owl:withRestrictions ( [ xsd:pattern "blue|green|red" ] )
] .
次に、変更された色を定義できます。
:modColor a rdfs:Datatype;
owl:equivalentClass [
a rdfs:Datatype;
owl:withRestrictions (
[ xsd:pattern "(dark|light)?(blue|green|red)(ish)?" ]
)
] .
、、などのデータ型をさらに増やすこともでき:lightColor
ます。:darkColor
mediumColor
:Color
次に、データ型プロパティを持つクラスを作成し:hasColor
ます。
:hasColor a owl:DatatypeProperty;
rdfs:domain :Color;
rdfs:range [
a rdfs:Dataype;
owl:unionOf ( :baseColor :modColor )
]
:Color a owl:Class;
rdfs:subClassOf [
a owl:Restriction;
owl:onProperty :hasColor;
owl:someValuesFrom xsd:string
];
owl:hasKey ( :hasColor ) .
ここでは、インスタンスに:Color
少なくとも色の文字列があることを強制し、色の文字列が色の一意の識別子(キー)であることを強制します。したがって、カラー文字列で色を指定すると、その文字列が上記の正規表現パターンになっていることを確認できます。データ型とを定義したとすると、:darkColor
との関係も表現できます。:lightColor
:mediumColor
:darker
:lighter
:DarkColor a owl:Class;
rdfs:subClassOf :Color, [
a owl:Restriction;
owl:onProperty :hasColor;
owl:allValuesFrom :darkColor
] .
:LightColor a owl:Class;
rdfs:subClassOf :Color, [
a owl:Restriction;
owl:onProperty :hasColor;
owl:allValuesFrom :lightColor
] .
:MediumColor a owl:Class;
rdfs:subClassOf :Color, [
a owl:Restriction;
owl:onProperty :hasColor;
owl:allValuesFrom :mediumColor
] .
:DarkColor
次に、すべてのsがすべてのすべて:darker
よりも大きいと言いたいとします。このような公理は、補助的な用語を導入する必要があるため、実装するのは簡単ではありません。これは、「すべての象はすべてのマウスよりも大きい」という論文で説明されており、DLの用語では、コンセプト製品と呼ばれています。:MediumColor
:LightColor
:p1 a owl:ObjectProperty . # auxiliary property (do not reuse elsewhere)
:p2 a owl:ObjectProperty . # idem
:x a owl:Thing . # auxiliary individual
:darker owl:propertyChainAxiom ( :p1 :p2 ) .
:DarkColor rdfs:subClassOf [
a owl:Restriction;
owl:onProperty :p1;
owl:hasValue :x
] .
[ owl:unionOf ( :LightColor :MediumColor ) ] rdfs:SubClassOf [
a owl:Restriction;
owl:onProperty [ owl:inverseOf :p2 ];
owl:hasValue :x
] .
についても同じようにし:lighter
ます。
変更された色を自動的に導入することはできません。実際には、すべての基本色と修飾子を含むパターンを提供する必要があります。しかし、これはプログラムで簡単に行うことができます。いずれにせよ、私が提供するOWLコードは使用すべきではありません。IMOは、カスタマイズされたプログラムによってはるかに優れた/より効率的に対処されるためです。