.mff ファイルの構成

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  関数 > Java、C# および C++ ライブラリを手動で参照する >

.mff ファイルの構成

MapForce 関数ファイル (.mff) は、 MapForce にカスタム Java、 C#、 または C++ ライブラリから関数の適用を可能にし、ライブラリウィンドウ内で表示される XML フォーマットの構成ファイルです。 .mff ファイルは、基本的にカスタムライブラリと MapForce の媒介であり、a) カスタム関数にインターフェイスし、 また、 b) 生成されたコード内に実装が存在する箇所を指定するために構成されていなければなりません。

 

メモ:*.mff ライブラリファイルは、Altova\MapForce2019\MapForceExamples..フォルダー内に収められている mff.xsd スキーマファイルに対して妥当である必要があります。スキーマは内部的な使用のためだけのもので、カスタムライブラリの構成が定義されます。Altova GmbH は、新規リリースにて、このファイルフォーマットを変更する権利を有しています。

 

C# に対応した基本的な mff ファイルの例を以下に示します::

 

<?xml version="1.0" encoding="UTF-8"?>
<mapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="mff.xsd" version="8" library="helloworld">
  <implementations>
    <implementation language="cs">
        <setting name="namespace" value="HelloWorldLibrary"/>
        <setting name="class" value="Greetings"/>
        <setting name="reference" value="C:\HelloWorldLibrary\HelloWorldLibrary.dll"/>
    </implementation>
  </implementations>
  <group name="string functions">
    <component name="hello">
        <sources>
          <datapoint name="greeting_type" type="xs:boolean"/>
        </sources>
        <targets>
          <datapoint name="result" type="xs:string"/>
        </targets>
        <implementations>
          <implementation language="cs">
              <function name="HelloFunction"/>
          </implementation>
        </implementations>
        <description>
          <short>result = hello(greeting_type)</short>
          <long>Returns a greeting sentence according to the given greeting_type.</long>
        </description>
    </component>
  </group>
</mapping>

 

mff ファイルが MapForce で表示される例を以下のイメージに示します。新たなライブラリ "helloworld" が、hello 文字列関数を含む(アルファベット順に並べ替えられた)ライブラリエントリーに表示されます。

mip1

ニーズに合うかたちで mff ファイルを適応させるステップを以下に示します:

 

 

ライブラリ名の構成方法

以下に示される mff ファイルのセグメントにてライブラリ名が宣言されます。慣例として、ライブラリ名は全て小文字で記述されます。

 

<mapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="mff.xsd" version="8" library="helloworld">

 

上のサンプルでは、ライブラリウィンドウに表示されるエントリは、"helloworld" と呼ばれます。

 

言語の実装の構成

<implementations> 要素はライブラリがサポートする言語を指定する必須要素であり、<mapping> の子として追加される必要があります。例:

 

...
<mapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="mff.xsd" version="8" library="helloworld">
  <implementations>
    <implementation language="cs">
        <setting name="namespace" value="HelloWorldLibrary"/>
        <setting name="class" value="Greetings"/>
        <setting name="reference" value="C:\HelloWorldLibrary\HelloWorldLibrary.dll"/>
    </implementation>
  </implementations>
...

 

<implementation> の設定により、生成されたコードから Java、C++、C# にて定義された関数を呼び出すことができるようになります。

 

.mff ファイルは、1つ以上の言語をターゲットすることができるように作成することができます。 この場合、追加言語ごとに追加 <implementation> 要素が含まれる必要があります。各プログラミング言語の設定を以下に示します。

 

Java

...
<implementation language="java">
  <setting name="package" value="com.hello.functions"/>
  <setting name="class" value="Hello"/>
</implementation>
...

 

生成されたコードから Hello.class ファイルを発見できるようにしておく必要があります。ファイルまでのパスを Java CLASSPATH へ入力してください。デフォルトのクラスパスはシステム環境変数にて確認することができます。

 

カスタム Java ライブラリを利用する場合、*.mff ファイルごとに 1 つのクラスを割り当てられることに注意してください。

 

C#

...
  <implementation language="cs">
    <setting name="namespace" value="HelloWorldLibrary"/>
    <setting name="class" value="Hello"/>
    <setting name="reference" value=" C:\HelloWorldLibrary\HelloWorldLibrary.dll"/>
  </implementation>
...

 

