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

时间:2018-08-30 13:02:19

标签: 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
)

上面的查询应返回(term:56564,term:56564)序列中具有较窄谓词对象的IRI。

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

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

1 个答案:

答案 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!