2016-09-12 9 views
2

あなたは何か狂ったことをして、あなたのオブジェクト指向モデルをRDFグラフとして保存するとします。SPARQLサブジェクトとそのすべてのスーパークラスのすべての述語オブジェクトのペア

RDF Graph

継承階層と関連付けられた属性の簡略化した例を示しています。

実際には、UMLクラス図をRDFSに変換するとsuch graph structureになります。

質問は、「クラスC」の特定のリソースをインスタンス化するために必要なすべての述語 - オブジェクトのペアをどのSPARQLクエリで配信できるかです。言い換えれば、どのようにして、すべての述語 - オブジェクトのペアを継承チェーン全体に渡って取得するのですか(単一の継承のみ)。この図、クラス:ClassCのすべてのメンバーの述語 - 目的のペアを考える

+0

宿題ですか? – AKSW

+1

hehe ..残念ながら、宿題の時間はずっとなくなっています。実際の現実世界の問題です。 – Smartgrid

答えて

3

は仕事をした:

SELECT ?p ?o 
WHERE { 
    :ClassC rdfs:subClassOf* ?anySuperClass . 
    ?anySuperClass ?p ?o . 
} 

編集:

SELECT ?prop ?obj 
    WHERE { 
     :ClassC rdfs:subClassOf* ?anySuperClass . 
     ?prop rdfs:domain ?anySuperClass . 
     ?prop rdfs:range ?obj . 
} 
: 同様のクエリは、すべて自己定義されたプロパティと継承チェーンに沿ってその範囲を取得します

最終結果の組み合わせ:

+0

良いアイデアがあり、問題を解決できたことを知っておいてください - @scotthenningerの答えを投票することを検討してください(あなたが役に立つと思ったら) - あなた自身の答えを受け入れて、ハッピーコーディング! – ishmaelMakitla

+0

確かにscottheningerに+9の評判が必要 – Smartgrid

+0

ここにあなたの欠けている評判があります:) –

4

は単純です:

SELECT ?inst ?p ?o 
WHERE { 
    ?inst a :ClassC . 
    Inst ?p ?o . 

RDF/RDFSにおけるプロパティの継承が存在しないことに注意してください。あなたはUSELその後、サブクラスの帰結でClassAため、この点において

SELECT ?inst ?p ?o 
WHERE { 
    ?cls rdfs:subClassOf* :ClassA . 
    ?inst a ?cls . 
    ?inst ?p ?o 
} 

をプロパティ/値のペアのすべてを検索したい場合は、RDFSは少し後方OOの継承の一つの期待の作品。次のクエリ@scotthenningerからの情報では

+0

インスタンスデータはまだありません。ただTBoxだけです。しかし、あなたは私に良いアイデアをくれました。 'rdfs:subClassOf *'はその仕事をしました。 – Smartgrid

関連する問題