Ich stehe vor einem seltsamen Problem mit SPARQL. Dieses Stück Code funktioniert gut auf QConsole -SPARQL in XQuery gibt kein Ergebnis zurück
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)
Aber es ist nicht richtig funktioniert, wenn sie in den XQuery-Entwicklungscode und implementiert in Module hinzugefügt. sem:sparql gibt in diesem Fall nichts zurück.
Gibt es Einstellungen, die vorgenommen werden müssen? Oder fehlt mir etwas? Gedanken dazu bitte!
Gibt die SPARQL-Abfrage selbst die erwarteten Ergebnisse zurück? – AKSW
Ja, tut es. Auch dieser Code, der von QConsole ausgeführt wird, funktioniert einwandfrei. Es verhält sich nur in unerwarteter Weise, wenn es mit dem implementierten Code ausgeführt wird. –
Wird das Modul erneut in derselben Datenbank ausgeführt, die Sie in der Abfragekonsole verwenden? Sie können auch festlegen, dass die Triples, für die die Abfrage ausgeführt wird, nicht mit der Option "$ store" verwendet werden, die eine Liste von In-Nemory-Triple-Stores erstellt. – scotthenninger