Putting on the brakes

First, the glowing vision: I take all the RSS 1.0 feeds from my circle of weblogs, plus RSS feeds of their comments, plus FOAF files that tell me that this nickname and this name go with this homepage and this email address, and I parse them all, throw them in a database of RDF triples, and then use it to answer interesting questions: “What did Shelley have to say today, in her weblog and in her comments and in other people’s comments?” “Who talked about FOAF and RSS today, and whose weblogs did they leave comments on?”

Then, the crushing reality: although there’s nothing to say that an RSS feed has to change, RSS-as-it-is-used is about change. It’s used to say “here are the last (some number) of things I wrote,” possibly including the whole thing, possibly just an excerpt or a description of it. That’s what it’s good at, and why it’s popular: checking an RSS feed for new content is a lot easier than visiting a webpage and scanning for new stuff, especially if your RSS reader remembers what you’ve seen before. If it isn’t changing, and pointing out what’s new, then it’s just another site map or list of keywords for a search engine, and while that may be useful, it’s not something that helps or interests me.

RDF-as-it-is, however, seems to be all about static descriptions. At least with all the tools I’ve tried or looked at, when you parse an RDF document, you give it a unique name, and parse out all the triples and store them with the name of the document. If you have a “friends.rdf” file, you parse it and say that the triples came from “friends”. If later on you make two new friends, and one old friend turns into an enemy, you either delete all the triples from “friends” and then reparse an edited version, or you delete the enemy and parse a new file “friends092002” that only includes the new friends. If it was important to you to know that John was a friend in August but not in September, or that Mary’s phone number was one thing for three months but then changed back to what it was before, you might parse your whole friends file once a month, giving it a new name for that month, so that when you want current data you query only “friends092002”, but when you want all of Mary’s phone numbers you query all the docKeys. But, you sure as hell wouldn’t parse it once an hour, storing 8760 duplicates of Mary’s name, 8760 duplicates of her address, 8760 duplicates of her city, 2250 duplicates of her summer phone number, and 6510 duplicates of her regular phone number for every year.

I naively thought that I would just check to see whether or not you were telling me something that I already knew, and if you were I would ignore it, unless you told me something different about the same thing, in which case I would change it. You tell me that the title of http://weblog.burningbird.net is Burningbird 8760 times a year, and every time I say “yup, got that.” If you then tell me that the title of http://weblog.burningbird.net is Singed Feathers, I say “okay, I changed it.”

That kind of thinking works just fine when you are parsing RSS as XML, and you know exactly where you are and what elements mean, and when you see /channel/title/ there’s one and only one. Parsing RSS as RDF, things are different. You know that <http://weblog.burningbird.net> <http://purl.org/rss/1.0/title> is “Burningbird”, but right at that moment, you don’t know what <http://weblog.burningbird.net> is, just that its title is Burningbird. You can find out what it is, by stopping in the middle of parsing to say “what is the <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> of <http://weblog.burningbird.net>?”, but if you do that you’ve just invented a really slow and awkward way of parsing XML. If you have to know what a statement means when you are parsing and storing it, rather than only when you are using it as part of a query, then RDF probably isn’t what you want to use. However, if you don’t know what a statement is saying, you don’t have any way of knowing whether it’s a change, or a repeated element. There was a flurry of words on RSS-DEV about whether or not elements could be repeated and which and how, but I don’t think it ever came to anything. In the real world, and especially once you step outside RSS, elements will be repeated: people will have more than one homepage, weblog posts will have more than one subject, and I’ll end up only remembering the last one I saw.

The advantages of RDF come from statements that stand alone. One of the foundations of RDF is that “anybody can say anything,” and though it doesn’t get mentioned as often, they can say it any damn way they please. There’s nothing magical about <dc:creator> as a way of expressing who wrote a weblog item, other than the understanding that if you use something else fewer people will know what you are talking about. I’m perfectly free to make up my own namespace, and then say that for an item or a channel <xsfs:thunkItUp>Phil Ringnalda</xsfs:thunkItUp>. If I then write up a schema for xsfs, saying that:

<rdf:Property rdf:about=”http://example.com/xsfs/thunkItUp” rdfs:label=”Thunker” rdfs:comment=”The one who thunk of it.”>
<rdfs:subPropertyOf rdf:resource=”http://purl.org/dc/elements/1.1/creator” />
<rdfs:isDefinedBy rdf:resource=”http://example.com/xsfs/” />

