Marklogic:如何在绑定中将整数传递给sem:sparql三元组

Marklogic:如何在绑定中将整数传递给sem:sparql三元组,sparql,marklogic,Sparql,Marklogic,我想将一个整数传递给sem:sparql三元组以用作限制或偏移量。我已经通过绑定映射传递了其他变量,但是很难让查询接受整数。借用ML文档中的一些代码来演示: import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy"; let $string := " <http://dbpedia.org/resource/Jacqueline_Kennedy_Onass

我想将一个整数传递给sem:sparql三元组以用作限制或偏移量。我已经通过绑定映射传递了其他变量,但是很难让查询接受整数。借用ML文档中的一些代码来演示:

import module namespace sem = "http://marklogic.com/semantics" 
  at "/MarkLogic/semantics.xqy";

let $string := "
<http://dbpedia.org/resource/Jacqueline_Kennedy_Onassis>
<http://xmlns.com/foaf/0.1/knows>
<http://dbpedia.org/resource/Eunice_Kennedy_Shriver> .

<http://dbpedia.org/resource/John_F._Kennedy,_Jr.>
<http://xmlns.com/foaf/0.1/knows>
<http://dbpedia.org/resource/Jacqueline_Kennedy_Onassis> .

<http://dbpedia.org/resource/Rosemary_Kennedy>
<http://xmlns.com/foaf/0.1/knows> <http://dbpedia.org/resource/Jacqueline_Kennedy_Onassis> .

<http://dbpedia.org/resource/Joseph_Patrick_Kennedy_Sr.>
<http://xmlns.com/foaf/0.1/knows> <http://dbpedia.org/resource/Rosemary_Kennedy> .
"

let $triples := sem:rdf-parse($string, "turtle")
let $bindings := map:map()
let $put := map:put($bindings,"limit",1)

return
sem:sparql-triples("
SELECT ?s ?p ?o
WHERE{ 
?s ?p ?o.
} 
ORDER BY ?o
LIMIT ?limit
", $triples, $bindings)


但到目前为止我还没有成功。有什么想法吗?

完整的错误信息是:

XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error,
unexpected <variable>, expecting <integer literal>
XDMP-UNEXPECTED:(错误:XPST0003)意外的令牌语法错误,
出乎意料
在第7行,极限表达式是。所以我得出结论,这不是整数与非类型的问题。这里不能使用变量:它必须是一个文本整数

使用7.0-3,这似乎是可行的:

import module namespace sem = "http://marklogic.com/semantics" 
  at "/MarkLogic/semantics.xqy";

let $string := "
<http://dbpedia.org/resource/Jacqueline_Kennedy_Onassis>
<http://xmlns.com/foaf/0.1/knows>
<http://dbpedia.org/resource/Eunice_Kennedy_Shriver> .

<http://dbpedia.org/resource/John_F._Kennedy,_Jr.>
<http://xmlns.com/foaf/0.1/knows>
<http://dbpedia.org/resource/Jacqueline_Kennedy_Onassis> .

<http://dbpedia.org/resource/Rosemary_Kennedy>
<http://xmlns.com/foaf/0.1/knows> <http://dbpedia.org/resource/Jacqueline_Kennedy_Onassis> .

<http://dbpedia.org/resource/Joseph_Patrick_Kennedy_Sr.>
<http://xmlns.com/foaf/0.1/knows> <http://dbpedia.org/resource/Rosemary_Kennedy> .
"

let $triples := sem:rdf-parse($string, "turtle")
let $bindings := map:map()

return
sem:sparql-triples("
SELECT ?s ?p ?o
WHERE{ 
?s ?p ?o.
} 
ORDER BY ?o
LIMIT "||1,
$triples, $bindings)
导入模块名称空间sem=”http://marklogic.com/semantics" 
位于“/MarkLogic/semantics.xqy”;
让$string:=”
.
.
.
.
"
让$triples:=sem:rdf解析($string,“turtle”)
让$bindings:=map:map()
返回
sem:sparql三元组(“
选择s?p?o
何处{
s?p?o。
} 
订购人
限制“| | 1,
$triples,$bindings)

我觉得需要更新答案,正如在MarkLogic 8中一样,您的初始查询将起作用-您可以传入一个变量来设置限制


(注意:仅在8.0-4.2上测试过)

这也不是MarkLogic问题,而是SPARQL规范的问题。如果将查询放入,将得到语法错误:在第6行第7列遇到“?限制”。我们期待:…(没有说明应该是什么,但突出了问题所在)。中相应的生产是[26]LimitClause::='LIMIT'INTEGER。我想就是这样-我不能在那里使用变量。我只是认为这可能是一种在SPARQL查询中处理分页的好方法。谢谢!@rexsavior,
偏移量
限制
,和
排序依据
是您应该在SPARQL中处理分页的方式(或者,检索一大堆数据并自己分页)。您只需将
limit
offset
值插入字符串;它们不能是SPARQL变量。仅供参考,MarkLogic 8支持在limit或offset子句中使用外部绑定变量。我已确认原始查询在MarkLogic 8中有效。
XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error,
unexpected <variable>, expecting <integer literal>
import module namespace sem = "http://marklogic.com/semantics" 
  at "/MarkLogic/semantics.xqy";

let $string := "
<http://dbpedia.org/resource/Jacqueline_Kennedy_Onassis>
<http://xmlns.com/foaf/0.1/knows>
<http://dbpedia.org/resource/Eunice_Kennedy_Shriver> .

<http://dbpedia.org/resource/John_F._Kennedy,_Jr.>
<http://xmlns.com/foaf/0.1/knows>
<http://dbpedia.org/resource/Jacqueline_Kennedy_Onassis> .

<http://dbpedia.org/resource/Rosemary_Kennedy>
<http://xmlns.com/foaf/0.1/knows> <http://dbpedia.org/resource/Jacqueline_Kennedy_Onassis> .

<http://dbpedia.org/resource/Joseph_Patrick_Kennedy_Sr.>
<http://xmlns.com/foaf/0.1/knows> <http://dbpedia.org/resource/Rosemary_Kennedy> .
"

let $triples := sem:rdf-parse($string, "turtle")
let $bindings := map:map()

return
sem:sparql-triples("
SELECT ?s ?p ?o
WHERE{ 
?s ?p ?o.
} 
ORDER BY ?o
LIMIT "||1,
$triples, $bindings)