include-pattern

(Difference between revisions)

Jump to: navigation, search
m (Fixed Editors DL)
Current revision (08:39, 7 April 2013) (view source)
m (Changed protection level for "include-pattern" [edit=sysop:move=sysop])
 
(37 intermediate revisions not shown.)
Line 1: Line 1:
<h1>Include Pattern</h1>
<h1>Include Pattern</h1>
-
 
+
{{TOC-right}}
-
Initially developed as part of [[resume-brainstorming]], the include pattern is a mechanism to include a portion of data from one area of a page into another area of the same page. The following is documentation for re-use of the pattern in other microformats, and for publishers working with it.
+
The include pattern is a microformat design pattern, providing a mechanism to include a portion of data from one area of a page into another area of the same page, allowing the data to be reused by multiple microformats, independent of content order, without repeating all the information. The following is documentation for re-use of the pattern in other microformats, and for publishers working with it.
;Editors: Tantek Çelik
;Editors: Tantek Çelik
: Ben Ward
: Ben Ward
-
__TOC__
+
== background ==
-
 
+
-
== Background ==
+
-
[[hresume|hResume]] needed the ability to include a name from one hCard at the top of a resume — the person's contact details — into into the separate hCards used in the same person's employment history. Repeating so much data would be inconvenient to publishers, irritating to consumers and would not have matched the existing publishing techniques used in Resumes and Curriculum Vitæ. The include pattern is a mechanism to reference data from the same page, avoiding repetition.
+
[[hresume|hResume]] needed the ability to include a name from one hCard at the top of a resume — the person's contact details into the separate hCards used in the same person's employment history. Repeating name information would not have matched the existing publishing practices used in Resumes and Curriculum Vitæ, would be inconvenient to publishers, and irritating to consumers. The include pattern is a mechanism to reference data from the same page, avoiding repetition, or duplicate visible information.
-
== Scope ==
+
== scope ==
The include pattern is strictly limited to the scope of the current page. It cannot be used to include content from other URLs.
The include pattern is strictly limited to the scope of the current page. It cannot be used to include content from other URLs.
-
==Quick Reference==
+
== quick reference==
-
The include-pattern is a mechanism to include content from one microformat into another microformat elsewhere in the same document, using hyperlinks (recommended) or OBJECT. For example:
+
The include-pattern is a mechanism to include content from one microformat into another microformat elsewhere in the same document, using hyperlinks or <code>object</code>. For example:
-
<pre><nowiki><a class="include" href="#author">Ben Ward</a></nowiki></pre>
+
<source lang=html4strict><a class="include" href="#author">James Levine</a></source>
-
<pre><nowiki><object class="include" data="#author"></object></nowiki></pre>
+
<source lang=html4strict><object class="include" data="#author"></object></source>
-
In specs which cite the include-pattern, either of the above code snippets will cause a microformats parser to replace the A or OBJECT element with class name "include" with the content fragment with ID "author". Full examples follow.
+
In specifications which cite the include-pattern, either of the above code snippets {{must}} cause a microformats parser to replace the <code>A</code> or <code>object</code> element with class name "include" with the content fragment with ID "author". Full examples follow.
-
==Include Pattern in General==
+
== in general==
To reference includes, use an include element with class name "include" and a document fragment identifier. The content to be included should have an ID attribute set, and that ID should be referenced from the HREF or DATA attribute at the point of inclusion.
To reference includes, use an include element with class name "include" and a document fragment identifier. The content to be included should have an ID attribute set, and that ID should be referenced from the HREF or DATA attribute at the point of inclusion.
-
The include element with class name "include" indicates a reference to a sub-tree elsewhere in the document which must be included in-place by microformat parsers. That is, the element with class "include" is _replaced_ in the DOM by the referenced sub-tree.
+
The include element with class name "include" indicates a reference to a sub-tree elsewhere in the document which {{must}} be included in-place by microformat parsers. That is, the element with class "include" is _replaced_ in the DOM by the referenced sub-tree. Note that this means all other class names on the include element are discarded. Microformat class names should be included on the target of the include, not on the include element itself.
To prevent infinite loops, if a class="include" refers to itself or to an ancestor in the parse tree, then it is ignored and has no effect on the parser.
To prevent infinite loops, if a class="include" refers to itself or to an ancestor in the parse tree, then it is ignored and has no effect on the parser.
-
Per the [[include-pattern#Scope|scope]], the OBJECT 'data' attribute and hyperlink 'href' attribute MUST be local ID references when used as include pattern instances. External references (requiring a consuming application to load an external resource) are not supported by this method.
+
Per the [[include-pattern#Scope|scope]], the <code>object</code> 'data' attribute and hyperlink 'href' attribute {{must}} be local ID references when used as include pattern instances. External references (requiring a consuming application to load an external resource) are not supported by this method.
-
There are two HTML elements available to reference includes, hyperlink/Anchor and OBJECT. They are documented below.
+
There are two HTML elements available to reference includes, hyperlink/Anchor and <code>object</code>. They are documented below.
These methods of property indirection via a hyperlink element can apply to any/all properties in class-based microformats, but should only be used where a microformat explicitly states that the include-pattern is a dependency. For example, [[XOXO]] does not reference the include-pattern at this time, so sub-trees cannot be included by reference in XOXO. [[hResume]] and [[hReview]] do reference the include pattern.
These methods of property indirection via a hyperlink element can apply to any/all properties in class-based microformats, but should only be used where a microformat explicitly states that the include-pattern is a dependency. For example, [[XOXO]] does not reference the include-pattern at this time, so sub-trees cannot be included by reference in XOXO. [[hResume]] and [[hReview]] do reference the include pattern.
-
===HYPERLINK include===
+
=== Hyperlink ===
The recommended way to reference includes within microformats is to use a hyperlink.
The recommended way to reference includes within microformats is to use a hyperlink.
-
====HYPERLINK include example====
+
==== Hyperlink example====
-
Here is an [[hcard|hCard]] from the beginning of a resume, shown here as a verbose hCard.
+
Here is an [[hcard|hCard]] for a bar, included at the top of a reviews page, shown here as a verbose hCard.
-
<pre><nowiki>
+
<source lang=html4strict>
-
<span class="vcard">
+
<div class="vcard" id="bricklayers-card">
-
<span class="fn n" id="j">
+
  <div class="fn org">The Bricklayers Arms</div>
-
  <span class="given-name">James</span> <span class="family-name">Levine</span>
+
  <div class="adr">
-
</span>
+
    <span class="street-address">31 Gresse Street</span>,
-
</span>
+
    <span class="locality">Fitzrovia</span>
-
</nowiki></pre>  
+
    <span class="region">London</span>
 +
    <span class="postal-code">W1T 1QS</span>
 +
  </div>
 +
</div>
 +
</source>
-
Elsewhere on the page, a second hCard re-uses the "fn n" content from the first hCard:
+
Elsewhere on the page, a number of reviews reference the hcard in the item property. Rather than repeat all the verbose detail, only the name is reprinted and the detailed hcard referenced using the include-pattern.
-
<pre><nowiki>
+
<source lang=html4strict>
-
<span class="vcard">
+
<div class="hreview">
-
<a href="#j" class="include">Ben Ward</a>
+
  <h1 class="summary">A great venue for monthly gatherings!</h1>
-
<span class="org">SimplyHired</span>
+
  <div class="item"><a class="include" href="#bricklayers-card">The Bricklayers Arms</a></div>
-
<span class="title">Microformat Brainstormer</span>
+
  <p class="description">Wonderful pub, cheap beer, open fire to warm mince pies at Christmas.</p>
-
</span>
+
</div>
-
</nowiki></pre>  
+
-
A microformat parser must treat the second hCard as follows, with the hyperlink include element completely replaced (including inner-text) by the sub-tree that was referenced:
+
<div class="hreview">
 +
  <h1 class="summary">Takes a while to thin out, but!</h1>
 +
  <div class="item"><a class="include" href="#bricklayers-card">The Bricklayers Arms</a></div>
 +
  <p class="rating"><span class="value">5</span>/<span class="best">5</span></p>
 +
</div>
 +
</source>
-
<pre><nowiki>
+
Note that you {{must}} include content within the anchor element. See the notes and issues below.
-
<span class="vcard">
+
 
-
<span class="fn n" id="j">
+
A microformat parser {{must}} treat each review as follows, with the hyperlink include element completely replaced (including inner-text) by the sub-tree that was referenced:
-
  <span class="given-name">James</span> <span class="family-name">Levine</span>
+
-
</span>
+
-
<span class="org">SimplyHired</span>
+
-
<span class="title">Microformat Brainstormer</span>
+
-
</span>
+
-
</nowiki></pre>
+
-
====HYPERLINK include notes and issues====
+
<source lang=html4strict>
 +
<div class="hreview">
 +
  <h1 class="summary">A great venue for monthly gatherings!</h1>
 +
  <div class="item">
 +
      <div class="vcard" id="bricklayers-card">
 +
        <div class="fn org">The Bricklayers Arms</div>
 +
        <div class="adr">
 +
          <span class="street-address">31 Gresse Street</span>,
 +
          <span class="locality">Fitzrovia</span>
 +
          <span class="region">London</span>
 +
          <span class="postal-code">W1T 1QS</span>
 +
        </div>
 +
      </div>
 +
  </div>
 +
  <p class="description">Wonderful pub, cheap beer, open fire to warm mince pies at Christmas.</p>
 +
</div>
-
Using the hyperlink include pattern causes no known issues in any web browser. However, it is necessary to supply inner-text for the hyperlink itself. This can require repeating a small piece of information (such as a person's name in an hCard), or including generic text suitable for the context of the page. The user experience of Assistive Technology can be severely degraded by the presence of hyperlinks which do not contain text.
+
</source>
-
In most cases, publishers hide the include hyperlink from most browsers using CSS.
+
==== notes and issues ====
-
=== OBJECT include ===
+
Note: The <code>id</code> attribute value in the example "bricklayers-card" was chosen for demonstration purposes. The text of the value has no semantic per the include-pattern other than to connect the source of the include to the destination. Authors {{should}} use good [[POSH]] techniques to choose <code>id</code> and <code>class</code> names.
-
The OBJECT include pattern is semantically superior to the hyperlink include; it is being used to embed content into the page. OBJECT was the original developed include pattern. However, there are serious browser compatibility issues that can affect some implementation scenarios.
+
Authors {{must}} supply content text for the hyperlink itself. This can require repeating a small piece of information (such as a person's name in an hcard), or including generic text as appropriate to the context of the page.  
-
====OBJECT include example====
+
===== accessibility =====
-
Here is the same [[hcard|hCard]] from the beginning of the resume in the previous example.
+
* Testing indicates that the only way to guarantee accessibility of hyperlinks to users of assistive technology (such as screen readers) is to include inner-text. [http://yuiblog.com/blog/2008/01/23/empty-links/ See: Empty Links and Screen Readers]
 +
* You {{must}} include inner-text in the hyperlink element.
 +
* You MAY enhance the rendered user experience (depending on the context of your page) by hiding the include element using CSS <code>display: none</code>
 +
* Where you wish to hide the content of the include element, you {{should not}} hide the include element using a CSS negative margin offset as the hidden link will remain in the tab order of the document. Use <code>display: none</code> instead.
-
<pre><nowiki>
+
Where a publishing constraint prevents putting content within the include-pattern, you {{must}} use the <code>object</code> element pattern instead of a hyperlink.
 +
 
 +
=== Object ===
 +
 
 +
The Object Include Pattern is semantically superior to the Hyperlink Include; it is being used to embed content into the page. The <code>object</code> element based include was the original developed include pattern. However, there are some browser compatibility issues that can affect some implementation scenarios and thus the above Hyperlink Include Pattern is preferred.
 +
 
 +
==== Object example ====
 +
 
 +
The [[hcard|hCard]] from the beginning of a resumé describes the person who's resumé it is:
 +
 
 +
<source lang=html4strict>
<span class="vcard">
<span class="vcard">
-
<span class="fn n" id="j">
+
  <span class="fn n" id="james-hcard-name">
-
  <span class="given-name">James</span> <span class="family-name">Levine</span>
+
    <span class="given-name">James</span> <span class="family-name">Levine</span>
-
</span>
+
  </span>
</span>
</span>
-
</nowiki></pre>  
+
</source>  
-
Elsewhere on the page, a second hCard re-uses the "fn n" content from the first hCard:
+
Elsewhere on the page, a second hCard, with employer information, re-uses the "fn n" content from the first hCard:
-
<pre><nowiki>
+
<source lang=html4strict>
<span class="vcard">
<span class="vcard">
-
  <object data="#j" class="include"></object>
+
  <object class="include" data="#james-hcard-name"></object>
  <span class="org">SimplyHired</span>
  <span class="org">SimplyHired</span>
  <span class="title">Microformat Brainstormer</span>
  <span class="title">Microformat Brainstormer</span>
</span>
</span>
-
</nowiki></pre>  
+
</source>  
-
A microformat parser must treat the second hCard as follows, with the OBJECT include element completely replaced by the sub-tree that it referenced:
+
A microformat parser {{must}} treat the second hCard as follows, with the <code>object</code> include element completely replaced by the sub-tree that it referenced:
-
<pre><nowiki>
+
<source lang=html4strict>
<span class="vcard">
<span class="vcard">
-
<span class="fn n" id="j">
+
  <span class="fn n" id="james-hcard-name">
-
  <span class="given-name">James</span> <span class="family-name">Levine</span>
+
    <span class="given-name">James</span> <span class="family-name">Levine</span>
-
</span>
+
  </span>
-
<span class="org">SimplyHired</span>
+
  <span class="org">SimplyHired</span>
-
<span class="title">Microformat Brainstormer</span>
+
  <span class="title">Microformat Brainstormer</span>
</span>
</span>
-
</nowiki></pre>
+
</source>
This method of hCard property indirection via an object element can apply to any/all properties in class-based microformats.
This method of hCard property indirection via an object element can apply to any/all properties in class-based microformats.
-
===OBJECT include notes and issues===
+
=== notes and issues===
-
* Unlike the hyperlink pattern, the OBJECT pattern does not require any textual fallback. This makes it invisible to Assistive Technology with no adverse affect.
+
* Unlike the hyperlink pattern, the <code>object</code> is not believed to cause problems in assistive technology when fallback text is absent. ('''research needed''')
-
* Apple's Safari (WebKit-based) browser has some rendering issues with this use of OBJECT: You should set a width and height of "0" for the include elements to resolve this.
+
* Apple's Safari 1.x browser has some rendering issues with this use of <code>object</code>: Publishers {{should}} style a width and height of "0" for the include elements to resolve this ('''clarification of issue needed''').
-
* Bugs have been reported in some web browsers (Internet Explorer, Safari, Firefox) that OBJECT elements referencing fragments of the same document erroneously cause the browser to make additional HTTP requests. For scenarios where HTTP requests are a sensitive performance measure, this makes the hyperlink pattern inappropriate.
+
* Bugs have been reported in some web browsers (Internet Explorer, Safari, Firefox) that <code>object</code> elements referencing fragments of the same document erroneously cause the browser to make additional HTTP requests ('''version(s) affected needed'''). For scenarios where HTTP requests are a performance issue, publishers {{should}} use the hyperlink pattern instead.
-
* Versions of Microsoft Internet Explorer with ActiveX controls disabled will throw a warning prompt upon finding an OBJECT element.
+
* Versions of Microsoft Internet Explorer with ActiveX controls disabled will throw a warning prompt upon finding an <code>object</code> element ('''version(s) affected needed''').
 +
== acknowledgements ==
-
== Acknowledgements ==
+
Thanks to discussions and brainstorms with a bunch of folks: [http://theryanking.com/ Ryan King], James Levine, the whole crowd at the [http://mashupcamp.com/index.cgi?HAtomFinalization Microformats specifications working session] at MashupCamp, [http://suda.co.uk/ Brian Suda], [http://randomchaos.com/ Scott Reynen], [http://allinthehead.com/ Drew McLellan]. Thanks to [http://www.isolani.co.uk/ Mike Davies] for accessibility research.
-
Thanks to discussions and brainstorms with a bunch of folks: [http://theryanking.com/ Ryan King], James Levine, the whole crowd at the [http://mashupcamp.com/index.cgi?HAtomFinalization Microformats specifications working session] at MashupCamp, [http://suda.co.uk/ Brian Suda], [http://randomchaos.com/ Scott Reynen], [http://allinthehead.com/ Drew McLellan].
+
== specifications using ==
-
 
+
-
== Specifications Using ==
+
* [[hresume|hResume]]
* [[hresume|hResume]]
* [[hreview|hReview]]
* [[hreview|hReview]]
-
=== Considering ===
+
=== considering ===
 +
All class-based microformats {{should}} consider using and explicitly normatively stating support for the include pattern.
* [[hatom|hAtom]]
* [[hatom|hAtom]]
* [[hcalendar|hCalendar]]
* [[hcalendar|hCalendar]]
* [[hcard|hCard]]
* [[hcard|hCard]]
-
* [[currency]]
 
-
* [[measure]]
 
-
== Implementations ==
+
== implementations ==
* X2V implements the [[include-pattern]] when parsing [[hcard|hCards]] and [[hcalendar|hCalendars]] for both object.include and a.include.
* X2V implements the [[include-pattern]] when parsing [[hcard|hCards]] and [[hcalendar|hCalendars]] for both object.include and a.include.
-
== References ==
+
== references ==
-
=== Normative ===
+
=== normative ===
* HTML 4.01
* HTML 4.01
-
* XHTML 1.0
 
-
=== Informative ===
+
=== informative ===
* [[hcard|hCard]]
* [[hcard|hCard]]
 +
* [[hresume|hResume]]
 +
* XHTML 1.0
-
==Related Pages==
+
== related pages==
{{include-pattern-related-pages}}
{{include-pattern-related-pages}}
* See also [http://www.technorati.com/cosmos/referer.html blogs discussing this page].
* See also [http://www.technorati.com/cosmos/referer.html blogs discussing this page].

Current revision

Include Pattern

Contents

The include pattern is a microformat design pattern, providing a mechanism to include a portion of data from one area of a page into another area of the same page, allowing the data to be reused by multiple microformats, independent of content order, without repeating all the information. The following is documentation for re-use of the pattern in other microformats, and for publishers working with it.

Editors
Tantek Çelik
Ben Ward

background

hResume needed the ability to include a name from one hCard at the top of a resume — the person's contact details — into the separate hCards used in the same person's employment history. Repeating name information would not have matched the existing publishing practices used in Resumes and Curriculum Vitæ, would be inconvenient to publishers, and irritating to consumers. The include pattern is a mechanism to reference data from the same page, avoiding repetition, or duplicate visible information.

scope

The include pattern is strictly limited to the scope of the current page. It cannot be used to include content from other URLs.

quick reference

The include-pattern is a mechanism to include content from one microformat into another microformat elsewhere in the same document, using hyperlinks or object. For example:

<a class="include" href="#author">James Levine</a>
<object class="include" data="#author"></object>

In specifications which cite the include-pattern, either of the above code snippets MUST cause a microformats parser to replace the A or object element with class name "include" with the content fragment with ID "author". Full examples follow.

in general

To reference includes, use an include element with class name "include" and a document fragment identifier. The content to be included should have an ID attribute set, and that ID should be referenced from the HREF or DATA attribute at the point of inclusion.

The include element with class name "include" indicates a reference to a sub-tree elsewhere in the document which MUST be included in-place by microformat parsers. That is, the element with class "include" is _replaced_ in the DOM by the referenced sub-tree. Note that this means all other class names on the include element are discarded. Microformat class names should be included on the target of the include, not on the include element itself.

To prevent infinite loops, if a class="include" refers to itself or to an ancestor in the parse tree, then it is ignored and has no effect on the parser.

Per the scope, the object 'data' attribute and hyperlink 'href' attribute MUST be local ID references when used as include pattern instances. External references (requiring a consuming application to load an external resource) are not supported by this method.

There are two HTML elements available to reference includes, hyperlink/Anchor and object. They are documented below.

These methods of property indirection via a hyperlink element can apply to any/all properties in class-based microformats, but should only be used where a microformat explicitly states that the include-pattern is a dependency. For example, XOXO does not reference the include-pattern at this time, so sub-trees cannot be included by reference in XOXO. hResume and hReview do reference the include pattern.

Hyperlink

The recommended way to reference includes within microformats is to use a hyperlink.

Hyperlink example

Here is an hCard for a bar, included at the top of a reviews page, shown here as a verbose hCard.

<div class="vcard" id="bricklayers-card">
  <div class="fn org">The Bricklayers Arms</div>
  <div class="adr">
     <span class="street-address">31 Gresse Street</span>,
     <span class="locality">Fitzrovia</span>
     <span class="region">London</span>
     <span class="postal-code">W1T 1QS</span>
  </div>
</div>

Elsewhere on the page, a number of reviews reference the hcard in the item property. Rather than repeat all the verbose detail, only the name is reprinted and the detailed hcard referenced using the include-pattern.

<div class="hreview">
   <h1 class="summary">A great venue for monthly gatherings!</h1>
   <div class="item"><a class="include" href="#bricklayers-card">The Bricklayers Arms</a></div>
   <p class="description">Wonderful pub, cheap beer, open fire to warm mince pies at Christmas.</p>
</div>
 
<div class="hreview">
   <h1 class="summary">Takes a while to thin out, but!</h1>
   <div class="item"><a class="include" href="#bricklayers-card">The Bricklayers Arms</a></div>
   <p class="rating"><span class="value">5</span>/<span class="best">5</span></p>
</div>

Note that you MUST include content within the anchor element. See the notes and issues below.

A microformat parser MUST treat each review as follows, with the hyperlink include element completely replaced (including inner-text) by the sub-tree that was referenced:

<div class="hreview">
   <h1 class="summary">A great venue for monthly gatherings!</h1>
   <div class="item">
      <div class="vcard" id="bricklayers-card">
        <div class="fn org">The Bricklayers Arms</div>
        <div class="adr">
           <span class="street-address">31 Gresse Street</span>,
           <span class="locality">Fitzrovia</span>
           <span class="region">London</span>
           <span class="postal-code">W1T 1QS</span>
        </div>
      </div>
   </div>
   <p class="description">Wonderful pub, cheap beer, open fire to warm mince pies at Christmas.</p>
</div>

notes and issues

Note: The id attribute value in the example "bricklayers-card" was chosen for demonstration purposes. The text of the value has no semantic per the include-pattern other than to connect the source of the include to the destination. Authors SHOULD use good POSH techniques to choose id and class names.

Authors MUST supply content text for the hyperlink itself. This can require repeating a small piece of information (such as a person's name in an hcard), or including generic text as appropriate to the context of the page.

accessibility

Where a publishing constraint prevents putting content within the include-pattern, you MUST use the object element pattern instead of a hyperlink.

Object

The Object Include Pattern is semantically superior to the Hyperlink Include; it is being used to embed content into the page. The object element based include was the original developed include pattern. However, there are some browser compatibility issues that can affect some implementation scenarios and thus the above Hyperlink Include Pattern is preferred.

Object example

The hCard from the beginning of a resumé describes the person who's resumé it is:

<span class="vcard">
  <span class="fn n" id="james-hcard-name">
    <span class="given-name">James</span> <span class="family-name">Levine</span>
  </span>
</span>

Elsewhere on the page, a second hCard, with employer information, re-uses the "fn n" content from the first hCard:

<span class="vcard">
 <object class="include" data="#james-hcard-name"></object>
 <span class="org">SimplyHired</span>
 <span class="title">Microformat Brainstormer</span>
</span>

A microformat parser MUST treat the second hCard as follows, with the object include element completely replaced by the sub-tree that it referenced:

<span class="vcard">
  <span class="fn n" id="james-hcard-name">
    <span class="given-name">James</span> <span class="family-name">Levine</span>
  </span>
  <span class="org">SimplyHired</span>
  <span class="title">Microformat Brainstormer</span>
</span>

This method of hCard property indirection via an object element can apply to any/all properties in class-based microformats.

notes and issues

acknowledgements

Thanks to discussions and brainstorms with a bunch of folks: Ryan King, James Levine, the whole crowd at the Microformats specifications working session at MashupCamp, Brian Suda, Scott Reynen, Drew McLellan. Thanks to Mike Davies for accessibility research.

specifications using

considering

All class-based microformats SHOULD consider using and explicitly normatively stating support for the include pattern.

implementations

references

normative

informative

related pages

include-pattern was last modified: Sunday, April 7th, 2013

Views