then not only am I not being bad, just making stuff up, I’ve done the community a service, by extending the vocabulary. That was the whole reason that RSS 1.0 was created, with namespaces and RDF, so that it could be easily extended by anyone. Now we aren’t restricted to just saying <dc:creator>, we can say <xsfs:thunkItUp> and <xsfs:writItDown>, and a schema-aware toolkit will say “Oh, you want to know things that Phil is the creator of? Well, here’s some stuff that he thunk up, and that’s just a more specific form of creating.” Needless to say, there’s no schema-aware RDF toolkit for PHP, which leaves me having to know everything about every element that you might use. If I want to know “who” things, I have to know that “who” might come in <dc:creator>, or <dc:contributor>, or <foaf:Person>, and the name of a <foaf:Person> might be a <foaf:name> or maybe the combination of a <foaf:firstName> and a <foaf:surname>, or maybe they don’t admit their name, just a <foaf:nick>. The answer to a “who” question ends up involving twenty queries to the database, and a bunch of fancy footwork with the resulting arrays.

There is an option that would make it all work: if I say “to be in my tool, you may only use these elements in these places with this nesting to express these concepts, and you must use this, this, and this, your FOAF file must include a <foaf:name>, and whenever you comment you must use either your <foaf:name> or one of your <foaf:nick>s.” Which would be exactly the same thing as RSS 0.9x/2.0, only with me as dictator and a much more complicated syntax.

So, the answer to the question that started this whole project, “what is the RDF in RSS 1.0 good for?” is two things: it’s good for someone who has an infinitely large database that can be queried infinitely fast by a schema-aware program, or it’s good for writing a schema-aware aggregator that can try to figure out what it should do with new elements that it hasn’t seen before. That’s actually an interesting project with some potential for success, but at this point I’m sick of the whole thing, so I’ll leave that project for someone else.

Some good things did come out of this, though: I learned a whole lot about RDF, and thought more than I had about whether or not RSS is where I want to put my RDF efforts, and best of all it may have helped inspire some people to make comment RSS feeds available, so I don’t have to remember to keep going back to look for replies. Thanks for all your support, and I’m sorry I couldn’t manage do anything really cool with it.


Comment by Dave Winer #
2002-09-23 20:54:36

I’m so tired of being flamed — so please I just want to ask a simple question.

Would it be okay with you, now that you’re finished trying to use RSS for your own purposes, that we go on just doing tools and aggregators?

Would you be willing to do something to help make RSS whole and simple, without the RDF tax.

The whole RDF experience has been so rude, not just on a community basis, but on a personal basis. So many people have said so many vicious things, and now we find out that no one really had a clear idea of how this stuff would work.

Two years ago I read Edd Dumbill say that RSS is what RDF needed to get established. I thought Edd was a good guy until then. Then one would-be visionary after another has come along to use RSS to prove their own brilliance.

RSS is not a brilliant format. It is a compromise. It is for syndicating news feeds. That’s all it is for, for the 18,000th time.

Comment by Phil Ringnalda #
2002-09-23 21:19:36

Sure, absolutely! What can I do to help?

(”trying to use RSS for your own purposes” – oh, how I want to respond to that unwarranted flame, but I will not.)

Comment by Dave Winer #
2002-09-24 03:35:39

Sorry if that was a flame, it was based on a misunderstanding, as I said on Scripting News, I’ve liked working with you so far. I thought this post of yours here was basically saying that I’ve finished trying to make RSS work as RDF. That’s what I meant. I don’t think of it as a flame, so maybe there is a two-way misunderstanding here.

I’m not totally sure what you can do to help, but the name RSS needs focus which means no more confusion about 0.91 being the default base format. Even the newest of newbie can figure this out. Look at the example of the Yahoo Finance feeds rolled out yesterday.

Now there are two things that are a problem, one for sure, and the other a probability:

1. The sure thing is that his feeds could use some of the features in 2.0, and we’d all be better off if they did. Minimally, item-level pubDate and guid, but possibly more. We’d have to see the database behind the feeds to see what info he has. But because of the confusion over the way forward, he probably wouldn’t respond to evangelism, and I am reluctant to ask, for fear of #2 below.

