2016-10-27 4 views
0

によって一つの変数を分割:SPARQL:私はこのようになりますいくつかのRDFデータをしたオブジェクトタイプ

WatchObject -subclassOf-> Accessory 
BagObject -subclassOf-> Accessory 
Person -hasAccessory-> Accessory 
WatchObjectとBagObjectが関係を持っている「アクセサリー」の両方のサブクラス(さ)がある

人とのアクセサリー。

私は今、人の時計と袋を別々の変数で入手するためにこれを問い合わせたいと思います。だから私は次のようなものを考えました:

SELECT DISTINCT ?person ?watch ?bag 
WHERE { 
    ?person rdf:type x:Person . 
    ?person x:hasAccessory ?bag^^x:BagObject . 
    ?person x:hasAccessory ?watch^^x:WatchObject . 
} 

SPARQLクエリでこれを表現することはできますか?もう1つの質問は、このようなデータをモデル化するのが妥当かどうか、あるいはこのような2つのObjectPropertiesを追加する方がいいでしょうか?

あなただけのバッグの種類を指定するトリプルを追加する必要があり、変数を見て、あなたは人の変数の型指定されただけのよう
WatchObject -subclassOf-> Accessory 
BagObject -subclassOf-> Accessory 
Person -hasAccessory-> Accessory 
Person -hasWatch-> WatchObject 
Person -hasBag-> BagObject 

答えて

0

:???

SELECT DISTINCT ?person ?watch ?bag { 
    ?person a x:Person . 
    ?person x:hasAccessory ?bag . 
    ?bag a x:BagObject . 
    ?person x:hasAccessory ?watch . 
    ?watch a x:WatchObject . 
} 

注それはあなたを取得することをバッグと腕時計のクロス製品。すなわち、人のバッグと腕時計の各組み合わせを取得します。また、少なくとも1つのバッグと少なくとも1つの時計を持っている必要があります。そうでないと、クエリが一致しません。これらのオプションの作成方法については、のオプションのを参照してください。

もう一つの問題は、この のように私のデータをモデル化するのが妥当かどうだろうか、 このように2つのobjectPropertiesのを追加する方が良いでしょうか?

WatchObject -subclassOf-> Accessory 
BagObject -subclassOf-> Accessory 
Person -hasAccessory-> Accessory 
Person -hasWatch-> WatchObject 
Person -hasBag-> BagObject 

あなたも、これを行うことができます。あなたは少し推論が有効、またはあなたのクエリを調整している場合、その後、あなたはまだ一つだけhasAccessoryで物事を取得することができ、その後

hasWatch rdfs:subPropertyOf hasAccessory 
hasBag rdfs:subPropertyOf hasAccessory 

:あなたが行う場合、また、トリプルを追加するには良いかもしれませんプロパティ。

+0

ご意見ありがとうございます。私はクロスプロダクトでアプローチを試みたが、それは私のquerysをずっと遅くする。あなたが提案したように、hasAccessoryのサブプロパティとして追加のhasWatch/hasBagプロパティを作成しました。 – del123

+0

でも、クロス製品を購入する必要はありません。最初のアプローチのようなものを使用することができます。 –

関連する問題