Enterprise Mashup Markup Language



EMML oder Enterprise Mashup Markup Language ist eine XML- Auszeichnungssprache zum Erstellen von Unternehmens- Mashups , bei denen es sich um Softwareanwendungen handelt, die Daten aus einer Vielzahl von Quellen verbrauchen und mischen, oftmals logische oder mathematische Operationen durchführen und Daten präsentieren. Gestaltete Daten, die von Unternehmens-Mashups produziert werden, werden in grafischen Benutzeroberflächen als Mashlets, Widgets oder Gadgets präsentiert. EMML kann auch  als eine deklarative Mashup domänenspezifische Sprache (DSL). Ein Mashup DSL eliminiert die Notwendigkeit für komplexe, zeitaufwändige und wiederholbare prozedurale Programmierlogik, um Unternehmens-Mashups zu erstellen.

Die primären Vorteile von EMML sind Mashup Design Portabilität und Interoperabilität von Mashup-Lösungen. Diese Vorteile werden voraussichtlich die Annahme von Unternehmens-Mashups beschleunigen, indem sie übertragbare Fähigkeiten für Softwareentwickler erstellen und die Verkabelung des Herstellers reduzieren . Die Einführung von EMML soll dazu beitragen, den Trend zur Integration von Web-basierten Anwendungen und serviceorientierten Architekturen (SOA) zu beschleunigen . [1] Bank of America war ein hochkarätiger, frühen Unterstützer von EMML. [2] Weitere prominente frühe Unterstützer waren Hewlett-Packard , Capgemini , Adobe Systemsund Intel . [3]

EMML Geschichte

Raj Krishnamurthy (Chefarchitekt bei der JackBe Corporation) und Deepak Alur (VP Engineering bei der JackBe Corporation) haben 2006 mit der Arbeit an der EMML begonnen. Ihr Ziel war es, benutzerorientierte und benutzerfreundliche Mashups zu schaffen, indem sie dann eine neue Art von Middleware anrief Eine Enterprise Mashup Plattform. Raj Krishnamurthy wurde der Chef-Sprachdesigner und Implementierer von EMML und führte auch das Team, um eine Eclipse- basierte EMML IDE namens Mashup Studio zu erstellen . [4] Diese Arbeit entwickelte sich in die EMML-Referenzimplementierung, die an die Open Mashup Alliance gespendet wurde. Raj Krishnamurthy ist nach wie vor einer der Hauptbeteiligten der EMML durch die Open Mashup Alliance.

EMML-Funktionen

EMML-Sprache bietet eine umfangreiche Reihe von High-Level-Mashup-Domain-Vokabular zu verbrauchen und mischen eine Vielzahl von Web-Daten-Quellen in flexibler Weise. EMML bietet eine einheitliche Syntax, um heterogene Dienststile aufzurufen: REST , WSDL , RSS / ATOM , RDBMS und POJO . Die EMML-Sprache bietet auch die Möglichkeit, verschiedene Datenformate zu kombinieren : XML , JSON , JDBC , JavaObjects und primitive Typen.

High-Level-EMML-Sprachfunktionen umfassen:

  • Filtern und sortieren von Daten aus heterogenen Diensten
  • Verbinden Sie Daten über heterogene Dienste und Datenformate
  • Gruppen- und Aggregatdaten mit Hilfe verschiedener Funktionen
  • Annotieren Sie die ursprünglichen Dienstdaten, um ihre semantische Bedeutung zu bereichern
  • Zusammenführen mehrerer Datenströme in konsolidierte Datensätze
  • Split-Datasets zur Auswahl einzelner Datenfelder
  • Eingebettete Scripting-Unterstützung für JavaScript , JRuby , Groovy , XQuery
  • Web-Clipping, um Daten aus HTML- Seiten zu kratzen
  • Bedingte Anweisungen – IfThenElseWhile,ForEach
  • Parallele Syntax für gleichzeitige Verarbeitung

EMML ist in erster Linie eine XML-basierte deklarative Sprache, bietet aber auch die Möglichkeit, komplexe Logik mit eingebetteten Scripting-Engines zu kodieren. XPath ist die Ausdruckssprache, die in EMML verwendet wird.

Directinvoke-Anweisung

directinvoke[5] bietet die Möglichkeit, eine Vielzahl von Datendiensten aufzurufen und zu verbrauchen. Diese Datendienste können REST- , RSS / ATOM- oder SOAP- Dienste sein. directinvokeUnterstützt auch das Web-Clipping, indem es HTML- Seiten als Service-Endpunkte spezifiziert. HTTP GET,POST,PUT, UndDELETEProtokolle werden unterstützt indirectinvoke. HTTP-Header und Cookie-Support ist auch verfügbar und bietet somit die Möglichkeit, eine Vielzahl von REST / SOAP- Webdiensten zu verbrauchen. Es ist möglich,directinvokemit einem Proxy-Server zu verwenden.

Codebeispiel von übergebenden Attributen als Parameter an einen Dienst:

< Directinvoke endpoint = "http://www.myCompany.com/rest-services/getItems"
 method = "GET" outputvariable = "$ result" query = "items = all"
 appID = "67GYH30N25" />
<directinvoke endpoint = "Http://www.svcsltd.com/getReservation"
 method = "GET" outputvariable = "$ news" xmlns: sc = "http://www.svcltd.com/"
 sc: date = "20070515" sc: Nächte = "3" />

Filter-Anweisung

Die filter[6] -Anweisung filtert den Inhalt einer Variablen mit einem XPath- Ausdruck und platziert das Ergebnis in eine neue Variable.

Code-Beispiel für die Filterung von Westküsten-Kunden mit Region Daten-Item:

