【发布时间】:2018-02-20 16:40:10
【问题描述】:
我正在使用 MarkLogic 8。
我有一个这样的 SPARQL 语句。
let $results :=
sem:sparql(
"
PREFIX skosxl: <http://www.w3.org/2008/05/skos-xl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX slc: <http://www.smartlogic.com/2014/08/semaphore-core#>
select ?relation ?value
where
{
$input ?relation ?c .
OPTIONAL {
?c skosxl:prefLabel/skosxl:literalForm|skosxl:literalForm ?d .
}
BIND ( if (bound(?d), ?d, ?c) as ?value )
}
", $bindings
)
这会给我返回(relation, value) 对列表的结果。
我正在尝试将此响应转换为静态存储的 XML 文档。
我尝试了各种不同的方法。
尝试 1
let $doc := <test>{
for $item in $results
return element {map:get($item, 'relation')} {map:get($item, 'value')}
}</test>
return $doc
错误:
XDMP-ELEMNAME: (err:XPTY0004) for $results 中的 $item -- 无法使用 sem:iri("http://www.w3.org/2008/05/skos-xl#altLabel") 作为元素 名字
我尝试使用 fn:string 将有问题的项目转换为字符串,但这会导致
[1.0-ml] XDMP-QNAMELEXFORM:对于 $results 中的 $item -- 词法无效 QName 表单
如何在 XML 构建期间在 XQuery 中声明动态元素名称? 首先是什么导致了这个错误?我一直在弄乱语法来试图弄清楚,我不知道是什么导致了这个问题?
感谢您的阅读。
【问题讨论】: