Xquery-使用sparql结果动态创建XML。动态元素名称
我使用的是MarkLogic8 我有一个SPARQL语句Xquery-使用sparql结果动态创建XML。动态元素名称,xquery,marklogic,Xquery,Marklogic,我使用的是MarkLogic8 我有一个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/0
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
)
错误:
XDMP-ELEMNAME:(错误:XPTY0004)对于$results中的$item--无法使用
sem:iri(“”)作为元素
名字
我尝试使用fn:string
将有问题的项转换为字符串,但这会导致
[1.0-ml]XDMP-QNAMELEXFORM:对于$results中的$item--无效的词法
QName表格
在XML构建期间,如何在XQuery中声明动态元素名称?
首先是什么导致了这个错误?我一直在搞乱语法,试图找出它,我不知道是什么导致了这个问题
谢谢你的阅读 作为字符串进行铸造就足够了 然而,你的例子有前斜杠,我认为这是无效的 其次,您的示例将使一个元素定义为html名称空间中的元素,或者定义前缀html的任何元素 此外,冒号后的第一个字符不是必需的字母数字字符
在我看来,您尝试使用的元素名称是问题所在,而不是实际的方法。我发现了它,这很有帮助。显然有一个关系是以空白字符串的形式返回的,似乎我有一个关系不符合它也应该符合的假设。谢谢你的指导。这能够帮助我发现数据中的个别问题,而不是你所建议的方法。。。。我从#中分离出来,假设它始终是关系前的值,但是,有一段关系没有#foundGreat!很高兴这有帮助。
let $doc := <test>{
for $item in $results
return element {map:get($item, 'relation')} {map:get($item, 'value')}
}</test>
return $doc