Мы используем 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')