4

何らかの理由で、Redland(librdf.org)を使用してDESCRIBEクエリを発行できませんが、DESCRIBEを特定のURIのCONSTRUCT QUERYとして書き換えることはできますか?

DESCRIBE <urn:my-uri>

私はそれをこのようなものに書くことを考えていましたが、これはSPARQLでは有効ではないと思います

CONSTRUCT  { ?subject ?predicate ?object }
WHERE      { 
               { ?subject ?predicate ?object } 
               AND { 
                   { <urn:my-uri> ?predicate ?object } 
                   OR { ?subject <urn:my-uri> ?object } 
                   OR { ?subject ?predicate <urn:my-uri> } 
               } 
           }
4

2 に答える 2

3

あなたは正しいですが、それは有効なSPARQLではありません。あなたに最も近いものORはですUNION。また、演算子は必要ありませんAND。すべてのトリプルパターンは、デフォルトでは結合ではなく結合です。

あなたがしようとしていることについてはFILTER、この例のように、を使用する方が良いです:

CONSTRUCT  { ?subject ?predicate ?object }
WHERE      { ?subject ?predicate ?object . 
             FILTER (  ?subject = <urn:your_uri> || ?object = <urn:your_uri>)
           } 

一部のシステムでは、大規模なナレッジベースの場合、このクエリは非常にコストがかかる可能性があります。また、データベースにbNodeが含まれている場合、このクエリはそれらのノードの説明を取得せず、内部コードのみを取得します。ほとんどの場合、DESCRIBE手動での実行は1つのクエリでは実行できず、URIを説明するすべての情報を取得するには、再帰ロジックを実装する必要があります。

于 2011-06-08T12:16:30.100 に答える
3

その方法のようなものを試した後FILTER ( A || B )、私はそれがかなり遅いという印象を受けました。

基本的には同じことができると思いますがVALUESUNION

DBPedia(約24.6億トリプル)で映画を使って試してみましたが、うまく機能しているようです。

CONSTRUCT {
    ?subject ?predicate ?object
}
WHERE {
   { ?subject ?predicate ?object . 
       VALUES ?subject { dbpedia:The_Matrix }
   }
   UNION 
   { ?subject ?predicate ?object . 
       VALUES ?object { dbpedia:The_Matrix }
   }
}

dbpediaでのsparqlの結果


編集:追加情報のために、技術的には次のように書くこともできると思います。

CONSTRUCT { ?subject ?predicate ?object }
WHERE {
       ?subject ?predicate ?object . 
       OPTIONAL { dbpedia:The_Matrix ?predicate ?object . }
       OPTIONAL { ?subject ?predicate dbpedia:The_Matrix . }
}

しかし、いくつかの人気のあるRDFデータベースは、実際にはOPTIONALまだ非常にパフォーマンスが高く、機能しなくなります。

于 2014-01-29T23:07:07.553 に答える