The OPML Embroglio: What is OPML?
I don’t really want to involve myself in the OPML discussion and mud-slinging that is currently causing Dave Winer and Robert Scoble to take sides against nearly everyone else in supporting OPML as some kind of reasonable format for “getting things in outline format.” However, it’s probably good to take a look at what OPML actually is, and what you can do with this XML format.
Formal OPML structure:
According to the OPML 1.0 specification, this is the EBNF recursive definition which is a little easier to read:
OPML ::= <opml version=x.y> HEAD BODY </opml>
HEAD ::= e | TITLE | DATECREATED | DATEMMODIFIED | OWNERNAME | OWNEREMAIL | EXPANSIONSTATE | VERTSCROLLSTATE | WINDOWTOP | WINDOWBOTTOM | WINDOWLEFT | WINDOWRIGHT
- TITLE ::= <title>the title of the document</title>
- DATECREATED ::= <dateCreated>a date-time, indicating when the document was created</dateCreated>
- DATEMODIFIED ::= <dateModified>a date-time, indicating when the document was last modified</dateModified>
- OWNERNAME ::= <ownerName>a string, the owner of the document</ownerName>
- OWNEREMAIL ::= <ownerEmail>a string, the email address of the owner of the document</ownerEmail>
- EXPANSIONSTATE ::= <expansionState>a comma-separated list of line numbers that are expanded</expansionState>
- VERTSCROLLSTATE ::= <vertScrollState>a number, saying which line of the outline is displayed on the top line of the window</vertScrollState>
- WINDOWTOP ::= <windowTop>a number, the pixel location of the top edge of the window</windowTop>
- WINDOWLEFT ::= <windowLeft>a number, the pixel location of the left edge of the window</windowLeft>
- WINDOWBOTTOM ::= <windowBottom>a number, the pixel location of the bottom edge of the window</windowBottom>
- WINDOWRIGHT ::= <windowRight>a number, the pixel location of the right edge of the window</windowRight>
BODY ::= e | OUTLINE BODY
- OUTLINE ::= <outline OUTLINEATTRIBUTES >(e | OUTLINE)*</outline>
- OUTLINEATTRIBUTES ::= e | OUTLINEATTRIBUTES | text=”a string of characters” | type = “some string” | isComment = “true|false” | isBreakpoint = “true|false”
If you’re into it, there’s also an XML DTD you can read, but I find it’s much harder to digest.
What OPML defines:
The OPML format defines a nested list of textual elements. What is OPML? It’s a list. That’s right, a nested list. In HTML, you can write the same information with:
<ul>
<li>I am an element</li>
<ul>
<li>Look, I’m nested!</li>
</ul>
</ul>
If this makes you feel a little underwhelmed, you should be. There’s nothing special about making lists. If you take a look at RSS 2.0 you’ll see that if it offered nested items it would be a strict superset of OPML. Or, why not use Elliott’s-super-xml-format-1.0:
Hi, I’m a list element
I’m a nested list!
wow this is cool.
All you need are tab characters to implement nested lists… not all this XML crap.
Crunky OPML Cruft:
The thing that sets OPML apart from a simple nested list format is arbitrary cruft. For example, in the head tag, text is stored as a value enclosed by start in end tags, but in the body section text is stored as a text attribute. This should have been consistent. Then, there are the head attributes expansionState which dictates how the feed is rendered, vertScrollState, and the windowStates. These shouldn’t be included, and should be left up to the renderer. And, in body, there are two arbitrary elements isComment and isBreakpoint. Why, Dave, couldn’t these just be set in the type field?
My point here is that OPML (Outline Processor Markup Language) takes a very, very simply nested list definition and then adds random hacks that Dave Winer wanted to use in his applications without thinking of a generic way to define them so that other developers can do something with the format.
In other words, Dave Winer is the Microsoft of XML.
The conversation:
DABU has implemented OPML in response to Scoble’s “implement a crappy format” blogging challenge. Mark, James, and Hmmm! are circling their wagons against the flood of pro-OPML propoganda. On the other side, Geek News, Dare, and Nick are giving more positive advice. I just say “OPML? Toss it.”
This entry was posted on Saturday, October 1st, 2005 at 3:42 am and is tagged with dave winer, pixel location, comma separated list, recursive definition, outline format, left edge, bottom edge, line numbers, xml format, top edge, embroglio, date time, lt, mud. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback.
2 Responses to 'The OPML Embroglio: What is OPML?'
Leave a Reply
Fresh, related resources:
- Overheard: Dave Winer is the Microsoft of XML?
My point here is that OPML (Outline Processor Markup Language) takes a very, very simply nested list definition and then adds random hacks that Dave Winer wanted to use in his applications without thinking of a generic way to define ...

on October 1st, 2005 at 12:44 pm
OPML isn’t all that impressive
Elliot Back: ” Dave Winer is the Microsoft of XML”
Elliot Back came to the same conclusion that I did the other day. OPML isn’t any better than a delimited text file.
…
on October 1st, 2005 at 11:00 pm
True enough! Trouble is, it has enough fans to make developers bend over and support it.