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

问题描述 投票:0回答:1

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

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

如果有任何方法可以帮助我。

我遇到sem:sparql-values,但那个也没有用,可能是我以错误的方式使用该功能。

marklogic
1个回答
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!

© www.soinside.com 2019 - 2024. All rights reserved.