Containers

(Difference between revisions)

Jump to: navigation, search
(Grammar fix)
(Problems: Added response regarding repurposing `item`.)
Line 151: Line 151:
The <code>item</code> microformat is currently used inside <code>hreview</code>s. Use this existing micformat as a container as well. This makes the specification slightly more complicated, since <code>item</code> will be allowed as a parent of <code>hreview</code> as well as a child. This is basically the same proposal as above, but using the name <code>item</code> for the container, instead of a dedicated name.
The <code>item</code> microformat is currently used inside <code>hreview</code>s. Use this existing micformat as a container as well. This makes the specification slightly more complicated, since <code>item</code> will be allowed as a parent of <code>hreview</code> as well as a child. This is basically the same proposal as above, but using the name <code>item</code> for the container, instead of a dedicated name.
====Problems====
====Problems====
 +
* This defines two microformats that can be parent child of each other in both directions (<code>hreview</code> and <code>item</code>).
* This defines two microformats that can be parent child of each other in both directions (<code>hreview</code> and <code>item</code>).
<source lang=html4strict>
<source lang=html4strict>
Line 165: Line 166:
</div>
</div>
</source>
</source>
 +
 +
* I don't really see that <code>item</code> makes sense as a container here. An item is a singular thing, a collection is wrapping a collection of things. In hReview, or hListing, or anything you'd have <code>container</code> as a structural parent of <code>item</code>. Repurposing <code>item</code> seems very confusing. --[[User:BenWard|BenWard]] 06:21, 30 July 2009 (UTC)
=== hreview rating and hreview-aggregate rating use different names ===
=== hreview rating and hreview-aggregate rating use different names ===

Revision as of 06:21, 30 July 2009


This page exists to brainstorm around the concept of ‘containers’ in microformats.

Contents

What's a Container?

A ‘container’ is a root element that contains multiple microformat items within it. It groups those items together, but could also be used to provide additional or shared semantics between those items.

Some microformats already define containers: vcalendar hCalendar is a container for events, the hfeed container in hAtom contains entries, hAudio has a concept whereby haudio concepts may be nested, and an hCard vcard may be a container for agent vcards.

Why is this being explored?

There are a number of use cases for making better use of these container semantics, both in microformats like hCalendar that already have containers, and hReview, where no current container concept exists.


examples

As always it helps to start with examples of markup from actual websites that are already publishing container semantics. If this section gets too large, perhaps we can move it to container-examples.

container of reviews

The following website(s) contain a list of reviews which could/would benefit from a way of marking up not just the reviews as hReviews, but also the set of them as reviewing the same item.

SustainLane

http://www.sustainlane.com/ has pages that show multiple reviews of the same item. e.g.

http://www.sustainlane.com/reviews/aziza/TVLWN4ZKQLKTOIKFLWKBWFQ17DN8

Yelp

http://yelp.com/ has pages that show multiple reviews of the same item. e.g.

http://www.yelp.com/biz/coffee-to-the-people-san-francisco

Use cases

Here are some example use cases for sharing properties from a container into multiple child microformats:

Multiple reviews of the same item

As demonstrated by the above real world examples, many sites publish a page for a single item, listing multiple reviews of that item (e.g. Amazon, Kelkoo, Yelp, Yahoo! Location etc.). The item appears once at the top of the page. The reviews follow. hReview's current requirement is that the item be referenced from every review using the include-pattern. This requires duplicating some amount of content (most logically, the name of the reviewed item). This has raised objections by implementers, and usually imposes a CSS-dependency to hide the repeated content.

Reviews and review aggregate of the same item

Same as above, a single page includes a few reviews and a single reviews aggregate for a single business. In some implementations (yelp) the aggregate result number is contained inside the hcard. Reviews that use the include pattern to include the hcard of the business, are also including a second rating microformat, resulting in two ratings for the same hreview. Putting the reviews and review aggregates as siblings inside the same container, can solve this problem.

Shared hCalendar Properties

Yahoo! TV Listings marks up television programme listings using hCalendar. The location field of the event is the channel on which the show is broadcast: e.g. <span class='location'>BBC 1</span>.

With the ‘BBC 1’ content at the top of the page, not part of the programme content, the content either has to be repeated and hidden in the presentation layer, or current microformats constructs such as the include-pattern need to be used to invisibly reference the original mention of ‘BBC 1’.

Repeating content is unacceptable, and the include-pattern is a messy, hacky mark-up pattern. Embracing the concept of the container would match the publishing pattern of the site, without repeating content or including invisible pointers.

ideally this markup proposal would be moved to the "markup proposals" section below, separate from the "Use Cases" section, so that multiple varying proposals could be grouped together to compare, rather than intermingling them with the list of use cases.

