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 [1] .
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".[2]
In EMML, the http-equiv
parameter is primarily used to identify the module of functionality. The content
parameter is used to set properties, methods, and associated events.
Actions
There are three main actions in the EMML language:
- Setting property values
- Invoking methods
- Retrieving information through events
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 x
and y
parameters from EMML 1.0 have been substituted for the left
and top
parameters familiar to CSS. This is also true for the w
and h
EMML 1.0 parameters that have become width
and height
in EMML 1.1. The way in which color is described was also changed to the #rrggbb
format of HTML and CSS.
Invoking methods
Methods are written in a way similar to setting a property. Again, the module appears in the http-equiv
parameter, and the action in the content
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 show
method from EMML 1.0 was dropped in favor of the visibility
parameter with the visible
value, similarly hide
is now the hidden
value of the visibility
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 name–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 batterynavigate
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 %s
. 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 s
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 signalevent
of the signal
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 .emmp
files; these can be linked to the HTML document using the import
method of the EMMLProfile
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 source
parameter will be set before the import
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
References
- ↑ Documentation: Georgia SoftWorks GSWBrowse for Windows RF Devices Archived 2012-03-14 at the Wayback Machine Retrieved 2011-07-08
- ↑ W3C Hypertext Markup Language - 2.0