2017-10-10 24 views
0

私は国とその首都のリストを取得し、バックタートル形式で結果を解析するためにCONSTRUCTを使用してSPARQLとDBpediaのを照会しようとしています:SPARQLのdbpediaクエリ結果の括弧を削除するには?

CONSTRUCT { 
    ?country dbo:capital ?city. 
    ?country a dbo:Country. 
} WHERE { 
    ?country dbo:capital ?city. 
    ?country a dbo:Country 
} 

しかし、括弧()または_がある場合国名では、結果は接頭語を正しく使用しません。

例:

dbr:Virginia dbo:capital <http://dbpedia.org/resource/Richmond,_Virginia> 

この問題を解決するための任意の自動化された方法はありますか?私は実際に手動でこれを修正することを楽しみにしていません...

+0

に変更されますか?あなたはどのようにかっこを扱いますか?例えば、 '、_'はどのように処理しますか?可能なプレフィックス形式がない他のケースはどうですか?これらのURIをプレフィックス形式でシリアル化できない理由を理解していますか? – AKSW

+0

さらに、なぜすべてのプレフィックスを付けたいのですか? 'CONSTRUCT'クエリは、指定されたRDF直列化形式のRDFトリプルの集合を単純に返します。なぜあなたは単にクライアントコードでこれを処理できませんか? – AKSW

+0

なぜか分かりませんが、これは本当に複雑です。文字列 's = f(str(r))'につながる何らかの関数 'f'によってリソース' r'を取り出し、そのURI 'str(r)'を変更し、(2)この文字列'uri(s)'を使ってURIに戻さなければなりません。関数 'f'の定義はあなた次第です。 – AKSW

答えて

0

正直言って、私はあなたがこれをしたい理由は理解していないし、タートルの文法の前に置かれています。

CONSTRUCT { 
    ?country dbo:capital ?city. 
    ?country a dbo:Country. 
} WHERE { 
    ?country dbo:capital ?city_tmp. 
    ?country a dbo:Country 
    ## here you would handle the "fix", e.g. use a regex and find some replacement 
    BIND(uri(REPLACE(str(?city_tmp), ",_", "_", "i")) AS ?city) 
} 

あなたは、私はちょうど,_に一致するダミーの正規表現と置換文字列_を使用したクエリで見ることができます。しかし、あなたは大まかなアイデアを得ました。 たとえば、http://dbpedia.org/resource/Nancy,_Francedbr:Nancy_France

関連する問題