xoxo-brainstorming

(Difference between revisions)

Jump to: navigation, search
(Parsing Properties)
(started work on OPML-to-XOXO, thoughts etc. will add to later.)
Line 161: Line 161:
Will parse the value of <var>text</var> property as <code>XOXO</code>, not <code>Microformats</code>. Not sure yet whether this this the right thing.
Will parse the value of <var>text</var> property as <code>XOXO</code>, not <code>Microformats</code>. Not sure yet whether this this the right thing.
 +
 +
=== Representing data structures in HTML ===
 +
 +
A mapping could be made between XOXO and the standard data structures of most programming languages - JSON, YAML, XML-RPC etc. --[[User:TomMorris|TomMorris]] 10:02, 10 Aug 2007 (PDT)
 +
 +
== OPML/XOXO conversion ==
 +
 +
It would be useful if XOXO could be used in a consistent way as an XHTML representation of data in the OPML format. On that basis, I'm going to collect a list of all the uses of OPML and try to map them in a consistent way to XOXO, and then construct an XSLT stylesheet to convert them. --[[User:TomMorris|TomMorris]] 10:02, 10 Aug 2007 (PDT)
 +
 +
=== Principles for conversion ===
 +
* OPML specifies limitations in a loose way, using the '''type''' attribute. There is no formal canonicalisation of what individual type attributes do, but it is generally understood that they extend the standard attribute set of the outline node.
 +
 +
=== Text attribute ===
 +
