我们正在使用 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')