XHTML 2 vs. HTML5: A Tale of Two World Wide Webs
Over the last decade, there have been two competing visions for the World Wide Web. These visions have recently become embodied in two different standards groups: the Web Hypertext Application Technology Working Group (WHATWG) and the World Wide Web Consortium (W3C) and by their relative proposals: XHTML 2 and HTML5.
The interesting thing about these two is not the minor syntactic differences between the two; it's the widely different problems that they are trying to address with very similar technology. Both have an idea of how the web should be, and their respective standards describe tools for implementing that web.
It's the Apps, Stupid!
Pushing web applications was a strategic move for Apple because it was the underdog in the desktop computing market, and web applications made it easier for people to switch to Mac OS X from Windows—they could just run the same software.
When the original iPhone was launched, the WHATWG technologies were the only official development environment. They provided accelerated 2D graphics with a rich PostScript-style model including antialiased beziers and composited raster graphics, audio and video playback, and even local storage. These were later largely downplayed in favor of native development.
The shift toward native applications is also easy to understand. Apple had a large early install base, so no longer had the underdog's incentive to make switching easy. Applications work just as well for lock-in on mobile devices as they do on desktops, and if all iPhone applications were web applications then it was very easy to switch to a competitor's model.
The Semantic Vision
The competing vision, championed by Sir Tim Berners-Lee and the W3C, was the semantic web. In this model, web pages and web services are the primary components of the web.
A web page contains semantic markup, allowing it to be parsed by a variety of tools and displayed in a range of ways. Web services provide information in XML that clients can process and interpret.
The core idea in this model is the separation of content from presentation. Servers provide data and services, but they don't (necessarily) dictate how they are displayed to clients. This alleviates some of the burden from the owner of the site because they are less responsible for ensuring that it displays nicely on a small-screen device or a Braille reader. Custom viewers for these devices are easy to write.
A Simple Example
For the two models, consider trying to book a journey. This involves finding hotels and organizing various forms of transport.
If you're flying, you may take trains to the station or possibly buses. You want to be able to find the shortest time and the cheapest transport, and compare the options. In the web applications model, each transport company will have a web application that lets you view their timetables. These are inconvenient to use when they are just one part of a journey, so you'll typically use an intermediary, which will let you compare various trips. It will present its own web application and will handle bookings for you.
In the semantic web vision, each transport company would provide a page containing their timetables and a web service for booking. They'd probably provide some default style sheet that would let you navigate this in a generic web browser, but you could also use a custom travel application that would collect information from all of the sources and provide cost and time calculations.
More importantly, the second approach implicitly encourages competition. If the data is available in an easy-to-use form, then it's relatively easy for anyone to build an interface to it. The barrier to entry is much lower.
Search and Advertising
In the last couple of years, we've seen a lot of popular web sites releasing mobile applications for Android and iOS. They are motivated by largely the same requirements as the semantic web model: that of needing a custom user interface for certain uses. A lot of them, however, implement their own custom protocols and explicitly make it difficult for a third party to provide a replacement.
This seems odd because a web site ought to have a vested interest in ensuring that its users can access its content easily, and allowing third-party tools to access it should encourage this.
Unfortunately, the problem is advertising. We're currently near the tail end of an Internet advertising bubble, and the main way of funding a web site is via advertising. Sometimes this is quite direct. You can probably see advertisements for some of my books on one side of this article: InformIT exists to try to persuade you that people who write books for Pearson write things worth buying, in the hope that next time you want to learn about some technology, one of these books will be your first choice. More commonly, however, advertising is provided by third parties.
If this article is reprinted elsewhere, but with attribution left intact, and people read it and think, "David Chisnall's a hoopy frood who really knows where his towel is; I'd better buy one of his books," then that's great. If a site depended on revenue from clicking on advertising, however, then putting it in a form where it's easy (and gives a better user experience) if you strip off the advertisements is not in their best interests.
Unfortunately, in the absence of micropayments, there really isn't a good revenue model for the semantic web, at least for sites that make money from their content.
This isn't universally the case: A lot of sites make money from disseminating their information. In the earlier example, a train company makes money from people travelling on their trains. If people know when their trains are running, then they're more likely to do so.
Oddly enough, a lot of companies fail to realize this. TV listings are a good example. These are often jealously guarded as if they are trade secrets and sold to a small number of companies for publication. Yet the TV stations make money by selling advertising, their advertising revenue is based on viewership figures, and their viewership is dependent on people (or, at least, DVRs) knowing when their shows are on.
A Hybrid World
Although I've portrayed these two visions as mutually exclusive, they don't have to be. There's no reason why you can't provide both: a web service presenting data in an easy machine-parseable form and a web application as the default front end. This may seem like a lot of extra work, but a good application—web or otherwise—is likely to employ a model-view-controller design. The web service encapsulates the model, and the web application encapsulates the controller and view.
A well-designed application using this model is also easy to turn into a mobile application. If all the back-end services are exposed as web services, it's easy to use off-the-shelf libraries for all the mobile (and, indeed, desktop) platforms to talk to it. You then need to write only the user interface and not worry about implementing yet another way of communicating with it.
Perhaps more importantly, other people can do this for you. If you provide some valuable service and document your APIs, then you can expect to see your users write applications for integrating with it. In some cases, even if you don't provide a sensible interface, then users will do this via screen scraping.
There was a case a while ago in the UK of an application developer being asked to remove an application that was getting train times from the operator's web site because it violated some terms and conditions. Apparently the web site owners forgot that the entire point of the site is to make it easier for people to get on their trains, the thing that actually makes money for their company.
A Case Study in Failure
The canonical example of how to entirely miss the point of the World Wide Web is the BBC iPlayer. The BBC charter requires it to provide entertaining and educational content to the widest possible audience in the UK. It tries to fulfill this requirement on the web via its iPlayer interface.
Now, if you were designing this sort of site with these goals in mind, you might think that the obvious thing to do would be provide RSS or Atom feeds of programs, with the URLs to download each one in a variety of different resolutions, and then wrap this in some web interface using either HTML5 or Flash, depending on the web browser's capabilities.
Unfortunately, their entire infrastructure is based on Flash. When Adobe killed Flash on recent versions of Android, the BBC suddenly realized that it had a problem and ported its infrastructure to a more sensible design. Well, something like that. The BBC actually asked Google and Adobe to put Flash back in the Google Play store for the UK.
If the BBC had provided an open set of APIs, then this would almost certainly not have been a problem. The Apple App Store and Google Play would already have numerous third-party apps for displaying iPlayer content, and it would be able to just list them and tell people who wanted to use its service without Flash to use one.
Why do I feel so confident to say this? Because even without a public documented API, there are already two third-party applications for downloading iPlayer content, plus a few GUI front ends.
Remember this lesson when you're designing a web site to provide information. There are sometimes commercial pressures to ensure that people use your interface, but make sure that these are actually aligned with your business objectives (and other buzzwords) before you give in to them.
If your service depends on advertising revenue, then it may be important to force access to go via your portal (although you may find that most of your customers just run ad blocking plugins, anyway).
If it isn't, and it exists to provide information that people can use to allow them to give you money, then think about presenting it not just in the best way that you can think of but also in a way that makes it easy for other people to expose it in ways that you haven't thought of.