Hyperlinks are the door handles of the Web, as they afford going to the next place you want to be. However, in a space as large as the Web, there is an awful lot of possible next places, so the webpage might not offer the door handle you are looking for. Luckily of course, there’s a thing called Google, but wouldn’t it be much more awesome if the links you need were already there on the page? Because right now, the author of the webpage has to make the decision where you can go, as he is the architect of the information. But should he also be the architect of the navigation or should that be you, the person surfing the Web?
As far as I’m concerned, the Web is the greatest innovation of the past 20 years. Sometimes we forget that a lot of hypertext research predates the Web; in fact, the idea goes back to 1945. When Tim Berners-Lee presented his World Wide Web, it was actually a simplification of many of the hypertext concepts of the time. However, it turned out to be the only hypertext system that was simple enough to scale globally. Simplification implies sacrificing complexity, which is a good thing, but you have to count your losses.
For the Web, the losses are in the strengths of hyperlinks. A simple example is the fact that links can break: links can outlive the linked pages, which was not the case in many alternative systems. This is a direct consequence of the unidirectional nature of the Web’s links. The party who publishes the information is responsible for adding the links, even though they are not the party who consumes those links. The biggest advantage of the Web is also its biggest drawback: somebody else decides where you can go and what you can do. But what what if you want to go somewhere else?
In my recent work, I have been focusing on exactly that question. My viewpoint is that the affordance on a webpage (the links and forms) should not come from a single central source, but from distributed sources that you choose. It’s not because an author is the best party for providing certain information, the he’s also the best party for providing the navigation for it. Distributed affordance is the idea in which services offered by different parties are instantiated for the specific piece of information you are viewing. That means if you’re viewing a page about this cool new movie, you will have a direct link to buy tickets for it at your local movie theater. If the movie is not so recent, there will be a download link for your Android tablet (since you don’t own an iPad anyway). And in any case, you’ll see a button to share this on your Google+ network (because you really dislike the Facebook button).
If this sounds like advertising, think again: it’s not your local movie theatre or the digital movie store that places those links there, it’s you who decide that you want those links to be there. You are taking control of your affordance and navigation. And it’s also stronger then bookmarks, because these only bring you to the front door of a website, while you want to be at a specific place. When you are reading about a movie, you want to be brought directly to the IMDB page of the movie, not just to the homepage of IMDB.
But how can we make this close connection between any piece of information and any possible action? I believe the answer is machine-readable semantics. This allows to have a tight coupling at runtime while maintaining the loose coupling at design time. So in the architecture that I proposed for distributed affordance, an author adds a little semantics to the information so your browser can understand what the page is about (it’s a movie, or a book, an event…). On the other side, the provider of an action adds some semantics as well (you can buy movie tickets here, you can read an e-book…). However, an author of the information and the provider of the action don’t know about each other. Yet, at runtime, the browser is able to instantiate the action with information on the page because the semantics match. The action becomes concrete: you can buy tickets for this particular movie, reading this particular e-book.
The next step is to integrate the generated actions as affordances into the webpage. By doing this, a new Web application is born: it features the same information, but the actions that can be performed are generated from distributed sources in a personalized way. In contrast to the prefab Web application that is normally offered to you, this one is tailored to your needs.
It is as if the information you were reading by coincidence guessed what you wanted to do with it. Such a fortunate case of everything coming together is what we call serendipity. In the past, people have regarded serendipitous reuse as the holy grail of services. It’s the idea that you can just take a service and reuse it in the application you like. I believe that on-demand affordance creation, where services of the whole Web can be plugged in, takes things to a new level and actually enables serendipitous Web applications. Suddenly, your application is generated on the fly, with the information you want providing the links you need.
So exactly how far are we? Well, there’s currently a working prototype that acts as a browser extension and looks for webpages with with Schema.org or RDFa markup, matching them to semantic descriptions of REST services. You collect descriptions of services you like, and they will automatically result in links on those pages. These links will call the services with the information extracted from the page. So if you are browsing a page about the movie Django Unchained, then you can have a link that lets you stream this movie to your tablet. Or show you the biographies of the actors. Or change your desktop wallpaper into the movie poster. The possibilities are endless. This is serendipity turned into a Web application.