2016-06-29 2 views
0

何の接頭辞を持っていないSPARQLクエリ内のURIと接頭辞付きの名前に置き換えます。私は次のクエリのように見えるサービスからSPARQLクエリ文字列を取得

SELECT * FROM { ?s owl:sameAs ?p } 

私は私が手QueryFactoryクラスでこれを解析しようとした場合完全に意味をなすのはUnresolved Prefixed Name Exceptionです。

私はpredefined namespace prefixesをマッピングするプロパティファイルを持っています。今の

私は次のような回避策があります

Iterator<String> it = prefixConfig.getKeys(); 
String prefixes = ""; 
while(it.hasNext()) { 
    String p = it.next(); 
    prefixes += "PREFIX " + p + ":<" + prefixConfig.getString(p) + "> "; 
} 

Query q = QueryFactory.create(prefixes + query); 
it = prefixConfig.getKeys(); 
while(it.hasNext()) { 
    String p = it.next(); 
    q.getPrefixMapping().removeNsPrefix(p); 
} 

query = q.toString(); 

これは動作しますが、私はこのソリューションでは全く満足していないので、私の質問は次のとおりです。

ありますSPARQLクエリ文字列内のプレフィックスを置き換えるか、関連するプレフィックスだけを追加するのが良い方法ですか?

ありがとうございます!

+1

:)私の作品でクエリを行います解析しないで、setPrefixMapping()メソッドを持つQueryを返します。これにより、プレフィックスを設定したあとでクエリ文字列を解析することができます。 –

+0

まあ、私はどちらかのプレフィックスのクエリ文字列を解析し、必要なプレフィックスを追加するか、すべてのプレフィックスを追加して単純に同じを行う必要があります:/ しかし、私は今のところ、方法。私が言ったように – TortugaAttack

+0

、私はそれが答えを提供するかどうかは分かりません。しかし、プレフィックスマッピングを構築することはできません。そして、jenaがあなたのために正しい種類の文字列に変換するようにしてください。手作業で作成する際に起こりうるエラーを取り除きます –

答えて

0
public static String replacePrefixes(String query, PrefixMapping pmap){ 
    /* With Prologue and the parse method, 
    * the queryString gets parsed without an error 
    */ 
    Prologue prog = new Prologue(); 
    prog.setPrefixMapping(pmap); 
    Query q = QueryFactory.parse(new Query(prog), query, null, null); 
    //Set Prefix Mapping 
    q.setPrefixMapping(pmap); 
    //remove PrefixMapping so the prefixes will get replaced by the full uris 
    q.setPrefixMapping(null);  
    return q.serialize(); 
} 

これは)私はこれが機能するかどうかを知っているかいないので、私は答えとして、それを投稿していないんだけど、QueryFactory位(作成しない

関連する問題