OPML (Outline Processor Markup Language)
published on Dec 05th, 2006 // 0 Comments
OPML an XML-based format that allows exchange of outline-structured information between applications running on different operating systems and environments.
What does OPML do?
The OPML specification defines an outline as a hierarchical, ordered list of arbitrary elements. The specification is fairly open which makes it suitable for many types of list data.
So that’s it in a nutshell. OPML is just a list.
Outlines can be used for specifications, legal briefs, product plans, presentations, screenplays, directories, diaries, discussion groups, chat systems and stories.
Outliners are programs that allow you to read, edit and reorganise outlines.
Examples of OPML documents: play list, specification, presentation.
What is an <opml>?
OPML was created by Dane Winer of Scripting News
<opml> is an XML element, with a single required attribute, version; a <head> element and a <body> element, both of which are required.
The version attribute is a version string, of the form, x.y, where x and y are both numeric strings.
What is a <head>?
A <head> contains zero or more optional elements, described below.
<title> is the title of the document.
<dateCreated> is a date-time, indicating when the document was created.
<dateModified> is a date-time, indicating when the document was last modified.
<ownerName> is a string, the owner of the document.
<ownerEmail> is a string, the email address of the owner of the document.
<expansionState> is a comma-separated list of line numbers that are expanded. The line numbers in the list tell you which headlines to expand. The order is important. For each element in the list, X, starting at the first summit, navigate flatdown X times and expand. Repeat for each element in the list.
<vertScrollState> is a number, saying which line of the outline is displayed on the top line of the window. This number is calculated with the expansion state already applied.
<windowTop> is a number, the pixel location of the top edge of the window.
<windowLeft> is a number, the pixel location of the left edge of the window.
<windowBottom> is a number, the pixel location of the bottom edge of the window.
<windowRight> is a number, the pixel location of the right edge of the window.
OPML 2.0 draft spec is available here
Autodiscovery
James lets you know the benefits of autodiscovery for OPML here.
<link rel="outline" type="text/xml+opml" href="http://www.5pieces.com/index.php/home/opml/" />
Lively Debate
There has been lively discussion over the past few years as to the benefits of OPML in general
User and developers not partying together over OPML
…well if RSS is still an edge-case technology than OPML long ago fell off the edge and is laying in a mangled mess at the bottom of the precipice.
The crappy format is good enough until someone comes up with something better. And that’s what you’re all missing.
Here’s the deal. I will switch to the blogging tool that outputs OPML automatically…
ExpressionEngine Users
Rick has BlogRoll plugin that parses an exported OPML file.
Yoshi’s LinkList Module includes an OPML template
My OPML was all generated dynamically from one EE XML template from various tags. See Example below.
<opml version="1.0">
<head>
<title>5pieces.opml</title><br />
<dateCreated>Tues, 5 Dec 2006 03:24:18 GMT</dateCreated>
<dateModified>Tues, 5 Dec 2006 09:01:23 GMT</dateModified>
<ownerName>John Henry Donovan</ownerName>
<ownerEmail>editor@5pieces.com</ownerEmail>
</head>
<body>
<outline text="5pieces">
<outline text="News">
<outline text="Latest News" type="rss" <br />xmlUrl="http://feeds.feedburner.com/5pieces/sRQr" />
{exp:weblog:entries weblog="{weblog_name_one}" style="linear" <br />show_empty="no" status="open"}
<outline text="{title}" type="link" url="{news_url}" />
{/exp:weblog:entries}
</outline>
<outline text="Articles">
{exp:weblog:category_archive weblog="{weblog_name_two}" style="linear" <br />show_empty="no" status="open"}
{categories}
<outline text="{category_name}">
{exp:weblog:entries weblog="{weblog_name_two}" category="{category_id}"}
<outline text="{title}" type="link" url="{comment_url_title_auto_path}" />
{/exp:weblog:entries}
</outline>
{/categories}
{/exp:weblog:category_archive}
</outline>
</outline>



