EMML(エンタープライズ マッシュアップ マークアップ言語)は、エンタープライズマッシュアップを作成するためのXML マークアップ言語です。エンタープライズマッシュアップは、さまざまなソースからのデータを使用してマッシュアップするソフトウェア アプリケーションです。これらのアプリケーションは、多くの場合、データの表示だけでなく、論理演算や数学演算も実行します。
エンタープライズ マッシュアップによって生成されたマッシュデータは、マッシュレット、ウィジェット、またはガジェットとしてグラフィカル ユーザー インターフェイスに表示されます。EMML は宣言型マッシュアップドメイン固有言語(DSL) とも考えられます[1]。マッシュアップ DSL により、エンタープライズ マッシュアップを作成するために複雑で時間がかかり、繰り返し可能な手続き型プログラミング ロジックが不要になります。EMML は、エンタープライズ マッシュアップ用のビジュアル ツールを作成するための宣言型言語も提供します。
EMML の主な利点は、マッシュアップ デザインの移植性とマッシュアップ ソリューションの相互運用性です。これらの利点により、ソフトウェア開発者に移転可能なスキルが生まれ、ベンダー ロックインが軽減され、エンタープライズ マッシュアップの導入が加速すると期待されています。
EMMLの導入は、Webベースのアプリケーションとサービス指向アーキテクチャ(SOA)技術の統合の傾向を加速させると期待されています。[2] Bank of Americaは、 EMMLの初期の著名な支持者でした。[3]その他の著名な初期の支持者には、Hewlett-Packard、Capgemini、Adobe Systems、Intelなどがあります。[4]
EMMLの歴史
Raj Krishnamurthy (JackBe Corporation の主任設計者) と Deepak Alur (JackBe Corporation のエンジニアリング担当副社長) は、2006 年に EMML の作業を開始しました。彼らの目的は、当時は新しいタイプのミドルウェアであったエンタープライズ マッシュアップ プラットフォームを作成することで、ユーザー指向でユーザー対応のマッシュアップを実現することでした。Raj Krishnamurthy は EMML の主任言語設計者および実装者となり、チームを率いてEclipseベースの EMML IDEである Mashup Studio を作成しました。[5]この作業は、Open Mashup Alliance に寄贈された EMML リファレンス実装へと発展しました。Raj Krishnamurthy は、Open Mashup Alliance を通じて、引き続き EMML への主要な貢献者の 1 人です。
EMMLの機能
EMML 言語は、さまざまな Web データ ソースを柔軟に使用およびマッシュアップするための、高レベルのマッシュアップ ドメイン語彙の豊富なセットを提供します。EMML は、異種のサービス スタイル ( REST、WSDL、RSS / ATOM、RDBMS、POJO ) を呼び出すための統一された構文を提供します。EMML 言語は、 XML、JSON、JDBC、JavaObject、プリミティブ型など、 さまざまなデータ形式を混在させる機能も提供します。
高レベルの EMML 言語機能には以下が含まれます。
- 異種サービスから送信されるデータをフィルタリングおよび並べ替えます。
- 異種のサービスやデータ形式にわたってデータを結合します。
- さまざまな関数を使用してデータをグループ化および集計します。
- 元のサービス データに注釈を付けて、その意味を豊かにします。
- 複数のデータストリームを統合データセットにマージする
- データセットを分割して個々のデータ フィールドを選択します。
- JavaScript、JRuby、Groovy、XQueryの埋め込みスクリプト サポート
- HTMLページからデータを取得する Web クリッピング。
- 条件文 -
If/Then/Else、While、ForEach - 並行処理のための並列構文
EMML は主に XML ベースの宣言型言語ですが、埋め込みスクリプト エンジンを使用して複雑なロジックをエンコードする機能も提供します。XPathはEMMLで使用される式言語です。
Directinvoke ステートメント
directinvoke[6]は、さまざまなデータ サービスを呼び出して使用する機能を提供します。これらのデータ サービスは、REST、RSS / ATOM、またはSOAPサービスです。また、 HTMLページをサービス エンドポイントとして指定できるようにdirectinvokeすることで、Web クリッピングもサポートしています。では、、、、およびプロトコルがサポートされています。HTTP ヘッダーと Cookie のサポートも利用できるため、さまざまなREST / SOAP Web サービスを利用できます。プロキシ サーバーを
併用することも可能です。HTTP GETPOSTPUTDELETEdirectinvoke directinvoke
属性をパラメータとしてサービスに渡すコードサンプル:
<directinvokeエンドポイント = "http://www.myCompany.com/rest-services/getItems"メソッド = "GET"出力変数 = "$result"クエリ = "items=all"アプリ ID = "67GYH30N25" />
<directinvokeエンドポイント = "http://www.svcsltd.com/getReservation"メソッド = "GET"出力変数 = "$news" xmlns:sc = "http://www.svcltd.com/" sc:date = "20070515" sc:nights = "3" />
フィルターステートメント
filter[7]ステートメントは、 XPath式を使用して変数の内容をフィルタリングし、その結果を新しい変数に配置します。
地域データ項目を使用して西海岸の顧客をフィルタリングするためのコードサンプル:
<filter入力変数 = "$queryResult"フィルター式 = "/customers[region='West']"出力変数 = "$westCoastOnly" />
ソートステートメント
sort[8]ステートメントは、ドキュメント型変数または変数フラグメントの内容をキー式に基づいてソートし、その結果を別の変数に格納します。
作成日と顧客に基づいてチケットを並べ替えるコードサンプル:
<sort inputvariable= "$troubleTickets" sortexpr= "ticket" sortkeys= "xs:date(created) 降順、顧客昇順" outputvariable= "$troubleTickets" />
Groupby ステートメント
groupby[9]はデータセットをグループ化して集約する機能を提供します。標準のXPath集約操作を使用でき、ユーザー定義関数を追加するための拡張メカニズムがあります。階層データセットのネストされたグループ化もサポートされています。グループ属性をフィルタリングする句がありますHaving。
本をジャンル別にグループ化し、各ジャンルの合計コピー数を計算するコードサンプル:
<group by= "$catalog//book/genre" outputvariable= "$groupResult" > <res:genre name= "{$group_key}" copiessold= "{sum(copiessold)}" /> </group>
マージステートメント
merge[10]は、RSS / ATOMフィード、XML、JSONペイロード形式を含むさまざまなデータソースを組み合わせる機能を提供します。マージ機能はSQL UNION機能に似ていますが、階層的なドキュメント構造をマージします。
Yahoo! ニュース、金融ニュース、ロイターの フィードを統合するコードサンプル:
<merge入力変数 = "$YahooRSS、$FinancialNewsRss、$ReutersRSS"出力変数 = "$NewsAggregate" />
注釈文
annotate[11]は、マイクロフォーマットのような要素/属性を使用して、ソースサービスデータの意味を豊かにする機能を提供します。これらのデータ注釈は、マッシュレットやガジェットで使用され、より豊富な視覚的なユーザーインターフェイスを提供します。
ベンダー ペイロードに地理座標を注釈付けするためのコード サンプル:
<annotate変数 = "$vendors"式 = "/vendor/site" >
要素geo:lat { $georesult//y:Latitude/string() }、
要素geo:long { $georesult//y:Longitude/string() } </annotate>
結合ステートメント
join[12]ステートメントは、異なる階層型データ形式がどのように結合されるかを定義しており、リレーショナルデータベースの内部結合に相当します。
出力変数に、繰り返し項目である子<res:recommendations>の繰り返しセットを持つ要素が含まれるコード サンプル。それぞれに、 movies という名前の変数からのデータを持つ子と、reviews という名前の変数からのデータを持つ子が
含まれます。<res:movie><res:movie><res:movietitle><res:rating><res:comment>
<join outputvariable= "$joinResult" joincondition= "$movies/movie/@id = $reviews/review/movie/title" > <select name= "res:recommendations" > <res:movie> <res:movietitle> {$movies/title} </res:movietitle> <res:rating> {$reviews/rating} </res:rating> <res:comment> {$reviews/comment} </res:comment> </res:movie> </select> </join>
EMMLでのスクリプト
EMMLは宣言型言語ですが、複雑なマッシュアップロジックを実行するためのプログラムスクリプト[13]拡張機能を提供します。JavaScript 、JRuby、Groovy、POJO、XQueryスクリプト環境がサポートされています。データはEMMLとスクリプト環境の間でシームレスに流れます。
JavaScriptスニペットを使用して、後続の呼び出しに必要な認証トークンと、JavaScript環境 に伝播される「結果」変数を抽出するコード サンプル:
< script type = "text/javascript" >
<! [ CDATA [
var r = new String ( result ) var ar = r . split ( "=" ); auth = ar [ ar . length - 1 ]; auth = auth . slice ( 0 , - 1 ) ]] > </ script >
参考文献
- ^ 「Software AG」. document.softwareag.com . 2023年4月8日閲覧。
- ^ 「SOA の将来はどこに向かうのか? Web はどこへ向かうのか」。2015 年 11 月 17 日。
- ^ 「バンク・オブ・アメリカが Open Mashup Alliance に参加した理由」。2009 年 10 月 1 日時点のオリジナルよりアーカイブ。2009年 9 月 28 日閲覧。
- ^ 「エンタープライズ マッシュアップ推進派が組織化を開始」。2009 年 10 月 3 日時点のオリジナルよりアーカイブ。2009年 9 月 28 日閲覧。
- ^ 「JackBe、無料のエンタープライズ マッシュアップ ソフトウェアを発表」。2015 年 11 月 17 日。
- ^ 「EMML ドキュメント Directinvoke の章」。2009 年 9 月 30 日時点のオリジナルよりアーカイブ。2009年 10 月 11 日に閲覧。
- ^ 「EMML ドキュメント フィルターの章」。2009 年 10 月 17 日時点のオリジナルよりアーカイブ。2009年 10 月 11 日閲覧。
- ^ 「EMML ドキュメント ソートの章」。2009 年 9 月 29 日時点のオリジナルよりアーカイブ。2009年 10 月 11 日閲覧。
- ^ 「EMML Documentation Groupby chapter」。2009年9月29日時点のオリジナルよりアーカイブ。2009年10月11日閲覧。
- ^ 「EMML ドキュメントのマージの章」。2009 年 9 月 29 日時点のオリジナルよりアーカイブ。2009 年 10 月 11 日閲覧。
- ^ 「EMML Documentation Annotate chapter」。2009年9月30日時点のオリジナルよりアーカイブ。2009年10月11日閲覧。
- ^ 「EMML ドキュメント Join の章」。2009 年 9 月 29 日時点のオリジナルよりアーカイブ。2009 年 10 月 11 日に閲覧。
- ^ 「EMMLドキュメントのスクリプトの章」。
{{cite web}}:欠落または空|url=(ヘルプ)
