Let’s talk about Channel 4’s new sitcom, “The IT Crowd”.
Or rather, since
everything of importance deserves a URI,
about
<http://www.channel4.com/entertainment/tv/microsites/I/itcrowd/>
.
To be totally clear, I don’t really mean
<http://www.channel4.com/entertainment/tv/microsites/I/itcrowd/>
,
which is a web page, but the series itself.
It’s contentious but the
current compromise
is (simplified) that if a plain URL directly returns a page
(an “Information item”), it refers to
that page. If we add in a fragment ID (even an empty one) we can use that URL
to refer to something else.
So I’m talking about
<http://www.channel4.com/entertainment/tv/microsites/I/itcrowd/#>
,
which is a television series.
Or, in RDF:
<http://www.channel4.com/entertainment/tv/microsites/I/itcrowd/#> a mvi:Series ; dc:title "The IT Crowd" .
(I’m using Notation 3 here, an alternative RDF syntax that’s simpler and less verbose than RDF/XML.)
So it’s a television series, and it has a title. Actually, I’d like to talk about the first episode. What’s a good way to identify that? Channel 4 have a URI for their episode guide:
<http://www.channel4.com/entertainment/tv/microsites/I/itcrowd/episodes/1-3.html#>
Except – that’s not the first episode. That’s the first three episodes.
To be unambiguous, we need a distinct URI for that first episode. Well, we could make one up:
<tag:kafsemo.org,2006-01-27:first-episode-of-the-it-crowd>
Now, I know what I mean, but would you? If you saw it out of context? It’s just an identifier, not a URL, so you can't retrieve any representation to investigate (“can’t click on it”). And, as it’s something I made up, anyone else would come up with a different URI (“no consensus”).
Looks like the IMDb have finally started to expose their episode guides with URIs for each episode. Fantastic! Their URIs for actors and movies have long been de-facto standard identifiers (rivalled only by Amazon for SKUs and Wikipedia for things).
<http://www.imdb.com/title/tt0609853/#>
Or, if we're being formal:
<http://www.imdb.com/title/tt0609853/#> a mvi:Episode ; dc:title "Yesterday's Jam" .
Importantly, we’re not talking about “episode one” anymore. Episode orders often change, and this is specifically the episode “Yesterday’s Jam.” For now, our metadata says it was first but, if this changes, no links are broken.
(This isn’t hypothetical. While I was writing this, IMDb rearranged their episode guide to reflect the transmission order and broadcast title changes: the URIs stayed valid.)
Mivvi adds more predicates, so we can group episodes by season as well, but this is the important part.
So now, when I say
<http://www.channel4.com/player/itcrowd.html?id=2511&vert=entertainment> mvi:episode <http://www.imdb.com/title/tt0609853/#> .
you’ll know what I mean – that this Channel 4 web page is a representation
of that episode. (By convention, RDF uses lower case for predicates
(verbs) and uppercase for types (nouns), so mvi:episode
and mvi:Episode
are different.)
Actually, let me correct myself, too:
<tag:kafsemo.org,2006-01-27:first-episode-of-the-it-crowd> dc:identifier <http://www.imdb.com/title/tt0609853/#> .
Even if I did use my home-made tag: URI it’s now linked to the current identifier.
If you’re a fan of deep-linking, that’s good too:
<http://edge.channel4.com/theitcrowd/episode1_c4web.wmv> mvi:episode <http://www.imdb.com/title/tt0609853/#> .
Or, to abstract away from a particular locator, using hashes of the video file:
<urn:md5:T3RARDNYFNCL3VPRS7RJOLBWBU> mvi:episode <http://www.imdb.com/title/tt0609853/#> . <urn:sha1:OTPWLNTIOFA3A5FRJURYGJI6YH2IOBAR> mvi:episode <http://www.imdb.com/title/tt0609853/#> .
And let’s not forget where it’s from!
<urn:sha1:OTPWLNTIOFA3A5FRJURYGJI6YH2IOBAR> dc:source <http://channel4.com/#> .
The combination of content-addressed storage and RDF seems perfect for video.
So now, with all that in a repository (shown here as a graph), we can use SPARQL to ask how to watch:
PREFIX mvi: <http://mivvi.net/rdf#> SELECT ?res FROM <../handwritten/the-it-crowd.rdf> WHERE { ?res mvi:episode <http://www.imdb.com/title/tt0609853/#> . }
And be told:
result: [res=uri<http://www.channel4.com/player/itcrowd.html?id=2511&vert=entertainment>] result: [res=uri<urn:sha1:OTPWLNTIOFA3A5FRJURYGJI6YH2IOBAR>]
Brilliant!
Not for a second. Fire up
Mivvi,
bring up the details for that episode:
Click on the episode title to go to the details page. Double-click
on resources to browse or view.
Yes, it applies statements transitively when it has the hash of a local
file. Yes, dragging the RDF logo exports all related statements.
It’s not bad – Graham Linehan has a fantastic record, and I’m genuinely enjoying Chris Morris’s increasing flirting with mainstream sitcoms (“Standard nerds!” Teams? “Body! Doyle! Tiger! The jewellery man!” Please don’t turn into Ben Elton.) The first episode strays into broken cup-holder tech support jokes, but the Harry Potter obsessive-compulsive “I got the child edition and the adult edition, just to check that there are no differences in the text.” was great.
It could go either way, but I’ll certainly be watching episode two. Or,
for a sitcom-level punchline,
<http://www.imdb.com/title/tt0609850/#>
.
(Update: an old lady falling down the stairs! People shouting! They’ve found my level, I think.)