2017-06-21 3 views
0

データ値を変換するために実行できるさまざまな操作を表す一連のXQuery関数があります。各関数は値を取り、変換に必要ないくつかのパラメータをとります。また、一連のネストされた関数呼び出しを実行して最終的な値を計算することも計画しています。考えられるのは、これらのパイプラインは、同じパイプラインの関数が異なる開始値で繰り返し呼び出されるため、実行前に設定され、保持されるということです。XQuery関数呼び出しツリーをXMLにシリアライズして実行する

declare function mylib:tokenize($value as xs:string, $delimiter as xs:string) as xs:string 
{ ... } 

declare function mylib:select($value as xs:string, $index as xs:int) as xs:string 
{ ... } 

declare function mylib:escape($value as xs:string) as xs:string 
{ ... } 
  1. このaは:だから、思考が

    <mylib:escape> 
        <value> 
        <mylib:select> 
         <config> 
         <index>2</index> 
         </config> 
         <value> 
         <mylib:tokenize> 
          <config> 
          <delimiter>,</delimiter> 
          </config> 
          <value> 
          $starting-value 
          </value> 
         </mylib:tokenize> 
         </value> 
        </mylib:select> 
        </value> 
    </mylib:escape> 
    

    つまり、ネストされたXML要素のシリーズのようなコールスタックを表現し、MYLIBモジュールの名前空間で、私は機能を持つことになりました私は別のアプローチをとるべきですか?

  2. すでにこの機能を提供している可能性がある既存のライブラリはありますか?

MarkLogicからこれを実行するため、この記事はMarkLogicでタグ付けされています。

ありがとうございました。

+0

私はあなたがなぜmylibの機能に制限されているのだろうと思っています。 tokenize、select、およびescapeは、既存の関数で十分にカバーする必要があります。エンドユーザーにガイダンスが必要な場合は、それらのドキュメントに依存することができます。 – grtjn

+0

[CPF](http://docs.marklogic.com/guide/cpf/overview)を検討しましたか? –

+0

@grtjnこれは例に過ぎません。より多くの機能がありますが、何らかのグラフィカルインターフェイスを介してユーザが設定可能な処理パイプラインを持つことがポイントでした。 –

答えて

0

これは主に意見に基づいているため(あなたの質問をクローズすると驚くことはありません)、変換コンポーネントのセットと特定の変換パイプラインの設定を記述したドキュメントのセットがあるようです。私にとっては、これは妥当な懸念の分離のようです。私はこれを正確に複製する既存のライブラリは認識していませんが、XProcに似ています。

パイプラインをドキュメントとして保存する必要がある場合を除き、代わりにパイプラインを表すXQuery関数を記述するだけで、XMLをXQuery関数呼び出しに変換するオーバーヘッドを避けることができます。機能をより複雑にする必要がある場合は、higher-order (i.e.: first-class) functionsをご覧ください。

+0

私は、他の変換関数を呼び出すXQuery関数を解析するのではなく、ユーザーがpeipleineを構成できるようにするために、XML形式のパイプライン設定をインターフェイスにマップする方が簡単かもしれないと考えました。 –

+0

@TJTangユーザーが設定可能なパイプラインは、ドキュメントを使用するための1つの引数です。しかし、ユーザーがプログラマーであれば、私はそれを正当化するのが難しいだろう。 – wst

関連する問題