More To WAP Than Meets The Eye
July 5, 2000
If you thought WML was the de facto page markup language for the WAP, you'll be surprised to know that a lot of available WAP services are in fact written in HDML. This is especially the case in North America and Japan, where you'll find a good number of HDML rendering devices. But what is HDML?
HDML is an SGML application. In contrast, WML is an XML application. Both share the same elements--but some HDML elements differ from their WML counterparts by being packaged as "omit tags." As you know, in XML, a single tag element such as the <select /> element is ended with a "/". This indicates that the element does not contain data, and that it does not need a beginning and ending tag. It only needs a single tag.
The same element in the SGML world is expressed (without a "/") as follows: <select>. An SGML parser needs a DTD to indicate which elements are to be "omit tags." This is not needed in XML, since a standalone tag can be easily recognized by the "/" symbol. So, because the HDML element set is SGML-based, you can expect that some of its elements are omit tags and thus cannot be parsed by an XML parser.
You may think that only old digital phones include HDML browsers and that new phones have WML browsers. I was thinking the same thing too until I bought my new toy: a Neopoint 1000. I was surprised to discover that it wasn't displaying my WML documents. At first, I was puzzled by the fact that these documents were properly rendered in the Phone.com emulator and not on the real life phone. But, after the usual debugging process, I was even more puzzled to discover that this brand new phone was only able to render HDML files! So, don't view HDML as a thing of the past, this is not yet the case.
You can figure this out yourself with a Phone.com emulator (you can get one by downloading the wireless SDK at their site http://www.phone.com). First, type the following URL in the address text box: http://netdrive.com. Then pay attention to the received document's MIME type in the trace window. As you'll notice, the home page's MIME type is set to text/x-hdml. Now, go to the Phone.com site (by entering http://phone.com in the address text box), and notice that this time the MIME type is set to text/vnd.wap.wml. The former MIME type indicates that the document is an HDML document, and the latter that the document is a WML document.
OK, have you tried that by yourself? No? What are you waiting for? Try it, and you will notice another interesting fact. The netdrive.com site can be reached from both a desktop browser and a phone device (or an emulator) with the same URL. In fact, its HTTP server and, more particularly, the server's application, detects the user agent requesting a "home" document and sends an HDML document for a phone device and an HTML document for a desktop browser. Expect to see more sites behaving intelligently when different user agents request a document from them.
For instance, an intelligent site would send different home pages for different devices:
- An I-Mode, HDML, or WML document for digital phones
- An HTML document for desktop browsers
- A VoiceXML document for voice browsers or phones
You may have noticed "VoiceXML for phones" there. We'll keep a fuller exposition of VoiceXML for another column, but for now think about accessing a VoiceXML document through a regular phone, and then how many phones there are on the planet. This will give you an idea of the potential of the VoiceXML technology, just now appearing on the scene.
Is it possible to create an HDML document from XSLT? Yes, if you are using XT. An HDML Output handler kit is available from the http://www.4xt.org site. After having installed the HDML output handler, include in your XSLT style sheet the following declaration to tell the XT engine that HDML output is required--and thus obtain the proper behavior with standalone elements.
<xsl:output method="java:HDMLOutputHandler" xmlns:java="http://www.jclark.com/xt/java" />
An XSLT template should contain well formed XML elements. This is incompatible with
What to do then? For instance, if a template requires a standalone element like
<ACTION>, we simply include it as a well-formed XML element like this:
<xsl:template match="page"> <P> This is a simple example<BR/> <ACTION TYPE="ACCEPT" LABEL="Sample" TASK="GO" DEST="#Sample"/> </P> <xsl:apply-templates/> </xsl:template>
The output created by the HDML Output handler will modify the well-formed XML document into an SGML-based HDML document, as below:
<P> This is a simple example<BR> <ACTION TYPE="ACCEPT" LABEL="Sample" TASK="GO" DEST="#Sample"> </P>
The <BR/> is changed to <BR>. The same treatment is applied to the ACTION element.
Another solution to transforming XML into HDML is to use DSSSL and the OpenJade toolset, with the extension James Clark created to produce SGML elements instead of DSSSL formatting objects. For instance, the transformation from the previous example would be stated in DSSSL as follows:
(element Page (make element gi: "P" (make empty-element gi: "ACTION" attributes: "TYPE=ACCEPT LABEL=Sample TASK=GO DEST=#Sample" ) ) (process-children) )
Or, if you use an HDML library, as follows:
(element Page (make P (make ACTION TYPE: "ACCEPT" LABEL: "Sample" TASK: "GO" DEST: "#Sample" ) ) (process-children) )
Actually, the OpenJade package does not support the query rule that allows matching a construction rule to either an element or an attribute. The element rule can only be matched with an element. A construction rule is the rule's body containing all the "make" functions. A "make" function creates an element in the output tree.
So, OpenJade can be used for simple XML to HDML transformations, where element matching is sufficient. When more sophisticated transformations are required, or if the XSLT syntax is more familiar to you, XT with the HDML Output handler should be used. A big advantage of using XT is that you can also chunk the XML document into several smaller HDML documents. In that sense, XT offers better features, and I would recommend it for XML to HDML transformation.