2016-05-30 55 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

謝謝大衛,這部分我也想出了這個問題是因爲不同的用戶。我只需要知道我需要分配給用戶的哪個特權或角色才能使用它? –

+1

您的用戶需要具有對三重文檔具有讀取權限的角色。我認爲這是通過圖表權限控制的,另請參閱http://docs.marklogic.com/sem:graph-set-permissions .. – grtjn

+0

您不會描述您的三元組是如何存儲的。這也取決於你如何存儲你的三元組。非託管(嵌入式)三元組意味着您至少需要讀取三元組所嵌入文檔的權限。 –