4

セマンティックWebに関する初心者向けの質問。

私は、類似した色、色修飾子(暗い、明るい、〜ishなど)、色の関係(暗い、明るい)、色の同義語などを含む色の知識ベースを持っています。RDF/OWLがこのKBを操作(主にクエリ)するのに適しています。これが私がサポートする必要のあるクエリです。

1)特定の色に類似したすべての色を見つけます。「類似した」述語で色の類似性を表す場合、単純なSparqlクエリで十分です。同義語と関係についても同じです。良い。

2)トークンまたはフレーズxが有効な色であるかどうかを確認する必要がある場合、問題はさらに複雑になります。xが変更されていない色である場合、問題はColorクラスを作成し、すべての既知の色がそのクラスのインスタンスであることを確認することで解決できます。しかし、xが「赤みがかった」のような変更された色である場合はどうなるでしょうか。明らかに、1つの解決策は、変更されたすべての色を明示的に追加することにより、KBの一部にすることです。

しかし、変更されたすべての色をRDFに自動的に追加することは可能ですか?言い換えれば、すべての変更された色を伴う変更された色のクラスを定義することは可能ですか?これには、連結演算子が必要です。それは可能ですか?

別の解決策は、xを分解し、a)既知の修飾子が含まれているかどうか、およびb)変更されたものが有効な色であるかどうかを確認するロジックを用意することです。もちろん、このロジックはRDF/OWLでも記述されるようにしたいと思います。何か案が?

ご意見やご提案をよろしくお願いいたします。

4

1 に答える 1

5

あなたがやりたいことは、お気に入りのプログラミング言語のカスタムコードを使用して、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ます。:darkColormediumColor

: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は、カスタマイズされたプログラムによってはるかに優れた/より効率的に対処されるためです。

于 2012-08-30T09:15:22.693 に答える