-1

OSB フローで、特定の XQuery 変換を実行する必要があります。

入力は次の形式です。

<OBJECT_1>
  <item>   // multiplicy : *
    <MONTH>
    <INFO_11/>
    <INFO_12/>
  </item>
</OBJECT_1>
<OBJECT_2>
  <item>   // multiplicy : *
    <INFO_21/>
    <INFO_22/>
    <MONTH/>
  </item>
</OBJECT_2>

ターゲット出力の構造は次のとおりです。

<object1>   // multiplicy : *
  <month>
  <info11/>
  <info12/>
  <object2>   // multiplicy : *
    <info21/>
    <info22/>
  </object2>
</object1>

現時点では、私の xquery は次のようになります。

declare function xf:myTransformation($z_SOURCE1 as element(ns1:SOURCE))
    as element(ns0:targetService) {
        <ns0:targetService>
            <myFlow>
               {
                    for $item in $z_SOURCE1/ns1:OBJECT_1/ns1:item
                    return
                       <object1>
                            {
                              for $MONTH in $item/ns1:MONTH
                                return
                                    <month>{ data($MONTH) }</month>
                            }
                            {
                              for $INFO_11 in $item/ns1:INFO_11
                                return
                                    <info11>{ data($INFO_11) }</info11>
                            }
                            {
                              for $INFO_12 in $item/ns1:INFO_12
                                return
                                    <info12>{ data($INFO_12) }</info12>
                            }
                            {
                            for $item0 in $z_SOURCE1/ns1:OBJECT_2/ns1:item
                            return
                              {
                                for $INFO_21 in $item0/ns1:INFO_21
                                  return
                                    <info21>{ data($INFO_21) }</info21>
                              }
                              {
                                for $INFO_22 in $item0/ns1:INFO_22
                                  return
                                    <info21>{ data($INFO_22) }</info22>
                              }
                       </object1>
               }
            </myFlow>
        </ns0:targetService>
 };

ご覧のとおり、OBJECT_1 と OBJECT_2 の間に「一致」はありません...

object1 の月のキー (SQL :) に一致するオブジェクトを OBJECT_2 リストで「見つける」にはどうすればよいOBJECT_1.MONTH=OBJECT_2.MONTHですか? OBJECT_1 の構築中に、必要なキーを見つけるために OBJECT_2 リストに移動できますか?

4

1 に答える 1

0

OTN フォーラムから回答が見つかりました:

以下の xquery を使用します。

xquery version "1.0" encoding "Cp1252";
(:: pragma  parameter="$anyType1" type="xs:anyType" ::)
(:: pragma  type="xs:anyType" ::)


declare namespace xf = "http://tempuri.org/OSB%20Project%201/XQ/Test2/";


declare function xf:Test2($anyType1 as element(*))
    as element(*) {
       let $input:= <STRUCTURE> 
   <OBJECT_1> 
      <item> 
         <MONTH>2013_M06</MONTH> 
         <INFO_11>ABC</INFO_11> 
         <INFO_12>2012-04-24</INFO_12> 
      </item> 
      <item> 
         <MONTH>2013_M05</MONTH> 
         <INFO_11>DEF</INFO_11> 
         <INFO_12>2012-04-24</INFO_12> 
      </item> 
   </OBJECT_1> 
   <OBJECT_2> 
      <item> 
         <MONTH>2013_M06</MONTH> 
         <INFO_21>11111</INFO_21> 
         <INFO_22>1</INFO_22> 
      </item> 
      <item> 
         <MONTH>2013_M06</MONTH> 
         <INFO_21>11111</INFO_21> 
         <INFO_22>2</INFO_22> 
      </item> 
      <item> 
         <MONTH>2013_M05</MONTH> 
         <INFO_21>22222</INFO_21> 
         <INFO_22>1</INFO_22> 
      </item> 
   </OBJECT_2> 
</STRUCTURE>
let $month := fn:distinct-values($input/OBJECT_1//MONTH/text())
let $out:=<targetStructure>{
  for $x in 1 to fn:count($month)
  return
  <object1>
  <month>{$month[$x]}</month>
  <info_11>{$input/OBJECT_1/item[./MONTH=$month[$x]]/INFO_11/text()}</info_11>
  <info_12>{$input/OBJECT_1/item[./MONTH=$month[$x]]/INFO_12/text()}</info_12>
  {for $y in $input/OBJECT_2/item
  where $y/MONTH/text()=$month[$x]
  return
  <object2>

  <info_21>{$y/INFO_21/text()}</info_21>
  <info_22>{$y/INFO_22/text()}</info_22>
  </object2>}
  </object1>
}
</targetStructure>


return $out


};


declare variable $anyType1 as element(*) external;


xf:Test2($anyType1)
于 2013-07-05T14:59:00.153 に答える