If you were tuned into the blogosphere back in 2001, you’ll recall lots of chatter about RSS feed validation. RSS came in multiple flavors. Anyone could whip up a feed purporting to be in one or another of those formats, and many of us did. There were all kinds of questions about how and why feeds did or didn’t conform to the various specifications.

Nowadays we have even more flavors. There’s RSS 2.0. And there’s Atom, which isn’t a member of the RSS family at all, it’s a different species of feed format. And yet you rarely hear about problems with feeds that can’t be read and processed by feedreaders.

I think there are two reasons why RSS/Atom-style feeds work pretty well nowdays. First, there’s the Feed Validator. Mark Pilgrim and Sam Ruby put a huge amount of effort into this excellent tool. Why? Here is their explanation:

Despite its relatively simple nature, RSS is poorly implemented by many tools. This validator is an attempt to codify the specification (literally, to translate it into code) to make it easier to know when you’re producing RSS correctly, and to help you fix it when you’re not.

The second reason is that RSS/Atom-style syndication has been happening in a lot of places for a long time now. A lot of people have used, and helped to refine, the tools and techniques.

Now I’m exploring the parallel world of calendar syndication, using ICS feeds instead of RSS/Atom feeds. And it feels like 2001 all over again. There are ICS feeds out there, but nowhere near as many as RSS/Atom feeds. And my hunch is that even when ICS feeds are published, they’re often unused, so there isn’t enough feedback to flush out problems. Finally, the ICS equivalent of the RSS/Atom Feed Validator — a service called iCalendar Validator, based on a Java library called iCal4j — isn’t anywhere near as comprehensive and informative as the RSS/Atom Validator.

Here’s a chart that lists the iCalendar feeds currently being collected by the elmcity.info calendar aggregator.

feed producer valid in iCal4J loads with DDay.iCal loads with iCalendar.py loads with vObject
armadillos google yes yes yes yes
aveo google yes yes yes yes
chamber of commerce homegrown yes no yes yes
cheshire democrats google yes yes yes yes
frost free library drupal no no yes no
fuzzy logic google yes yes yes yes
gilsum church google yes yes yes yes
hannah grimes drupal yes yes yes no
keene high soccer google no yes yes yes
keene public library fusecal yes yes yes yes
keene state bodyworks google yes yes yes yes
mmama cinema google yes yes yes yes
mmama dance google yes yes no no
mmama music google yes yes yes yes
mmama visual google yes yes yes yes
monadnock folk wordpress ec3 yes yes yes yes
monadnock regional high unknown no yes yes yes
swamp bats google yes yes yes yes
town of gilsum google yes yes yes yes
unh coop extension homegrown no yes yes yes
upcoming yahoo no yes yes yes
ymca google yes yes yes yes

As you can see, the results are all over the map. Some purportedly valid feeds won’t load using one iCalendar library, some won’t load using another. Some purportedly invalid feeds do load.

I expect things will get worse before they get better. There are only a handful of different ICS producers represented here, but the two labeled homegrown were created directly or indirectly in response to my project. If we recapitulate the RSS/Atom experience with ICS, and lots more ad-hoc ICS feeds arrive on the scene, charts like this will go even redder.

To make them go green, we’ll need a more robust ICS validator.