MarkLogic 9.0.5 と DHF 3.0 を使用しており、複数のソース ドキュメントを非正規化された形式に調和させようとしています。ただし、xml フォームを正しく取得できません。
家族用のソース ドキュメントと、家族用のソース ドキュメントがそれぞれ 1 つずつあるとします。ここで、次のような調和エンティティを生成したいと考えています。
<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>
これには、各ファミリ ノードが 2 回含まれます。これを解決する方法について何か提案はありますか?
PS ネストされた json-objects を引数として渡すことも試みましたが、明らかに dhf-flows でエラーが発生します。
let $family-member := json-object()
=> map:with('family-member', 'stuff')