Передать последовательность IRI как значения в привязке переменной к функции sem: sparql - marklogic - PullRequest
0 голосов
/ 30 августа 2018

Я использую версию 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
)

Приведенный выше запрос должен возвращать IRI с более узкими объектами предикатов в последовательности (term: 56564, term: 56564).

Пожалуйста, помогите мне, если есть какой-либо способ достичь этого.

Я сталкивался с sem:sparql-values, но он также не работает, возможно, я неправильно использую эту функцию.

1 Ответ

0 голосов
/ 30 августа 2018

Обычно для этого я использую =, а не 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
)

НТН!

...