2012-04-20 10 views
1

タートル/ n3ファイルでフィルタリングを実行して、同じ種類の別のファイルを返す必要があります。rdf/n3ファイルで名前で検索

:pt0001 
    vcard:category "Poste e Telegrafi" 
    ; vcard:fn "Ufficio Bologna 1" 
    ; vcard:extended-address "Via Cairoli 9, Bologna BO, Italy" 
    ; vcard:latitude "44.504192" 
    ; vcard:longitude "11.338661" 
    ; vcard:tel "051 243425" 
    ; vcard:fax "051 244459" 
    ; cs:opening "Mon, Tue, Wed, Thu, Fri: 0800-1330. Sat: 0800-1230." 
    ; cs:closing "01-01, 01-06, P, LA, 04-25, 05-01, 06-02, 08-15, 11-01, 12-08, 12-25, 12-26: .". 

私が欲しい、例えば、特定の名前や緯度またはカテゴリを持つ要素(ptxxxx)を検索するには: 基本的なデータ要素(場所)私は上の作業はこれです。私はすでにクエリで構造体を使ってrdfからトリプルを取得するように勧められているので、それらを私が構築している新しいグラフ/ rdfに追加することができます。事実は、正規表現フィルタ関数で(大文字と小文字を区別しない)名前を検索するためにトリプルをフィルタリングすると、私はこの場合、私が探していた名前を定義するトリプルを1つだけ得ることです。たとえば、(述語) "Ufficio Bologna 1"(オブジェクト)という名前のサブジェクト(ptxxxx)を検索することはできますか?あなたは正規表現を使用する場合、あなたは少しのクエリを変更することができ

describe ?s where { ?s vcard:fn "Ufficio Bologna 1". } 

それ以外の場合は、:

答えて

3

CONSTRUCT {?s ?p ?o} 
     WHERE { 
       ?s ?p ?o; 
       vcard:fn ?name. 
       FILTER regex (?name ,"^ufficio bologna 1$", "i") 
       } 
4

あなたはまさにその名前を持つ被写体にトリプルを取得したい場合は、単純な記述を行うことができます

describe ?s where { ?s vcard:fn ? name. filter (regex(?name, "regex goes here")). } 

大きなデータセットに対する正規表現は高価な可能性がありますが注意してください。多くのシステムではSPARQLの拡張機能が提供されています。SPARQLはリテラル値を全文索引付けし、より一般的な検索構文を使用して検索することができます。

私はこのような解決
関連する問題