This article has multiple issues. Please help improve it or discuss these issues on the talk page . (Learn how and when to remove these template messages)
|
EMML, or Enterprise Mashup Markup Language, is an XML markup language for creating enterprise mashups, which are software applications that consume and mash data from variety of sources. These applications often perform logical or mathematical operations as well as present the data.
Mashed data produced by enterprise mashups are presented in graphical user interfaces as mashlets, widgets, or gadgets. EMML can also be [1] considered a declarative mashup domain-specific language (DSL). A mashup DSL eliminates the need for complex, time-consuming, and repeatable procedural programming logic to create enterprise mashups. EMML also provides a declarative language for creating visual tools for enterprise mashups.
The primary benefits of EMML are mashup design portability and interoperability of mashup solutions. These benefits are expected to accelerate the adoption of enterprise mashups by creating transferable skills for software developers and reducing vendor lock-in.
The introduction of EMML is expected to help accelerate the trend toward the integration of web-based applications and service-oriented architecture (SOA) technologies. [2] Bank of America was a high-profile early supporter of EMML. [3] Other prominent early supporters included Hewlett-Packard, Capgemini, Adobe Systems, and Intel. [4]
Raj Krishnamurthy (chief architect at JackBe Corporation) and Deepak Alur (VP engineering at JackBe Corporation) started working on EMML in 2006. Their objective was to enable user-oriented and user-enabled mashups by creating what was then a new type of middleware called an Enterprise Mashup Platform. Raj Krishnamurthy became the chief language designer and implementer of EMML and also led the team to create an Eclipse-based EMML IDE called Mashup Studio. [5] This work evolved into the EMML reference implementation that was donated to the Open Mashup Alliance. Raj Krishnamurthy continues to be one of the key contributors to EMML through the Open Mashup Alliance.
EMML language provides a rich set of high-level mashup-domain vocabulary to consume and mash a variety of web data-sources in flexible ways. EMML provides a uniform syntax to invoke heterogeneous service styles: REST, WSDL, RSS/ATOM, RDBMS, and POJO. The EMML language also provides the ability to mix diverse data formats: XML, JSON, JDBC, JavaObjects, and primitive types.
High-level EMML language features include:
If
/Then
/Else
, While
, ForEach
EMML is primarily an XML-based declarative language, but also provides the ability to encode complex logic using embedded scripting engines. XPath is the expression language used in EMML.
directinvoke
[6] provides ability to invoke and consume a variety of data services. These data services may be REST, RSS/ATOM, or SOAP services. directinvoke
also supports Web clipping by allowing HTML pages to be specified as service endpoints. HTTP GET
, POST
, PUT
, and DELETE
protocols are supported in directinvoke
. HTTP Header and cookie support is also available thus providing the capability to consume a wide variety of REST/SOAP Web services. It is possible to use directinvoke
with a proxy server.
Code sample of passing attributes as parameters to a service:
<directinvokeendpoint="http://www.myCompany.com/rest-services/getItems"method="GET"outputvariable="$result"query="items=all"appID="67GYH30N25"/><directinvokeendpoint="http://www.svcsltd.com/getReservation"method="GET"outputvariable="$news"xmlns:sc="http://www.svcltd.com/"sc:date="20070515"sc:nights="3"/>
The filter
[7] statement filters the content of a variable using an XPath expression and places the result in a new variable.
Code sample for filtering west-coast customers using region data-item:
<filterinputvariable="$queryResult"filterexpr="/customers[region='West']"outputvariable="$westCoastOnly"/>
The sort
[8] statement sorts the content of a document-type variable or variable fragment based on key expressions and places the result in another variable.
Code sample that sorts tickets based on created date and customer:
<sortinputvariable="$troubleTickets"sortexpr="ticket"sortkeys="xs:date(created) descending, customer ascending"outputvariable="$troubleTickets"/>
groupby
[9] provides the ability to group and aggregate data sets. Standard XPath aggregation operations can be used and there is an extension mechanism for adding user-defined functions. Nested Grouping of hierarchical data sets are also supported. There is a Having
clause to filter Group attributes.
Code sample that groups books by genre and computes total copies for each genre:
<groupby="$catalog//book/genre"outputvariable="$groupResult"><res:genrename="{$group_key}"copiessold="{sum(copiessold)}"/></group>
merge
[10] provides ability to combine various data sources including RSS/ATOM feeds, XML, JSON payload formats. The merge feature is similar to SQL UNION
functionality but merges hierarchical document structures.
Code sample that merges Yahoo! News, Financial News, and Reuters feeds:
<mergeinputvariables="$YahooRSS, $FinancialNewsRss, $ReutersRSS"outputvariable="$NewsAggregate"/>
annotate
[11] provides ability to enrich the semantic meaning of source service data with microformat-like elements/attributes. These data annotations can be used by mashlets or gadgets to provide richer visual user interfaces.
Code sample for annotating vendor payload with geo-coordinates:
<annotatevariable="$vendors"expr="/vendor/site"> elementgeo:lat{$georesult//y:Latitude/string()}, elementgeo:long{$georesult//y:Longitude/string()}</annotate>
The join
[12] statement defines how disparate, hierarchical data formats are joined and is comparable to inner joins for relational databases.
Code sample where output variable contains a <res:recommendations>
element with a repeating set of <res:movie>
children, which are the repeating items. Each <res:movie>
contains a <res:movietitle>
child with data from the variable named movies and <res:rating>
and <res:comment>
children with data from the variable named reviews:
<joinoutputvariable="$joinResult"joincondition="$movies/movie/@id = $reviews/review/movie/title"><selectname="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 is a declarative language, but provides programmatic scripting [13] extensions for performing complex mashup logic. JavaScript, JRuby, Groovy, POJO, XQuery scripting environments are supported. Data flows seamlessly between EMML and scripting environments.
Code sample where JavaScript snippet is used to extract authentication token that is required for subsequent calls "result" variable that gets propagated to JavaScript environment:
<scripttype="text/javascript"><![CDATA[varr=newString(result)varar=r.split("=");auth=ar[ar.length-1];auth=auth.slice(0,-1)]]></script>
Extensible Markup Language (XML) is a markup language and file format for storing, transmitting, and reconstructing arbitrary data. It defines a set of rules for encoding documents in a format that is both human-readable and machine-readable. The World Wide Web Consortium's XML 1.0 Specification of 1998 and several other related specifications—all of them free open standards—define XML.
XSLT is a language originally designed for transforming XML documents into other XML documents, or other formats such as HTML for web pages, plain text or XSL Formatting Objects, which may subsequently be converted to other formats, such as PDF, PostScript and PNG. Support for JSON and plain-text transformation was added in later updates to the XSLT 1.0 specification.
A list comprehension is a syntactic construct available in some programming languages for creating a list based on existing lists. It follows the form of the mathematical set-builder notation as distinct from the use of map and filter functions.
Adobe ColdFusion is a commercial rapid web-application development computing platform created by J. J. Allaire in 1995. ColdFusion was originally designed to make it easier to connect simple HTML pages to a database. By version 2 (1996) it had become a full platform that included an IDE in addition to a full scripting language.
XForms is an XML format used for collecting inputs from web forms. XForms was designed to be the next generation of HTML / XHTML forms, but is generic enough that it can also be used in a standalone manner or with presentation languages other than XHTML to describe a user interface and a set of common data manipulation tasks.
Saxon is an XSLT and XQuery processor created by Michael Kay and now developed and maintained by his company, Saxonica. There are open-source and also closed-source commercial versions. Versions exist for Java, JavaScript and .NET.
Apache XML is a category of projects at the Apache Software Foundation that focus on XML-related projects.
A mashup, in web development, is a web page or web application that uses content from more than one source to create a single new service displayed in a single graphical interface. For example, a user could combine the addresses and photographs of their library branches with a Google map to create a map mashup. The term implies easy, fast integration, frequently using open application programming interfaces and data sources to produce enriched results that were not necessarily the original reason for producing the raw source data. The term mashup originally comes from creating something by combining elements from two or more sources.
A web template system in web publishing allows web designers and developers work with web templates to automatically generate custom web pages, such as the results from a search. This reuses static web page elements while defining dynamic elements based on web request parameters. Web templates support static content, providing basic structure and appearance. Developers can implement templates from content management systems, web application frameworks, and HTML editors.
Yahoo! Pipes was a web application from Yahoo! that provided a graphical user interface for building data mashups that aggregate web feeds, web pages, and other services; creating Web-based apps from various sources; and publishing those apps. The application worked by enabling users to "pipe" information from different sources and then set up rules for how that content should be modified. In addition to the pipe editing page, the website had a documentation page and a discussion page. The documentation page contained information about pipes including guides for the pipe editor and troubleshooting. The discussion page enabled users to discuss the pipes with other users.
XPath is an expression language designed to support the query or transformation of XML documents. It was defined by the World Wide Web Consortium (W3C) in 1999, and can be used to compute values from the content of an XML document. Support for XPath exists in applications that support XML, such as web browsers, and many programming languages.
WSO2 Mashup Server, an open-source mashup platform that used to host JavaScript-based mashups, is now deprecated and no longer in use. It was based on Apache Axis2 and other open-source projects, and allowed JavaScript to consume, compose and emit web services, feeds, scraped web pages, email, and instant messages. The source code was freely available under the open-source Apache License. It provided a runtime platform for developing and deploying mashups and could be downloaded and deployed locally or within an organization.
Content Assembly Mechanism (CAM) is an XML-based standard for creating and managing information exchanges that are interoperable and deterministic descriptions of machine-processable information content flows into and out of XML structures. CAM is a product of the OASIS Content Assembly Technical Committee.
Yahoo! Query Language (YQL) is an SQL-like query language created by Yahoo! as part of their Developer Network. YQL is designed to retrieve and manipulate data from APIs through a single Web interface, thus allowing mashups that enable developers to create their own applications using Yahoo! Pipes online tool.
XQuery is a query and functional programming language that queries and transforms collections of structured and unstructured data, usually in the form of XML, text and with vendor-specific extensions for other data formats. The language is developed by the XML Query working group of the W3C. The work is closely coordinated with the development of XSLT by the XSL Working Group; the two groups share responsibility for XPath, which is a subset of XQuery.
The Open Mashup Alliance (OMA) is a non-profit consortium that promotes the adoption of mashup solutions in the enterprise through the evolution of enterprise mashup standards like EMML. The initial members of the OMA include some large technology companies such as Adobe Systems, Hewlett-Packard, and Intel and some major technology users such as Bank of America and Capgemini.
Virtual Token Descriptor for eXtensible Markup Language (VTD-XML) refers to a collection of cross-platform XML processing technologies centered on a non-extractive XML, "document-centric" parsing technique called Virtual Token Descriptor (VTD). Depending on the perspective, VTD-XML can be viewed as one of the following:
An XML transformation language is a programming language designed specifically to transform an input XML document into an output document which satisfies some specific goal.
{{cite web}}
: Missing or empty |url=
(help)