将 IRI 序列作为绑定变量中的值传递给 sem:sparql 函数 - marklogic

Pass sequence of IRIs as values in binding variable to sem:sparql function - marklogic

我正在使用 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
)

上面的查询应该return在(term:56564,term:56564)序列中具有更窄谓词对象的IRI。

如果有什么方法可以实现,请帮助我。

我遇到了 sem:sparql-values 但那个也不起作用,可能是我以错误的方式使用了那个功能。

我通常使用 = 而不是 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!