2. Offlist flamers. As soon as someone surfaces supporting 0.91, they get a barrage of private emails with ad hominems about me, or the format or the primacy of RDF, or whatever. Sometimes I hear about it, often I don’t. I won’t participate in this. But it’s a loss for RSS. As soon as outsiders see that there’s acrimony, they either freeze at 0.91, or skip it altogether.

What to do? Remove all support for the flamers, and move forward decisively with the upgrades in 2.0. And be very clear that RDF, while a fine technology in its own right, is only related to RSS in a vague historical way.

In other words, my pitch to you is to speak up for RSS, don’t sit on the sidelines as so many do, and let someone else worry about it. That, to me, has been the most disgusting thing, how people who say they know how it should go won’t even lift a finger to help out. Now to be clear, that’s not personal Phil, I appreciate that you didn’t flame (thank heaven for minor miracles) and that you offered to help.

Comment by Anonymous #
2002-09-24 08:28:22

Let’s see:

1. You should not use RSS for your own purposes, but Dave shall.
2. Everyone should compromise with Dave, though he refuses to compromise with anyone else.
3. Dave decrees what RSS is for. No one else may have a (differing) opinion.
4. Edd is not allowed to have his own opinions or goals, differing from Dave, and still be a ”good guy.”
5. And, above all, be sure to censor those who differ with Dave, because the word is rapidly spreading about him, and he must try to stop it.

I think that about covers it. I get it now. I am drinking the Kool-Aid, Dave-style. Cooooooool.

If you really want to remove support for flamers, start by removing support for Dave, as he is the greatest of us all.

Comment by Dan Brickley #
2002-09-24 08:33:58

Maybe this is the point of dispute: whether RSS is a general purpose format for news feeds from all kinds of Web sites. Or just ’news'(and opinion/weblog) sites. Dave’s ”it is for syndicating news feeds” could be interpreted in both senses, but the debate to date suggests the latter, stricter interpretation.

Does that help as a way of accounting for how we always manage to talk past each other?

Comment by Shannon #
2002-09-24 09:14:04

You know, Dave, I think you’re a brilliant guy, but you have a great tendency to come off as an asshole. And I think it’s this: once you’ve discovered something, or come to a decision, or made a point – your word is supposed to be gospel.

Phil here has always been very open and helpful to members of a lot of different communities – Blogger, Movable Type, PHP, and JavaScript, to name a few – and has that great ”dog worrying a bone” tenacity about him that is one of the main reasons I adore and admire him so much. I don’t have a fucking clue what he’s talking about most of the time, but it doesn’t stop me from visiting this page three or ten times a day to watch the creative process unfold.

That’s the brilliance of what Phil’s been doing with RSS/RDF over the past week, and once he comes to his own conclusion you swoop down and say what basically amounts to, ”See, I told you. I always tell you people and you never listen.”

It’s unfair, and it’s counterproductive. What Phil has learned by doing things his own way and coming to his own conclusions – regardless of whether or not they turn out to be similar to yours or not – is irreplaceable experience and knowledge of the matter at hand.

I admire you, too, Dave, but you’ve got to give people a chance to learn, to grow, to get excited about ideas and give it a shot. There was a lot of rallying ’round Phil’s ideas, a lot of community input and support, and that’s the part that excites and invigorates me to learn more about what’s going on behind the scenes, not nasty statements like, ”RSS is not a brilliant format. It is a compromise. It is for syndicating news feeds. That’s all it is for, for the 18,000th time.”

Christ, that’s just boring. It’s flat-earth mentality, and it seems pretty arrogant.

Flame on.

Trackback by The Trommetter Times #
2002-09-27 19:53:30


I’ve just started reading about the ’friend of a friend’ project. I’ve even created my own FOAF RDF file

2002-12-19 06:19:04

Consumer Rights and RSS

Yesterday was a disappointing technology day. I had hoped to use the position of devil’s advocate at the RSS-Dev group to see if we couldn’t get a firmer definition of what the group sees as its future direction, strategy, as well as specific reasons f…

Name (required)
E-mail (required - never shown publicly)
Your Comment (smaller size | larger size)
You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <del datetime="" cite=""> <dd> <dl> <dt> <em> <i> <ins datetime="" cite=""> <kbd> <li> <ol> <p> <pre> <q cite=""> <samp> <strong> <sub> <sup> <ul> in your comment.