C# に関しては、コード内の名前空間が、 .mff ファイル 内で定義されている名前空間に一致することが重要です。(上のコードリストでの名前空間は、 HelloWorldLIbrary です)。 クラス名に関しても同様です (上のコードリストでの名前は Hello です)。第3の設定である、 reference は、生成されたコードへリンクする dll のパスを提供します。

 

C++

...
  <implementation language="cpp">
        <setting name="namespace" value="helloworld"/>
        <setting name="class" value="Greetings"/>
        <setting name="path" value="C:\HelloWorldLibrary"/>
        <setting name="include" value="Greetings.h"/>
        <setting name="source" value="Greetings.cpp"/>
  </implementation>
...

 

上の C++ サンプルリスティングに関して、以下に注意してください:

 

namespace は、 Greetings クラスが定義される名前空間です。この名前はライブラリ名と一致しなければなりません。
path は、ソールファイルを見つけることができるパスです。
マッピングのためのコードが生成されると、ソースファイルは( 「ファイル | コードを生成」 メニューオプションおよびディレクトリを選択する際に定義される) ディレクトリ targetdir/libraryname にコピーされ、プロジェクトファイルに含まれます

 

提供するファイルはすべて生成されるアルゴリズムに含まれます。

 

 

コンポーネントの追加

MapForce のライブラリウィンドウのグラフィカルユーザーインターフェイスでは、各関数は、関数グループの下にネストされ表示されます。例えば、「文字列関数」など。 .mff ファイル内では、関数は <component> 要素に対応します。一方、 各 <component> は、 <group> 要素の下でネストされる必要があります。例:

 

...
<group name="string functions">
  <component name="hello">
     …
  </component>
</group>
...

 

下に表示されるコードは、 hello と呼ばれるサンプル関数(コンポーネント)を定義しています。

 

...
<component name="hello">
  <sources>
    <datapoint name="greeting_type" type="xs:boolean"/>
  </sources>
  <targets>
    <datapoint name="result" type="xs:string"/>
  </targets>
  <implementations>
  …
  </implementations>
  <description>
    <short>result = hello(greeting_type)</short>
    <long>Returns a greeting sentence according to the given greeting_type.</long>
  </description>
</component>
...

 

MapForce 内でコンポーネントは以下のように表示されます:

mip2

上のコードリスティングでは、 <datapoint> は、大まかに(入力または出力コネクタとして知られる)関数の入力または出力パラメーターとして定義することができます。<datapoint> の type 引数は、パラメーターのデータ型  (または、戻り値のデータ型)を指定します。

 

各関数のために、ターゲットデータポイントのみが許可されています。定義することのできるソースデータポイントの数に制限はありません。

 

各データポイントのデータ型は、 XML スキーマ型 (例えば、 xs:string、 xs:integer など) の1つである必要があります。これらのデータ型は、 Java、 C++ または C# ライブラリ内出定義された関数のパラメーターの型のデータ型に対応します。XML スキーマデータ型を言語型にマッピングするには、 次を参照してください: データ型のマッピング

 

ライブラリウィンドウ内では関数は短い、および、長い説明と共に表示されています。短い説明は常に、関数名の右側に表示されますが、長い説明は、マウスを短い説明の上にポイントするとヒントとして表示されます。

 

短い説明:

 

mip3

 

長い説明:

 

mip4

 

言語の実装の定義

ライブラリウィンドウ内で カスタム Java、 C# または C++ クラスの関数間の接続を作成します。これは、 <implementation> 要素を使用することにより達成することができます。

 

上記の通り、1つの関数が、サポートされるプログラミング言語のために1つずつ、複数の実装要素を持つ場合があります。関数は、 Java 内では、 "helloFunction" と呼ばれ、 C++ 内では "HelloFunctionResponse" と呼ばれる場合があります。このため、各プログラミング言語のために個別の関数名を指定する必要があります。3つのプログラミング言語のための関数は以下に類似する可能性があります:

 

...
<component name="hello">
...
  <implementations>
    <implementation language="cs">
        <function name="HelloFunction"/>
    </implementation>
    <implementation language="java">
        <function name="helloFunction"/>
    </implementation>
    <implementation language="cpp">
        <function name="HelloFunctionResponse"/>
    </implementation>
  </implementations>
...
</component>
...

 

関数名として提供される値は、 Java、 C# または C++ クラス内のメソッドの名前に正確に一致する必要があります。


(C) 2019 Altova GmbH