2016-05-30 4 views
0

私はSPARQLを使用して奇妙な問題に直面しています。コードのこの作品はQConsoleに正常に動作している -XQueryのSPARQLが結果を返さない

xquery version "1.0-ml"; 
import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy"; 

declare function local:forex-series (
    $from-currency-id as xs:string, 
    $to-currency-id as xs:string, 
    $forex-supplier-id as xs:string, 
    $feed-name-id as xs:string 
) 
{ 
    let $map := map:map() 
    let $series-sparql := 'PREFIX series: <http://iddn.icis.com/series/> 
        PREFIX predicates: <http://iddn.icis.com/predicates/> 
        PREFIX xmls: <http://www.w3.org/2001/XMLSchema#> 

        SELECT ?series 
        WHERE { 
         ?series predicates:to-currency $toCurrencyId ; 
           predicates:from-currency $fromCurrencyId ; 
           predicates:forex-provider $forexSupplierId ; 
           predicates:forex-feed $feedNameId ; 
        }' 
    let $_ := map:put($map, "toCurrencyId", sem:iri($to-currency-id)) 
    let $_ := map:put($map, "fromCurrencyId", sem:iri($from-currency-id)) 
    let $_ := map:put($map, "forexSupplierId", sem:iri($forex-supplier-id)) 
    let $_ := map:put($map, "feedNameId", sem:iri($feed-name-id)) 
     return 
      sem:query-results-serialize(sem:sparql($series-sparql, $map)) 
}; 

let $to-currency-id := "http://iddn.icis.com/ref-data/currency/10" 
let $from-currency-id := "http://iddn.icis.com/ref-data/currency/18" 
let $forex-supplier-id := "http://iddn.icis.com/asset/forex/xe" 
let $feed-name-id := "http://iddn.icis.com/asset/forex/current" 
return local:forex-series($from-currency-id, $to-currency-id, $forex-supplier-id, $feed-name-id) 

しかし、XQueryの開発コードに追加され、モジュールに配置されたとき、それは正常に動作していません。その場合、sem:sparqlは何も返しません。

設定が必要ですか?または私は何かを逃していますか?これについての考えがしてください!

+0

SPARQLクエリ自体が期待した結果を返しますか? – AKSW

+0

はい、そうです。 QConsoleから実行された場合でも、このコードは正常に動作します。デプロイされたコードを実行すると予期しない動作をします。 –

+0

クエリーコンソールで使用しているのと同じデータベースを再度実行していますか?また、メモリ内のトリプルストアのリストを取る '$ store'オプションを使って、クエリが実行されているトリプルを設定することもできます。 – scotthenninger

答えて

1

トリプルはドキュメントであり、他のドキュメントと同じセキュリティに従っていることに注意してください。

だから、あなたはトリプルを含む文書を読む権利があるのですか?

例:クエリコンソールでは管理者を使用していますが、別の方法でコードを実行するには別のユーザーですか?

+0

Davidさん、ありがとうございました。私はこの問題も、別のユーザーが原因だと考えました。これを使用できるようにするために、特定の特権またはロールをユーザに割り当てる必要があるかどうかを知るだけでいいですか? –

+1

ユーザーには、トリプルドキュメントの読み取り権限を持つロールが必要です。私はそれがグラフのパーミッションによって制御されていると思います。http://docs.marklogic.com/sem:graph-set-permissions .. – grtjn

+0

あなたのトリプルがどのように格納されているかは記述していません。また、あなたのトリプルをどのように保存するかによって異なります。アンマネージド(埋め込み)トリプルとは、トリプルが埋め込まれているドキュメントに対して少なくとも読み取り権が必要であることを意味します。 –

関連する問題