1

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')
4

1 に答える 1