There is some confusion over the difference between the '''text''' and '''title''' attributes. Both are reasonably well-defined by the OPML specification, and serve different purposes. Some implementations of OPML break from the specification in providing a title attribute but not a text attribute. If a text attribute is present but not a title attribute, one should infer that the text attribute is equal to the title attribute. One '''should not''' infer that the title attribute is equivalent to the text attribute (see [http://opml.org/spec2 OPML 2.0 Spec]).
 +
 +
The text attribute can and does often contain escaped HTML markup (which is really a bad practice, and has led to a lot of criticism of OPML). This is standard behaviour from the OPML Editor. An OPML-to-XOXO parser should ideally take data from the text attribute and put it into a XOXO outline in a standard way.
 +
 +
=== Known type attribute values ===
 +
 +
==== Blank ====
 +
A blank type attribute usually implies that it is a text node in an outline, using the '''text''' and '''created''' nodes. This is usually the behaviour of most outliners and is the default behaviour of the OPML Editor.
 +
 +
==== RSS Feed ====
 +
The '''type''' attribute is set to string '''rss''', implies following attributes:
 +
* '''text''' - usually, but not always, the title of the feed - is user-modifiable, so should not be used as feed title by applications
 +
* '''xmlUrl''' - the URL of an XML feed
 +
* '''htmlUrl''' - the URL of the HTML representation of the feed (optional)
 +
* '''language''' - the language of the feed (optional)
 +
* '''version''' - the particular type of XML feed:
 +
** '''RSS''' - The [http://opml.org/spec2 spec] lists this as being used for RSS 0.9x and 2.0 feeds
 +
** '''RSS1''' - The [http://opml.org/spec2 spec] lists this as being used for RSS 1.0 (RDF) feeds
 +
** '''scriptingNews''' - The [http://opml.org/spec2 spec] lists this as being used for Scripting News format feeds
 +
** '''atom''' - In unofficial usage, this is used for Atom feeds of all types
 +
** '''RSS2''' - In unofficial usage, this is used to represent RSS 2.0 feeds only.
 +
* '''description''' - The description field from the linked feed (optional)
 +
* '''title''' - The title of the linked feed (eg. "Engadget")
 +
 +
What should be done with an RSS feed node? Since it is almost the primary use of OPML, it would probably be advisable to optimize any conversion effort to deal efficiently with feeds.
 +
 +
The '''text''' attribute may list something different from the title of the linked feed, so that ought to be the value of the hyperlink - one may link to the blog "Epeus' Epigone" and set the text field as "Kevin Marks".
 +
 +
If the version attribute is present, it should be used to drop in the relevant MIME-type on the link to the feed.
 +
 +
Ideally, an OPML-to-XOXO converter would also locate the HTML versions of feeds if the '''htmlUrl''' attribute is not there.
 +
 +
==== Include ====
 +
The '''type''' attribute in OPML 2.0 is set to '''include'''. Otherwise, the include mode is inferred if the '''url''' attribute ends in ".opml"
 +
 +
Ideally, if the '''include''' mode is triggered, the HTML should represent it as a hyperlink to the OPML document, perhaps as follows:
 +
<pre><nowiki>
 +
<li><a href="[url]" type="application/xml+opml">[text]</a></li>
 +
</li>
 +
</nowiki></pre>

Revision as of 17:02, 10 August 2007

Contents

XOXO brainstorming

Authors

Example Uses

XOXO Lists and outlines are used for numerous special purposes across the web. This section is here to document both best practices and recommendations.

Blogrolls

Background: See L.M. Orchard's post "Subscriptions Are Attention But What About Blogrolls".

Nearly all blogrolls are already published as XOXO on blog, but there is no obvious way to distinguish the XOXO blogroll from other lists in the content/header/footer of the blog.

XOXO standardizes (see xoxo-profile) the class name "blogroll" for blogroll lists. E.g.

<ul class="xoxo blogroll">
 <li><a href="...">...</a></li>
 <li><a href="...">...</a></li>
</ul>

Note that a blogroll is a superset of a subscription list.

Subscription information

Some blogrolls contain feed information -- it would be nice if XOXO blogrolls could capture this information also. This, in and of itself, would be a nice step up from OPML.

Possible XOXO blogs+feeds markup

Here is one example of how you could publish blogs+feeds in XOXO. Note that since a XOXO parser will only treat the first hyperlink as the info for the list item, the blog names and URLs will be parsed, and the feeds will be ignored. In reality, the blogs themselves should contain the necessary auto-discovery links to their own feeds, which is more reliable anyway.

<ul class="xoxo blogroll">
 <li>
  <a href="blogURL1">Blog Name 1</a>
  <a href=".../index.xml" rel="alternate" type="application/atom+xml">RSS</a>
 </li>
 <li>
  <a href="blogURL2">Blog Name 2</a>
  <a href=".../index.xml" rel="alternate" type="application/rss+xml">RSS</</a>
  <a href=".../index.atom" rel="alternate" type="application/atom+xml">Atom</a>
 </li>
</ul>

CSS styling could make this as pretty or not as desired.

See also blog-info-examples, blog-info-formats, blog-info-brainstorming, XOXO Blogroll Format

Wishlists

Background: See L.M. Orchard's post: "I wish it were in XOXO"

Similar to blogrolls, what if we used the class name "wishlist"?

What are the distinguishing features of wishlists?

Is a wishlist item the same as a listing that is looking for an item? See: listing-examples, listing-formats, listing-brainstorming

Tagged Links

This one seems easier, because you could simply use a list of xFolk items, which is recognizable.

Alternatively we could also use the class name "linkroll".

But how far can we successfully take that method (of adding a new class name for each specific use of XOXO) scale and continue working?

Applying "compact", Presentation Caveats

Currently, setting DOM property compact to true in Gecko produces an empty-value compact="" attribute, rather than the valid compact="compact". In order to account for this quirk/bug, the CSS2 selector should be:


ol[compact] { display: none; }

If the XOXO item (represented by li element) contains properties, the application of compact may require more work to provide desired presentation. Since compact applies to the list, not the item, the properties of the item remain unaffected by changing the value of the attribute on the list (which is a peer of the property bag, represented by dl element). For example, consider this XOXO fragment:


<ul>
	<li>select
		<dl>
			<dt>show-title</dt>
			<dd>false</dd>
		</dl>
		<ol compact>
			<li>title</li>
			<li>abstract</li>
		</ol>
	</li>
</ul>

If the desired presentation effect is to only show select when the nested list is collapsed, additional information (like a class name, assigned to li element) is necessary to hide dl element. In CSS3, there is a way to somewhat address it using general sibling selectors:


ol[compact],
ol[compact] ~ dl { 
   display: none;
}

Parsing Properties


<ul class="xoxo">
	<li>
		<dl>
			<dt>text</dt>
			<dd>
				<!-- escaped -->
				<dl class="dictionary">
					<dt>term</dt>
					<dd>definition</dd>
				</dl>
			</dd>
		</dl>
	</li>
</ul>

Based on preliminary research, all parsers mentioned in xoxo-sample-code use property bag or dictionary to collect properties, which means that last value specified wins (overrides previously specified). This means that this bit of markup:


<ul class="xoxo">
	<li>
		<a href="http://microformats.org">Microformats</a>
		<dl>
			<dt>text</dt>
			<dd>XOXO</dd>
		</dl>
	</li>
</ul>

Will parse the value of text property as XOXO, not Microformats. Not sure yet whether this this the right thing.

Representing data structures in HTML

A mapping could be made between XOXO and the standard data structures of most programming languages - JSON, YAML, XML-RPC etc. --TomMorris 10:02, 10 Aug 2007 (PDT)

OPML/XOXO conversion

It would be useful if XOXO could be used in a consistent way as an XHTML representation of data in the OPML format. On that basis, I'm going to collect a list of all the uses of OPML and try to map them in a consistent way to XOXO, and then construct an XSLT stylesheet to convert them. --TomMorris 10:02, 10 Aug 2007 (PDT)

Principles for conversion

Text attribute

There is some confusion over the difference between the text and title attributes. Both are reasonably well-defined by the OPML specification, and serve different purposes. Some implementations of OPML break from the specification in providing a title attribute but not a text attribute. If a text attribute is present but not a title attribute, one should infer that the text attribute is equal to the title attribute. One should not infer that the title attribute is equivalent to the text attribute (see OPML 2.0 Spec).

The text attribute can and does often contain escaped HTML markup (which is really a bad practice, and has led to a lot of criticism of OPML). This is standard behaviour from the OPML Editor. An OPML-to-XOXO parser should ideally take data from the text attribute and put it into a XOXO outline in a standard way.

Known type attribute values

Blank

A blank type attribute usually implies that it is a text node in an outline, using the text and created nodes. This is usually the behaviour of most outliners and is the default behaviour of the OPML Editor.

RSS Feed

The type attribute is set to string rss, implies following attributes:

What should be done with an RSS feed node? Since it is almost the primary use of OPML, it would probably be advisable to optimize any conversion effort to deal efficiently with feeds.

The text attribute may list something different from the title of the linked feed, so that ought to be the value of the hyperlink - one may link to the blog "Epeus' Epigone" and set the text field as "Kevin Marks".

If the version attribute is present, it should be used to drop in the relevant MIME-type on the link to the feed.

Ideally, an OPML-to-XOXO converter would also locate the HTML versions of feeds if the htmlUrl attribute is not there.

Include

The type attribute in OPML 2.0 is set to include. Otherwise, the include mode is inferred if the url attribute ends in ".opml"

Ideally, if the include mode is triggered, the HTML should represent it as a hyperlink to the OPML document, perhaps as follows:

<li><a href="[url]" type="application/xml+opml">[text]</a></li>
</li>
xoxo-brainstorming was last modified: Wednesday, December 31st, 1969

Views