I don’t know why exactly – probably something to do with years of noodling on Web architecture – but I seem to have a knack for sniffing out self-description problems.

So while working on RDF Forms (specifically the implicit intent section), I realized that RDF Schema is not self-descriptive; by virtue of not defining its own media type, it does not permit a message sender to declare whether the semantics of the message depends upon RDF Schema being understood or not.

Issue submitted.

Joyce Park writes;

The fact that existing web services standards are widely perceived to be manipulated for private gain, never finished in a usable form, difficult to understand, and entirely failing to deliver interoperability — those would not be reasons for shallow adoption of course.

No, of course not. 8-)

Keep your eye on the ball.

I’m pleased to announce the release of the first draft of RDF Forms. This is the first usable specification to emerge from some ideas that have been floating around in my head for a couple of years (in various guises). It looks brain-dead simple now, so I think (hope?!) that means that I probably got it right.

As an example of an RDF Form, here’s a query (aka GET) based one for the “Top downloads” service of Mark’s RESTful MS Web services front end;

<rf:Indexable xmlns:rf="http://www.markbaker.ca/2003/rdfforms/"
               xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
               rdf:about="http://www.diveintomark.org/msweb/TopDownloads">
  <rf:indexedBy rdf:resource="http://diveintomark.org/msweb/?WSDL#topType" rf:shortName="topType"/>
  <rf:indexedBy rdf:resource="http://diveintomark.org/msweb/?WSDL#topN" rf:shortName="topN"/>
  <rf:indexedBy rdf:resource="http://diveintomark.org/msweb/?WSDL#cultureID" rf:shortName="cultureID"/>
</rf:Indexable>

Thanks to Jan Algermissen and Aaron Swartz for their help (though Aaron didn’t know he was helping on this when he answered a question for me 8-).

Greg’s asking for comments on the using a feed URI scheme to identify a subscription action for the feed, e.g. “feed://http://example.org/rss.xml”.

I think we can do better. Here’s two big reasons why I don’t like this proposal;

  • “Clicking” on a URI should always be safe, and provide information about the identified resource, not take an action upon it. This enables humans and automata to be able to trust that they’re not entering into an obligation by dereferencing a URI (any URI, not just http URIs).
  • The resource really is “http://example.org/rss.xml”, and putting “feed://” on the front obfuscates that from parties who don’t know what “feed://” means.

So what’s the better proposal? For one, get folks to start using an RSS-specific media type so that the client knows it’s RSS. Then you just need to register your aggregator as the application that handles that media type. Within the aggregator, I would expect to see that feed after clicking on the URI, but with a BIG “SUBSCRIBE” button in plain site when it realizes that I’m not already subscribed to that feed. As a bonus, there’s no need for a different “subscription URI”.

Kudos to Mark for putting a Web front end on the SOA based Microsoft Web Services API. Very nice!

I saw a BEA press release the other day, and was feeling a bit cheeky tonight, so I threw this together. April is just too far away. 8-)

Press Release

BEA embraces the Web for integration
Friday April 1, 2005 6:00 am ET
Regrets role in Web services.  Vows to get down to business to solving
customer integration problems.

SAN JOSE, Calif. -- BEA Systems, Inc., the world's leading application
infrastructure software company, today announced that it was
discontinuing any further support of "Web services", and was announcing
sweeping organizational changes that will better position it to produce
high quality products that enable the creation of services built on the
architectural principles that have made the Web such a success,
including the constraints of the REST architectural style.

"It boggles the mind to realize what a huge mistake had been made with
Web services, and how this awesome integration platform - the Web - was
right under our noses the whole time.", said CTO Scott Dietzen.  "In
retrospect, it's all so obvious, but that's small consolation when you
consider how much time and money we've wasted these past few years".
CEO Alfred Chuang added, "BEA is proud to be the first major application
infrastructure software company to close the book on this dark chapter
of IT history.  We apologize to our existing customers for our role in
this debacle, and look forward to working with them to help put their
services where they belong, on the Web".

The company also announced that David Orchard had accepted the role of
Chief Architect of the newly formed Semantic Web group, whose mission
will be to integrate the W3C's Resource Description Framework into BEA's
products, enabling customers to further simplify data integration tasks.
"That's still XML, right?", Dave was heard to say shortly after learning
of his new assignment.

About BEA

BEA Systems, Inc. is the world's leading application infrastructure
software company, providing the enterprise software foundation for more
than 15,000 customers around the world, including the majority of the
Fortune Global 500. BEA and its WebLogic(R) brand are among the most
trusted names in business.

Headquartered in San Jose, Calif., BEA has 77 offices in 31 countries
and is on the Web at www.bea.com.

Sean points to an old (June) post by Bill on Foundations for component and service models. I’m not sure why I missed this one, but it’s more or less bang on from my POV.

One quick comment …

“Calls should return documents not objects”; if the calls returned the serialized state of objects, would that be ok? Oh, right, documents are serialized object state P-)

Broken record, me?

Radovan Janacek writes;

