Xquery - 使用 sparql 结果动态创建 XML。动态元素名称
Xquery - Using sparql results to dynamically create XML. Dynamic Element Names
我正在使用 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 $item in $results -- Cannot use
sem:iri("http://www.w3.org/2008/05/skos-xl#altLabel") as an element
name
我尝试将有问题的项目转换为使用 fn:string
的字符串,但这会导致
[1.0-ml] XDMP-QNAMELEXFORM: for $item in $results -- Invalid lexical
form for QName
如何在 XML 构建期间在 XQuery 中声明动态元素名称?
首先是什么导致了这个错误?我一直在搞乱语法来尝试弄清楚,我不知道是什么导致了这个问题?
感谢您的阅读。
转换为字符串应该足够了。
但是,您的示例中有前斜线,我认为这是无效的。
其次,您的示例将创建一个定义为 html 命名空间中的元素 - 或者您将前缀 html 定义为的任何内容。
此外,冒号后的第一个字符不是必需的字母数字字符。
在我看来,问题在于您尝试用于元素名称的名称 - 而不是实际方法。
我正在使用 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 $item in $results -- Cannot use sem:iri("http://www.w3.org/2008/05/skos-xl#altLabel") as an element name
我尝试将有问题的项目转换为使用 fn:string
的字符串,但这会导致
[1.0-ml] XDMP-QNAMELEXFORM: for $item in $results -- Invalid lexical form for QName
如何在 XML 构建期间在 XQuery 中声明动态元素名称? 首先是什么导致了这个错误?我一直在搞乱语法来尝试弄清楚,我不知道是什么导致了这个问题?
感谢您的阅读。
转换为字符串应该足够了。
但是,您的示例中有前斜线,我认为这是无效的。
其次,您的示例将创建一个定义为 html 命名空间中的元素 - 或者您将前缀 html 定义为的任何内容。
此外,冒号后的第一个字符不是必需的字母数字字符。
在我看来,问题在于您尝试用于元素名称的名称 - 而不是实际方法。