EMML , o Enterprise Mashup Markup Language , es un lenguaje de marcado XML para crear mashups empresariales , que son aplicaciones de software que consumen y mezclan datos de una variedad de fuentes, a menudo realizando operaciones lógicas o matemáticas además de presentar datos. Los datos triturados producidos por los mashups empresariales se presentan en interfaces gráficas de usuario como mashlets, widgets o gadgets. EMML también se puede considerar [ cita requerida ] como un lenguaje declarativo mashup específico del dominio(DSL). Un mashup DSL elimina la necesidad de una lógica de programación de procedimientos repetible, compleja y que requiere mucho tiempo para crear mashups empresariales. EMML también proporciona un lenguaje declarativo para crear herramientas visuales para mashups empresariales.
Los principales beneficios de EMML son la portabilidad del diseño de mashup y la interoperabilidad de las soluciones de mashup. Se espera que estos beneficios aceleren la adopción de mashups empresariales al crear habilidades transferibles para los desarrolladores de software y reducir la dependencia de los proveedores . Se espera que la introducción de EMML ayude a acelerar la tendencia hacia la integración de aplicaciones basadas en Web y tecnologías de arquitectura orientada a servicios (SOA). [1] Bank of America fue uno de los primeros partidarios de EMML de alto perfil. [2] Otros primeros partidarios destacados fueron Hewlett-Packard , Capgemini , Adobe Systems e Intel . [3]
Historia EMML
Raj Krishnamurthy (arquitecto jefe de JackBe Corporation) y Deepak Alur (vicepresidente de ingeniería de JackBe Corporation) comenzaron a trabajar en EMML en 2006. Su objetivo era habilitar mashups orientados al usuario y habilitados para el usuario mediante la creación de lo que entonces era un nuevo tipo de middleware llamado una plataforma empresarial mashup. Raj Krishnamurthy se convirtió en el diseñador de lenguaje principal e implementador de EMML y también dirigió al equipo para crear un IDE de EMML basado en Eclipse llamado Mashup Studio. [4] Este trabajo evolucionó hacia la implementación de referencia EMML que fue donada a Open Mashup Alliance. Raj Krishnamurthy sigue siendo uno de los contribuyentes clave de EMML a través de Open Mashup Alliance.
Funciones EMML
El lenguaje EMML proporciona un rico conjunto de vocabulario de dominio mashup de alto nivel para consumir y combinar una variedad de fuentes de datos web de formas flexibles. EMML proporciona una sintaxis uniforme para invocar estilos de servicio heterogéneos: REST , WSDL , RSS / ATOM , RDBMS y POJO . El lenguaje EMML también brinda la capacidad de mezclar diversos formatos de datos: XML , JSON , JDBC , JavaObjects y tipos primitivos.
Las características del lenguaje EMML de alto nivel incluyen:
- Filtrar y ordenar datos provenientes de servicios heterogéneos
- Unir datos a través de servicios y formatos de datos heterogéneos
- Agrupar y agregar datos usando funciones variadas
- Anotar datos de servicio originales para enriquecer su significado semántico
- Fusionar múltiples flujos de datos en conjuntos de datos consolidados
- Dividir conjuntos de datos para seleccionar campos de datos individuales
- Soporte de scripting integrado para JavaScript , JRuby , Groovy , XQuery
- Recorte web para extraer datos de páginas HTML
- Las sentencias condicionales -
If
/Then
/Else
,While
,ForEach
- Sintaxis paralela para procesamiento concurrente
EMML es principalmente un lenguaje declarativo basado en XML, pero también proporciona la capacidad de codificar lógica compleja utilizando motores de secuencias de comandos integrados. XPath es el lenguaje de expresión utilizado en EMML.
Declaración de invocación directa
directinvoke
[5] proporciona la capacidad de invocar y consumir una variedad de servicios de datos. Estos servicios de datos pueden ser servicios REST , RSS / ATOM o SOAP . directinvoke
también admite el recorte web al permitir que laspáginas HTML se especifiquen como puntos finales de servicio. HTTP GET
,POST
,PUT
, YDELETE
protocolos están soportados endirectinvoke
. El soporte de cookies y encabezado HTTP también está disponible, lo que brinda la capacidad de consumir una amplia variedad de servicios web REST / SOAP . Se puede utilizarcon un servidor proxy.directinvoke
Ejemplo de código para pasar atributos como parámetros a un servicio:
endpoint = "http://www.myCompany.com/rest-services/getItems" method = "GET" outputvariable = "$ result" query = "items = all" appID = "67GYH30N25" /> endpoint = "http://www.svcsltd.com/getReservation" method = "GET" outputvariable = "$ news" xmlns: sc = "http://www.svcltd.com/" sc: date = "20070515 " sc: noches = " 3 " />
Declaración de filtro
La declaración filter
[6] filtra el contenido de una variable usando una expresión XPath y coloca el resultado en una nueva variable.
Ejemplo de código para filtrar clientes de la costa oeste mediante el elemento de datos de la región:
inputvariable = "$ queryResult" filterexpr = "/ customers [region = 'West']" outputvariable = "$ westCoastOnly" />
Ordenar declaración
La instrucción sort
[7] ordena el contenido de una variable de tipo documento o un fragmento de variable en función de expresiones clave y coloca el resultado en otra variable.
Ejemplo de código que clasifica los tickets según la fecha de creación y el cliente:
inputvariable = "$ problemTickets" sortexpr = "ticket" sortkeys = "xs: fecha (creada) descendente, cliente ascendente" outputvariable = "$ problemTickets" />
Declaración de Groupby
groupby
[8] proporciona la capacidad de agrupar y agregar conjuntos de datos. Se pueden utilizar operaciones de agregación XPath estándary hay un mecanismo de extensión para agregar funciones definidas por el usuario. También se admite la agrupación anidada de conjuntos de datos jerárquicos. Hay unaHaving
cláusula para filtrar los atributos de grupo.
Muestra de código que agrupa los libros por género y calcula el total de copias para cada género:
by = "$ catalog // book / genre" outputvariable = "$ groupResult" > name = "{$ group_key}" copiessold = "{sum (copiessold)}" />
Declaración de fusión
merge
[9] ofrece la posibilidad de combinar varias fuentes de datos, incluidos feeds RSS / ATOM , XML ,formatos de carga útil JSON . La función de combinación es similar a laSQL UNION
funcionalidad, pero combina estructuras de documentos jerárquicas.
Ejemplo de código que fusiona Yahoo! Noticias , noticias financieras , y Reuters alimentaciones :
inputvariables = "$ YahooRSS, $ FinancialNewsRss, $ ReutersRSS" outputvariable = "$ NewsAggregate" />
Anotar declaración
annotate
[10] proporciona la capacidad de enriquecer el significado semántico de los datos del servicio de origen con elementos / atributos de tipo microformato. Estas anotaciones de datos pueden ser utilizadas por mashlets o gadgets para proporcionar interfaces de usuario visuales más ricas.
Ejemplo de código para anotar la carga útil del proveedor con coordenadas geográficas:
variable = "$ vendors" expr = "/ vendor / site" > elemento geo: lat {$ georesult // y: Latitude / string ()}, elemento geo: long {$ georesult // y: Longitude / string ()}
Declaración de unión
La declaración join
[11] define cómo se unen los formatos de datos jerárquicos y dispares y es comparable a las uniones internas para bases de datos relacionales.
Ejemplo de código donde la variable de salida contiene un
elemento con un conjunto repetido de elementos secundarios
, que son los elementos repetidos. Cada uno
contiene un
niño con datos de la variable llamada películas
y
niños con datos de la variable llamada reseñas:
outputvariable = "$ joinResult" joincondition = "$ movies / movie / @ id = $ reviews / review / movie / title" > name = " res: Recommendations " > { $ movies / title} {$ reviews / rating} {$ reviews / comment}
Secuencias de comandos en EMML
EMML es un lenguaje declarativo, pero proporciona extensiones de scripting [12] para ejecutar lógica mashup compleja. Se admiten los entornos de scripting JavaScript , JRuby , Groovy , POJO , XQuery . Los datos fluyen sin problemas entre EMML y entornos de scripting.
Ejemplo de código en JavaScript fragmento se utiliza para la autenticación de extracto de token que se requiere para las llamadas posteriores variable "resultado" que consigue propaga a JavaScript medio ambiente:
< script type = "text / javascript" > [ CDATA [ var r = nueva cadena ( resultado ) var ar = r . dividir ( "=" ); auth = ar [ ar . longitud - 1 ]; auth = auth . rebanada ( 0 , - 1 ) ]] > script >
Referencias
- ^ "¿Hacia dónde se dirige el futuro de SOA? Hacia dónde va la web" .
- ^ "Por qué Bank of America se unió a la Open Mashup Alliance" .
- ^ "Los proponentes del mashup empresarial comienzan a organizarse" .
- ^ "JackBe anuncia software mashup de empresa libre" .
- ^ "Capítulo de invocación directa de documentación EMML" .
- ^ "Capítulo Filtro de documentación EMML" .
- ^ "Capítulo de ordenación de documentación EMML" .
- ^ "Capítulo de Groupby Documentación EMML" .
- ^ "Capítulo de fusión de documentación EMML" .
- ^ "Capítulo de anotación de documentación EMML" .
- ^ "Capítulo Unirse a la documentación de EMML" .
- ^ "Capítulo de secuencias de comandos de documentación EMML". Falta o vacío
|url=
( ayuda )