<Filter inputvariable = "$ queryResult" filterexpr = "/ customers [region = 'West']" outputvariable = "$ westCoastOnly" />

Sortierung

Die Anweisung sort[7] sortiert den Inhalt einer Dokumenttypvariablen oder eines variablen Fragments anhand von Schlüsselausdrücken und stellt das Ergebnis in eine andere Variable ein.

Code-Beispiel, das Tickets nach dem erstellten Datum und dem Kunden sortiert:

<Sort inputvariable = "$ troubleTickets"
 sortexpr = "ticket"
 sortkeys = "xs: date (erstellt) absteigend, kunden aufsteigend"
 outputvariable = "$ troubleTickets" />

Groupby-Anweisung

groupby[8] bietet die Möglichkeit, Datensätze zu gruppieren und zu aggregieren. Standard- XPath- Aggregationsoperationen können verwendet werden, und es gibt einen Erweiterungsmechanismus zum Hinzufügen von benutzerdefinierten Funktionen. Verschachtelte Gruppierung von hierarchischen Datensätzen wird ebenfalls unterstützt. Es gibt eineHavingKlausel, um Gruppenattribute zu filtern.

Code-Beispiel, das Bücher nach Genre gruppiert und Gesamtkopien für jedes Genre berechnet:

<Group by = "$ catalog // book / genre" outputvariable = "$ groupResult" >
 <res: genre name = "{$ group_key}" copiessold = "{sum (copiessold)}" />
</ group>

Merge-Anweisung

merge[9] bietet die Möglichkeit, verschiedene Datenquellen wie RSS / ATOM- Feeds, XML , JSON- Payload-Formatezu kombinieren. Das Zusammenführungsmerkmal ähnelt derSQL UNIONFunktionalität, verschmilzt aber hierarchische Dokumentstrukturen.

Code-Beispiel, das Yahoo! Nachrichten, Finanznachrichten und Reuters-Feeds:

<Merge inputvariables = "$ YahooRSS, $ FinancialNewsRss, $ ReutersRSS"
 outputvariable = "$ NewsAggregate" />

Annotieren Sie die Anweisung

annotate[10] bietet die Möglichkeit, die semantische Bedeutung von Quelldienstdaten mit mikroformatähnlichen Elementen / Attributen zu bereichern. Diese Datenanmerkungen können von Mashlets oder Gadgets verwendet werden, um reichere visuelle Benutzeroberflächen bereitzustellen.

Codebeispiel für die Annotation der Lieferantenlade mit Geo-Koordinaten:

<Annotate variable = "$ vendors " expr = "/ vendor / site" >
element geo: lat {$ georesult // y: Latitude / string ()},
element geo: long {$ georesult // y: Längengrad / String ( )} </ Annotate>

Join-Anweisung

Die join[11] -Anweisung definiert, wie unterschiedlich hierarchische Datenformate verbunden sind und mit inneren Joins für relationale Datenbanken vergleichbar sind.

Code-Beispiel, bei dem die Ausgangsvariable ein <res:recommendations>Element mit einem sich wiederholenden Satz von <res:movie>Kindern enthält, die die Wiederholungspositionen sind. Jeder <res:movie>enthält ein <res:movietitle>Kind mit Daten aus der Variablen namens Filme und <res:rating>und <res:comment>Kinder mit Daten aus der Variablen namens Bewertungen:

<Join valuevariable = "$ joinResult"
 joincondition = "$ movies / movie / @ id=$ reviews / review / movie / title" >
 <select name = "res: Empfehlungen" >
 <res: movie>
 <res: movietitle> { $ Movies / title} </ res: movietitle>
 <res: rating> {$ reviews / rating} </ res: Bewertung>
 <res: Kommentar> {$ Bewertungen / Kommentar} </ res: Kommentar>
 </ res: movie >
 </ Select>
</ join>

Scripting in EMML

EMML ist eine deklarative Sprache, aber bietet programmatische Skripting [12] Erweiterungen für die Durchführung komplexer Mashup-Logik. JavaScript , JRuby , Groovy , POJO , XQuery Scripting Umgebungen werden unterstützt. Daten fließen nahtlos zwischen EMML und Scripting-Umgebungen.

Code-Beispiel, in dem JavaScript- Snippet verwendet wird, um das Authentifizierungstoken zu extrahieren, das für nachfolgende Anrufe erforderlich ist, die sich in der JavaScript- Umgebung ausbreitet :

< Script type = "text / javascript" >
<! [ CDATA [
 var r = neue String ( Ergebnis )
 var ar = r . Split ( "=" );
 Auth = ar [ ar . Länge - 1 ];
 Auth = auth . Slice ( 0 , - 1 )
 ]] >
</ script >

Referenzen

  1. Jump up^ „Wo ist die Zukunft von SOA Headed, wo das Web geht“ .
  2. Jump up^ „Warum Bank of America der offenen Mashup Alliance beigetreten ist“.
  3. Jump up^ „Enterprise Mashup-Befürworter beginnen zu organisieren“ .
  4. Jump up^ „JackBe kündigt kostenlose Enterprise Mashup Software“ .
  5. Jump up^ „EMML Dokumentation Directinvoke Kapitel“ .
  6. Jump up^ „EMML Documentation Filter Kapitel“ .
  7. Jump up^ „EMML Dokumentation Sortierkapitel“ .
  8. Jump up^ „EMML Dokumentation Groupby Kapitel“ .
  9. Jump up^ „EMML-Dokumentation zusammenführen Kapitel“ .
  10. Jump up^ „EMML-Dokumentation Annotate Kapitel“ .
  11. Jump up^ „EMML Dokumentation Verbinden Sie Kapitel“ .
  12. Jump up^ „EMML Dokumentation Skriptkapitel“.

Write a Comment

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.