.e.g.

<div class='vcalendar'>
   <h1 class='location'>BBC 2</h1>
 
   <ul>
      <li class='vevent'>
        <h2 class='summary'>Gardener's World</h2>
        <p class='dtstart'><span class='value-title' title='2009-06-05T20:30:00+0100'> </span> 8:30pm</p>
      </li>
      <li class='vevent'>
        <h2 class='summary'>Have I Got News For You</h2>
        <p class='dtstart'><span class='value-title' title='2009-06-05T21:00:00+0100'> </span> 9:00pm</p>
      </li>
    </ul>
</div>

Here, the location is promoted to being a property of the vcalendar, and is the default location for all the contained events.

This could also apply to the organizer, attendees, and others. With further explanation and date-time separation, you could event declare the day of the week the the vcalendar and the time-of-day in the vevent. The basic principal is illustrated, though.

Uses for this pattern:

This of course, extends the use of an existing container.


Shared Aspects of Containers

If containers become a more strongly adopted concept in microformats, they should behave consistently across formats (hence documenting these two examples here, rather than just as separate issues for both hReview and hCalendar).

Things that should be consistent and predictable:

markup proposals

hreview-set

One solution to the problem of multiple reviews of the same item could be to wrap each hReview in a container (hypothetically, hreview-set. The item is a child of the set, and is inherited by each hreview contained within.

hCard as a container

vcard block can contain associated information like reviews and aggregates. hreviews inside an vcard do not need to specify item. This also extends to other microformats that may contain reviews, such as hproduct. Another option is that a vcard that contains other microformat must also specify additional tag, such as hcontainer, item or similar.

Problems

<div class="vcard">
   <h1 class="fn">name</h1>
   <div class="hreview-aggregate">
      <div class="rating">
         <span class="average">4.4</span>
      </div> 
      <span class="count">1313</span> reviews
   </div>
   <div class="hreview"><!-- this hreview does not contain item --></div>
   <div class="hreview"><!-- this hreview does not contain item --></div>
</div>

hcontainer

A container microformat. Inside a container, a microformat that requires another microformat as a child (such as hreview requiring an item), can resolve this association by sibling relationship (as opposed to parent child relationship). When a container includes hreview or hreview-aggregate, it also requires a child item. This is similar to hreview-set proposal, with specific handling of aggregates.

In the example below, the item is hcard, similar examples can be written for products and events.

<!-- simple, all elements in the container are siblings -->
<div class="hcontainer">
   <h1 class="item vcard fn">name</h1>
   <div class="hreview-aggregate">
      <div class="rating">
         <span class="average">4.4</span>
      </div> 
      <span class="count">1313</span> reviews
   </div>
   <div class="hreview">...</div>
   <div class="hreview">...</div>
</div>
<!-- More complex case, nested elements in the container have additional parent child relationship -->
<div class="hcontainer">
   <div class="hreview-aggregate">
      <h1 class="item vcard fn">name</h1>
      <div class="rating">
         <span class="average">4.4</span>
      </div> 
      <span class="count">1313</span> reviews
   </div>
   <div class="hreview">...</div>
   <div class="hreview">...</div>
</div>

item as a container

The item microformat is currently used inside hreviews. Use this existing micformat as a container as well. This makes the specification slightly more complicated, since item will be allowed as a parent of hreview as well as a child. This is basically the same proposal as above, but using the name item for the container, instead of a dedicated name.

Problems

<div class="item">
   <h1 class="vcard fn">name</h1>
   <div class="hreview-aggregate">
      <div class="rating">
         <span class="average">4.4</span>
      </div> 
      <span class="count">1313</span> reviews
   </div>
   <div class="hreview"><!-- this hreview does not contain item --></div>
   <div class="hreview"><!-- this hreview does not contain item --></div>
</div>

hreview rating and hreview-aggregate rating use different names

Since the microformat rating is used for both, an hreview that includes an hcard which contains aggregates, effectively imports a second rating. This can be solved by having different names for hreview rating and hreview-aggregate rating. This is not really a container proposal, but it addresses issues of the hreview-aggregate which is currently a container for item.

Problems

<div class="vcard item" id="review_item">
   <h1 class="fn">name</h1>
   <!-- average rating -->
   <span class="average-rating">5</span> stars
   based on <span class="review-count">1313</span> reviews
   <span class="type microformat_detail">business</span>
</div>
<div class="hreview">
   <!-- single rating -->
   <span class="rating">3</span> stars
   <!-- include pattern -->
   <a class="item microformat_detail" href="#review_item">Aziza</a>
</div>

see also

Containers was last modified: Wednesday, December 31st, 1969

Views