如何在 Marklogic 中手动构建三元组

How to construct triples manually in Marklogic

我一直在尝试使用此查询在 Marklogic 中插入三元组

 xquery version "1.0-ml";
 import module namespace sem = "http://marklogic.com/semantics"
  at "/MarkLogic/semantics.xqy";

 declare variable $TRIPLE as xs:string external ;
 declare variable $GRAPHNAME as xs:string external ;
 let $TRIPLE:="sem:triple(sem:iri('http://smartlogic.com/document#testForTriples.xml'),sem:iri('http://www.smartlogic.com/schemas/docinfo.rdf#type'),'document')"
 let $GRAPHNAME :="sem:iri('testGraph')"
 let $r :=
 sem:graph-insert($GRAPHNAME,  $TRIPLE)

 return <result>{$r}</result>

不幸的是,returns 一个强制转换错误:

XDMP-AS: (err:XPTY0004) $graphname as sem:iri -- Invalid coercion: "sem:iri('testGraph')" as sem:iri

我做错了什么?

你不应该在 sem:triplesem:iri 周围加上引号,它们是类型转换函数:

xquery version "1.0-ml";

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

let $TRIPLE :=  sem:triple(sem:iri('http://smartlogic.com/document#testForTriples.xml'),sem:iri('http://www.smartlogic.com/schemas/docinfo.rdf#type'),'document')
let $GRAPHNAME := sem:iri('testGraph')
let $r := sem:graph-insert($GRAPHNAME,  $TRIPLE)

return <result>{$r}</result>

如果您尝试动态创建三元组,请从外部传递 sem:triple 或 sem:iri 对象,或者传递字符串值,然后将它们转换到代码中。

HTH!