Xquery-使用sparql结果动态创建XML。动态元素名称

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

我使用的是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/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