Xquery嵌套映射:从xml合并产生错误“键的预期单个值,为0”

问题描述

在Xquery 3.1中,我试图将XML文档转换为嵌套映射。我的xml文档$keyworddoc具有以下结构:

    <category xml:id="KW0003">
        <desc xml:lang="fr">évêque</desc>
        <desc xml:lang="en">bishop</desc>
        <desc xml:lang="de">Bischof</desc>
        <desc xml:lang="es">obispo</desc>
        <desc xml:lang="it">vescovo</desc>
    </category>
    <category xml:id="KW0004">
        <desc xml:lang="fr">sacrement</desc>
        <desc xml:lang="en">sacrament</desc>
        <desc xml:lang="de">Sakrament</desc>
        <desc xml:lang="es">sacramento</desc>
        <desc xml:lang="it">sacramento</desc>
    </category>
    <category xml:id="KW0005">
        <desc xml:lang="fr">messe</desc>
        <desc xml:lang="en">mass</desc>
        <desc xml:lang="de">Messe</desc>
        <desc xml:lang="es">misa</desc>
        <desc xml:lang="it">messa</desc>
    </category>

具有所需的地图输出

map {
    "KW0003": map {
                  "fr": "évêque","en": "bishop","de": "Bischof","es": "obispo","it": "vescovo"},"KW0004": map {
                  "fr": "sacrement","en": "sacrament","de": "Sakrament","es": "sacramento","it": "sacramento"},"KW0005": map {
                  "fr": "messe","en": "mass","de": "Messe","es": "misa","it": "messa"},}

但是,我的功能

   let $kwdoc :=  $keyworddoc//tei:category
   return map:merge(for $kw in $kwdoc 
                    return map{$kw/data(@xml:id) : 
                               map:merge(for $desc in $kw 
                                         return map{$desc/data(@xml:lang) : 
                                                    $desc/text()}
                                         )})

产生以下错误,表明嵌套的for循环未“看到”变量$kw?:

Expected single value for key,got 0

也许我打算以错误的方式构造我的第一个嵌套地图。

edit:eXist 5x中的Xquery。

非常感谢。

解决方法

由于$kw一次绑定到单个tei:category元素,所以子句for $desc in $kw遍历单个元素的序列,并将同一元素绑定到$desc ,因此在这种情况下等效于let $desc := $kw

您想要的是遍历tei:desc的{​​{1}}个子代:

$kw

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...