我正在使用ML版本8.0-6.3
我需要将IRIs
的序列作为绑定变量中的值传递给sem:sparql
并将在filter
子句中使用。
例如:
let $params :=
map:new((
map:entry("narrowersQuery", ("term:56564", "term:56564"))
))
return
sem:sparql(
"
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX term: <http://www.test.com/term/>
SELECT ?iri ?pl
WHERE {
?iri skos:prefLabel ?pl .
?iri skos:narrower ?narrower .
filter (?narrower in (?narrowersQuery))
# ?narrowersQuery should be treated as (term:56564, term:56564)
} limit 10
",
$params
)
上面的查询应返回(term:56564,term:56564)序列中具有较窄谓词对象的IRI。
如果有什么方法可以实现这一目标,请帮助我。
我碰到了sem:sparql-values
,但是那个也不起作用,可能是因为我以错误的方式使用了该功能。
答案 0 :(得分:1)
为此,我通常使用=
而不是IN
运算符,这在各种场合都为我解决了问题。
您可能还想传递sem:iri
而不是字符串,如下所示:
import module namespace sem = "http://marklogic.com/semantics"
at "/MarkLogic/semantics.xqy";
declare namespace term = "http://www.test.com/term/";
let $params :=
map:new((
map:entry("narrowersQuery", (sem:curie-expand("term:56564"), sem:curie-expand("term:56564")))
))
return
sem:sparql(
"
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?iri ?pl
WHERE {
?iri skos:prefLabel ?pl .
?iri skos:narrower ?narrower .
filter (?narrower = ?narrowersQuery)
} limit 10
",
$params
)
HTH!