The case of the missing rdf:Description

RDF is a framework for describing resources. We know that. We also know (from various sources, such as the RDF Model and Syntax Specification, or Pierre-Antoine Champin’s RDF Tutorial (recommended!)) that an RDF document consists of a number of descriptions, and these descriptions look like this:

... ... ...

How come then, that instances of two of the more well-known RDF applications, RSS and FOAF, don’t seem to reflect this format? Following the root rdf:RDF node and the declarations of the namespaces, we have, respectively:

DJ's Weblog ...

and

...

What, no rdf:Description? Let’s have a look at what’s happening here. In the RSS example, we have channel – or in its fully qualified form http://purl.org/rss/1.0/channel – a class, of which http://www.pipetree.com/qmacro is declared as an instance with the rdf:about attribute.

The RDF subject-predicate-object triple looks like this:

http://www.pipetree.com/qmacro rdf:type http://purl.org/rss/1.0/channel

or in other words “the URI (which is about to be described) is a channel”.

Because RDF is about is declaring and describing resources, it becomes clear that this sort of statement (technically the rdf:type triple, above) is very common. And what we saw in the RSS snippet above was the special RDF/XML construction that may be used to express such statements. If we didn’t have this special construction, we’d have to write:

DJ's Weblog ...

which is a tad long winded. Similarly, the long winded equivalent for the FOAF example would look like this:

...

So there you have it. The rdf:Description isn’t there because a special construction is being used in both examples. Many thanks to Jon Hanna for turning the light bulb on in the first place.