EMML (Motorola)

EMML (Enterprise Mobility Mark-up Language) is an extension of the HTML language. It is less of a strict set of functions and tags, but more a standard for providing developers of web-based mobility applications a means to configure, control and retrieve information from additional input devices and features of rugged mobile computers.
History.
EMML 1.0.
EMML was first devised by James Morley-Smith in 2001, when working as a Software Developer at Symbol Technologies (now a wholly owned subsidiary of Motorola, Inc). As part of the first version of Symbol’s PocketBrowser, EMML was originally a mechanism for providing access to the barcode scanner built into many of Symbol's enterprise mobility devices. It was extended to include features such as WLAN signal indicators, power statistics and access to the communications port to allow for input from custom devices such as magnetic card readers and temperature probes.
EMML 1.0 support is currently offered by commercial browsers and development tools from companies such as Naurtech, Intermec, Wavelink, and Georgia Softworks 
EMML 1.1.
In 2009 Motorola created an updated version of EMML in order to co-ordinate it with other Internet standards, most notably CSS. There was a clear focus on simplifying the standard and reducing the amount of redundant code. In doing so, the number of bytes required to be downloaded was reduced and the readability of the language was vastly improved.
Previously, all parameters had to be supplied to each META function individually. This meant that each module might have several META tags, each taking up several bytes worth of data. In EMML 1.1, parameters can be supplied in a semi-colon delimited list, much like styles in a CSS style block in HTML.
Characteristics.
Usage of The META Tag.
EMML utilizes the META tag from the HTML language to set properties and specify callback functions by which the browser returns information. According to the W3C the META Tag is: "an extensible container for use in identifying specialized document meta-information".
In EMML, the codice_1 parameter is primarily used to identify the module of functionality. The codice_2 parameter is used to set properties, methods, and associated events.
Actions.
There are three main actions in the EMML language:
Setting Property Values.
In EMML, setting properties is a case of providing the module and property to set, followed by the value.
In EMML 1.0.
Example 1. The following is an example of setting the x-position in pixels of the on screen battery indicator in EMML 1.0:
<meta http-equiv="battery" content="x=100" /> 
Example 2. This is an example of several parameters being applied to the battery module using EMML 1.0:
<meta http-equiv="battery" content="x=10" />
<meta http-equiv="battery" content="y=10" />
<meta http-equiv="battery" content="rgb:ff,00,00" />
In EMML 1.1.
The example shown in Example 2. in In EMML 1.0 can be written this way in EMML 1.1:
<meta http-equiv="battery" content="left:10; top:10; color:#ff0000;" /> 
It is immediately apparent in the example from EMML 1.1 that there is less redundant information. It may also be observed that the codice_3 and codice_4 parameters from EMML 1.0 have been substituted for the codice_5 and codice_6 parameters familiar to CSS. This is also true for the codice_7 and codice_8 EMML 1.0 parameters that have become codice_9 and codice_10 in EMML 1.1. The way in which color is described was also changed to the codice_11 format of HTML and CSS.
Invoking Methods.
Methods are written in a way similar to setting a property. Again, the module appears in the codice_1 parameter, and the action in the codice_2 parameter.
In EMML 1.0.
The following would cause the on screen battery indicator to be displayed:
<meta http-equiv="battery" content="show" />
In EMML 1.1.
The codice_14 method from EMML 1.0 was dropped in favor of the codice_15 parameter with the codice_16 value, similarly codice_17 is now the codice_18 value of the codice_15 parameter.
<meta http-equiv="battery" content="left:10; top:10; color:#ff0000; visibility:visible;" />
Retrieving Information Through Events.
Retrieving information is carried out by specifying a callback function to which the EMML browser returns information. Typically, META functions which return information were named as the module name followed by the word "navigate". The callback function could be a URL, where the data is passed as named-value pairs in the query string, or a JavaScript function or variable.
In EMML 1.0.
The following is how you would set all of these for the codice_20 function in EMML 1.0
"Note: all of these methods would not be included in one document, they are included here as an example."
<!-- A call-back to a URL -->
<meta http-equiv="batterynavigate" content="http://myserver/mypage.html?ACLineStatus=%s&BatteryLifePercent=%s&BackupBatteryLifePercent=%s" />
<!-- A call-back to a JavaScript function -->
<meta http-equiv="batterynavigate" content="Javascript:doBattery('%s', '%s', '%s');" />
<!-- A call-back to a JavaScript variable -->
<meta http-equiv="batterynavigate" content="Javascript:var bACLine = '%s'; var iBattPC = '%s'; var iBkUpPC ='%s';" />
In EMML 1.0, you specify a place holder for each value you are interested in using a codice_21. This has the drawback of requiring the developer to supply a placeholder for inconsequential values. For example, placeholders would be required for 8 values, even if only the 1st and 8th values were of interest.
In EMML 1.1.
In EMML 1.1 events have a parameter value for each event and each module can therefore support more than one event.
<meta http-equiv="battery" content="batteryevent:url('http://myserver/mypage.html?ACLineStatus=%s&BatteryLifePercent=%s&BackupBatteryLifePercent=%s');" />
Or
<meta http-equiv="battery" content="batteryevent:url('Javascript:doBatt('%s', '%s');');" />
In EMML 1.1, the codice_22 can be substituted for a numerical value representing the position of the value of interest. Therefore, if requesting the 1st and 8th values from the codice_23 of the codice_24 module, the tag might be written as follows:
<meta http-equiv="signal" content="signalevent:url('Javascript:doWLAN('%1', '%8');');" />
EMML Profiles (EMMP).
Also added in EMML 1.1 were EMML Profiles. EMML Profiles are similar to CSS style sheets. An EMML Profile allows for the creation of EMML classes—a common set of EMML META tags which can be applied to a page or element.
Below is an example of an EMML Profile Page:
.inventoryBarcodes {
 scanner-alldecoders: disabled;
 scanner-code128redundancy: true;
 scanner-code128minlength: 10;
 scanner-code128maxlength: 16;
 scanner-code128: enabled;
 scanner-ean13: enabled;
 scanner-i2of5: enabled; 
.inventoryBattery {
 battery-left: 10;
 battery-top: 0;
 battery-visibility: visible;
EMML Profiles are stored in codice_25 files; these can be linked to the HTML document using the codice_26 method of the codice_27 module. This is an example of how an EMMP file would be linked:
<META HTTP-Equiv="emmlprofile" Content="source:url('http://myserver/inventoryprofiles.emmp'); import;">
"Note: Each META tag is parsed from left to right applying each component part in turn. Therefore, in the above example, the "codice_28 "parameter will be set before the "codice_26" method is called. The same is true for EMML Profiles which are applied from top downwards."
When a profile page is linked, the class name can simply be referenced, and with that, all the parameters in the profile can be applied with one command.
<meta http-equiv="emmlprofile" content="apply:inventoryBarcode; apply:inventoryBattery" />
As can be seen from the example above, it is possible to set any number of profiles. When doing this, however, one should be aware of conflicting parameters.
See also.
Rhodes Framework