【发布时间】:2019-01-08 16:08:35
【问题描述】:
我们正在使用 MarkLogic 9.0.5 和 DHF 3.0,并且我们正在尝试将多个源文档协调为非规范化形式。但是,我们无法正确获取 xml 表单。
假设我们有一份家庭源文件,家庭成员各一份。现在,我们要生成一个类似这样的协调实体:
<envelope>
<header></header>
<instance>
<family>
<name>Paulsen</name>
<family-member>
<name>John</name>
<age>54</age>
</family-member>
<family-member>
<name>Clarice</name>
<age>38</age>
</family-member>
</family>
</instance>
</envelope>
但是,新的 DHF 结构迫使我们使用 json 对象映射来生成代码,但是我们将数据放入对象中的任何方式都不会像上面那样将其取出。例如:
declare function plugin:extract-instance-family
$source as node()?,
$options as map:map
) as map:map
let $name := get-family-name()
let $family-member := (<family-member>
<name>get-name()</name>
<age>get-age()</age>
</family-member>,
<family-member>
<name>get-name()</name>
<age>get-age()</age>
</family-member>)
let $model :=
json:object()
=>map:with('name', $name)
=>map:with('family-member', '$family-member')
return $model
};
会产生一些 xml,例如:
<envelope>
<header></header>
<instance>
<family>
<name>Paulsen</name>
<family-member>
<family-member>
<name>John</name>
<age>54</age>
</family-member>
</family-member>
<family-member>
<family-member>
<name>Clarice</name>
<age>38</age>
</family-member>
</family-member>
</instance>
</envelope>
这包含每个族节点两次。有关如何解决此问题的任何建议?
PS 我也尝试过将嵌套的 json 对象作为参数传递,但显然这会导致 dhf 流中的错误:
let $family-member := json-object()
=> map:with('family-member', 'stuff')
【问题讨论】: