2016-08-15 4 views
-1

私はSPARQLクエリに興味深い問題があります。私はトリプルを照会しており、複数の一致があります。多分2つですが、1つだけを選択するコードが必要です。どちらが問題なのかは絶対に問題ではありません。 例:私は5歳の本を検索していますが、データベースに2冊の書籍がありますが、1つだけ変数に保存する必要があります(どちらにするかは関係ありません)。 これはSPARQLでも可能ですか?他の情報が必要な場合はお知らせください。あなたの時間のためにすべての前にありがとう! 入力データベースの変更は、最後にやりたいことです。SPARQL:複数の一致から1つのトリプルを選択しますか?

例:

<Book rdf:ID = 0001> 
<Book.Title>Title1</Book.Title> 
<Book.For>5 years old</Book.For> 
<Book.Date>2000</Book.Date> 
</Book> 

<Book rdf:ID = 0002> 
<Book.Title>Title2</Book.Title> 
<Book.For>5 years old</Book.For> 
<Book.Date>2005</Book.Date> 
</Book> 
Construct {?NewDatabase Example_of_book_for_5_years_old ?Title .} 
Where {?Example Book.For "5 years old" . 
     ?Example Book.Title ?Title . 
     }; 

両方の本は、WHERE句に一致するが、私は一つだけ新しいデータベース出力にする必要があります。どちらにしても問題ありません。

+2

データ(最小限のフラグメント)とSPARQLクエリが表示されない場合、誰もあなたを助けません!あなたの質問にその情報を追加してください。 – AKSW

+0

「10 rdfs」とは何ですか? – AKSW

+0

クエリの最初の結果が必要な場合は、クエリにLIMIT 1を追加できます。 – kba

答えて

0

サンプルクエリの見かけ上のエラーを考慮しないで、解決方法は CONSTRUCTの代わりに SELECTを使用することです。前者は、結果の数を制限することができます。

あなたは完全に結果としてトリプルが必要な場合は、あなただけのSELECT

Construct { ?Example <urn:Book:Title> ?Title } 
Where { 
    ?Example <urn:Book:For> "5 years old" . 
    ?Example <urn:Book:Title> ?Title . 
} 
limit 1 
と同じよう LIMIT句を使用することができます CONSTRUCTクエリから一つだけのトリプルを選択するには、サブクエリ

などの限られたSELECTを使用することができます

これは、最初の結果(未決定の順序)を選択します。


そして、いや、SPARQL Grammarから判断するには、SPARQLのアップデートでLIMIT句を使用することはできません。

+0

@ThomaszPluskiewiczあなたの答えはこれまでの情報を元に正しいです。補足として、「解決策はCONSTRUCTの代わりにSELECTを使用することです」というフレーズを再定式化します。これは、CONSTRUCTクエリのクエリパターン内でSELECTを使用することです。 – AKSW

+0

こんにちは、お返事ありがとうございます。 ** DELETE/INSERT/WHERE **クエリにもselect *でこのサブクエリを使用できますか? 実際、古いサンプルを削除して新しいサンプルを置く必要があります。 –

+0

@AKSW実際、私は間違っていました。 'LIMIT'は' CONSTRUCT'で本当に許されています。更新を –

関連する問題