2017-09-17 3 views
-1

私はスマートフォンのデータを使用してRDFベースからリテラルデバイス名を取得するのに苦労しています。私はそれらが私の中でパラメータ化されている画面サイズが「大」で、内部メモリサイズ「小」である(すべてのデバイス名を抽出したいRDFからSPARQLの基準でリテラルを取得

PREFIX feature: <https://lukasgorny.pro/devices#> 

SELECT ?device WHERE 
{ 
    ?device feature:device-name ?deviceName . 
    OPTIONAL { ?x feature:screen-size ?screenSize . } 
    OPTIONAL { ?y feature:internal-memory-size ?memorySize . } 
} 

:例データ:

<rdf:Description rdf:about="https://lukasgorny.pro/devices#GioneeX1"> 
    <feature:device-name>Gionee X1</feature:device-name> 
    <feature:screen-size>big</feature:screen-size> 
    <feature:internal-memory-size>small</feature:internal-memory-size> 
</rdf:Description> 
<rdf:Description rdf:about="https://lukasgorny.pro/devices#SharpAquosS3"> 
    <feature:device-name>Sharp Aquos S3</feature:device-name> 
    <feature:screen-size>big</feature:screen-size> 
    <feature:internal-memory-size>big</feature:internal-memory-size> 
</rdf:Description> 

クエリアプリケーションがありますが、ここでは例を挙げています)。親切に私を正しい方向に向けることができますか?私は解決策を見つけることができないようです。

+0

可能な複製(https://stackoverflow.com/questions/2591719/exact-matching -of-strings-in-sparql) –

+2

'OPTIONAL'節の目標は何ですか?それらは外部トリプルパターンの変数には接続されていません。 – AKSW

答えて

1

あなたはそうのように、このためにFILTER条件を使用することができます[?SPARQL内の文字列の完全一致]の

WHERE 
{ 
    ?x feature:screen-size ?screenSize . 
    FILTER(str(?screenSize) = "big") 
} 
+0

いいですが、マルチフィルターはどうですか?ここに私のコードがあり、それは動作していないようです:https://pastebin.com/2J0vEVBB それは常に私に93エントリを返します。 –

+2

初期クエリの 'OPTIONAL'節と同じです。異なる変数 '?x'と'?y'を使う理由は何ですか? @AKSWも示唆しているように、トリプルパターンは共有変数 – AKSW

+0

@ŁukaszovPietriejGornyovによって "接続"されなければなりません。クエリの '?x'変数と'?y'変数を '?device'に変更する必要があります。要点は、結局、同じ主題の3つのプロパティを照会しているということです。また、OPTIONAL節を取り除く。 –

関連する問題