However, in large scale scenarios, or in complex integration scenarios (many services, complex processes, evolution, independent participants) I definitely vote for REST-based approach.

Awesome. Conventional Web services wisdom has always been – until now – that this kind of scenario is exactly where you need Web services. I look forward to seeing how WASP ends up incorporating his ideas.

I wanted to respond to some of the detail in Werner’s article, in addition to ranting about how document exchange was state transfer. So here goes … The first statement that really gave me pause was this; The goal of digitizing your business is to enable machine-to-machine communication at the same scale and using the same style of protocols as human interface centered World Wide Web. I don’t believe that’s the case, and it’s certainly not been accomplished IMO. I think that if you asked anybody involved since the early days, that they’d say the goal is just the first part; to enable machine-to-machine communication over the Web (or perhaps Social Boosting). “using the same style of protocols” has never been a requirement or goal of this community that I’ve seen. Consider what can be done with a Web services identifier versus a Web identifier. Both are URIs, but because Web architecture uses late binding, I know what methods I can invoke when I see a URI (the URI scheme, specifically) and what they mean (because there’s a path back to RFC 2616 from the URI scheme). With an identifier for a Web service, I don’t have sufficient information to know what the interface is and what it means, because Web services are early/statically bound (creating centralization dependencies, ala UDDI). I don’t consider changing the architecture from late/dynamic binding to early/static binding to be “using the same style of protocols”. I suppose I also take issue with the implicit definition of “distributed objects” as part of Misconception #1, when it says;
An important aspect at the core of distributed object technology is the notion of the object life cycle: objects are instantiated by a factory upon request, a number of operations are performed on the object instance, and sometime later the instance will be released or garbage collected.
I’ll present my definition first; distributed objects are identifiable things encapsulating state and behaviour, which present an interface upon which operations can be invoked remotely. Obviously apps for business, like all software, do have a lifecycle. But it’s primarily an implementation detail, and not exposed through the object’s interface. Some systems chose to tie the identifier to some particular in-memory instantiation of an object (rather than to an abstraction for which an object could be instantiated to proxy for, in effect), which created a real mess, but I don’t consider that key to the definition. Misconception #2 also seems prima facie incorrect to me, at least by my definition of “RPC”; an architectural style where the developer of each component is provided the latitude to define the interface for that component. More concretely, I believe the statement “there are no predefined semantics associated with the content of the XML document sent to the service” to be incorrect because, as I mentioned in my last post, if there is a method name in the document, then that is an explicit request for “predefined semantics”. I agree with the titles of Misconceptions #3 and #4; Web services don’t need HTTP or Web servers. But I disagree with the explanation provided. That Web services are transport agnostic is fine, but that does not at all imply that they should be application protocol agnostic, although most people use them this way. The core of my disagreement is with this statement in the last paragraph of #4;
The REST principles are relevant for the HTTP binding, and for the web server parsing of resource names, but are useless in the context of TCP or message queue bindings where the HTTP verbs do not apply.
That is incorrect. REST is protocol independent, and has applicability when used with other protocols, be they application or transport. REST is an architectural style, and following its constraints guides the style of use of all technologies you might choose to work with. For example, if you were using FTP RESTfully, then you would do things like identify files with URIs (rather than server/directory/file-name tuples), and interact with them via a single “retrieve” semantic (an abstract “GET”), rather than the chatty and stateful user/pass/binary/chdir/retr process (not-coincidentally, this is how browsers deal with FTP). In essence (though drastically oversimplifying), what REST says is “exchange documents in self-descriptive messages, and interpret them as representations of the state of the resource identified by the associated URI”. That philosophy can be applied to pretty much any protocol you might want to name, especially other transfer protocols (as the Web constitutes an “uber architecture”, of sorts, for data transfer). That’s most of the big issues as I see them. Anyhow, that was an enjoyable and informative read. Thanks!

Werner posted an article he wrote for IEEE Internet Computing titled Web Services are not Distributed Objects: Common Misconceptions about Service Oriented Architectures.

That article is very well written, and Werner makes his point loud and clear as always … but ultimately, it makes some of the same misconceptions as so many others have before it. In this case, I think I’ve boiled it down to one main misconception that I’ve talked about recently;

Web services are based on XML documents and document exchange […]

No, they are not. Just open your wallet and grab a cheque, or a credit card receipt, or your drivers license. These things are what I know a “document” to be; state. If a cop asks me for my drivers license and I hand it to her, I have performed “state transfer”, I haven’t asked her to do anything in particular by transferring this document to her. In contrast, the Web services view of a document includes a “method” which effects the semantics of the movement (aka transport) of that document. So if I had a Web services document which I handed to somebody, I’m not merely submitting that document to them, I’m asking that they perform some explicit action for me as specified by the contained method. This is a very very different thing than what “document exchange” is normally understood to mean.

I suggest that if you made the simple tweak to the big picture Web services vision to require that documents only contain state, then you’d have the Web, or at least a substantial part of it. I consider the Web to be the epitome of large scale document-centric distributed computing architectures.