<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://microformats.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kylewm</id>
	<title>Microformats Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://microformats.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kylewm"/>
	<link rel="alternate" type="text/html" href="https://microformats.org/wiki/Special:Contributions/Kylewm"/>
	<updated>2026-05-10T02:28:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=h-review-feedback&amp;diff=65519</id>
		<title>h-review-feedback</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=h-review-feedback&amp;diff=65519"/>
		<updated>2016-05-16T14:34:43Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Consistency with other microformats */ +1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Feedback and discussion of [[h-review]]. Summarise any useful conclusions from discussions in [[irc]] here.&lt;br /&gt;
&lt;br /&gt;
== Consistency with other microformats ==&lt;br /&gt;
&lt;br /&gt;
Some h-review properties are extremely similar to more generic, reusable properties in other microformats such as [[h-entry]], [[h-recipe]]:&lt;br /&gt;
&lt;br /&gt;
* p-reviewer =&amp;gt; p-author&lt;br /&gt;
* dt-reviewed =&amp;gt; dt-published&lt;br /&gt;
* e-description =&amp;gt; e-content&lt;br /&gt;
&lt;br /&gt;
What is the value of duplicating these properties? Could they be merged, increasing consistency between microformats and reducing total amount of surface area which must be remembered? As there are almost no microformats2 h-reviews in the wild, right now would be a good time to make these changes --[[User:Barnabywalters|bw]] 15:22, 13 March 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** +1 Would make the publishing side a little easier, and the consuming side a lot easier. Right now, Woodwind does not display h-reviews, but if they used mostly common properties, they would be easier to add. [[User:Kylewm|Kylewm]] 14:34, 16 May 2016 (UTC)&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65504</id>
		<title>microformats2-parsing-brainstorming</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65504"/>
		<updated>2016-05-07T19:45:32Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Pronouns in different languages */ Inherited language&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing brainstorming&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is for brainstorming, discussion, and other questions and explorations about [[microformats2]] parsing.&lt;br /&gt;
&lt;br /&gt;
For the microformats2 parsing algorithm, see:&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
For filing issues / problems with microformats2-parsing, see:&lt;br /&gt;
* [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Parse language information ==&lt;br /&gt;
Raised by [[User:VoxPelli|VoxPelli]] 18:04, 23 July 2015 (UTC)&lt;br /&gt;
* 2016-060: Update: and parse &amp;quot;id&amp;quot; attribute. [[User:Tantek|Tantek]] 16:39, 29 February 2016 (UTC) (see Additionally below)&lt;br /&gt;
&lt;br /&gt;
Currently there’s no way to tell the language of parsed microformats even if those microformats has been marked up with HTML &amp;quot;lang&amp;quot;-attributes.&lt;br /&gt;
&lt;br /&gt;
There are examples in the wild of people marking up pages in such a way:&lt;br /&gt;
&lt;br /&gt;
* [http://voxpelli.com/ VoxPelli.com] has a &amp;quot;lang&amp;quot;-attribute on the h-entry of his [http://voxpelli.com/2011/03/sista-dagen-p-good-old/ swedish articles] to signify that the article is swedish even though the rest of the site is english.&lt;br /&gt;
* Stephanie [http://climbtothestars.org/archives/2013/09/17/basic-bilingual-1-0-plugin-for-wordpress-blog-in-more-than-one-language/ uses a WordPress plugin] that adds summaries of other languages at the start of her content.&lt;br /&gt;
&lt;br /&gt;
Proposal is to add a new &amp;quot;lang&amp;quot; keyword to h-* and e-* objects so that the following example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot; lang=&amp;quot;sv&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;En svensk titel&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-content&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;With an &amp;lt;em&amp;gt;english&amp;lt;/em&amp;gt; summary&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-content&amp;quot;&amp;gt;Och &amp;lt;em&amp;gt;svensk&amp;lt;/em&amp;gt; huvudtext&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would be parsed into something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;,&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;En svensk titel&amp;quot;],&lt;br /&gt;
    &amp;quot;content&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;,&lt;br /&gt;
        &amp;quot;html&amp;quot;: &amp;quot;With an &amp;lt;em&amp;gt;english&amp;lt;/em&amp;gt; summary&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;With an english summary&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;html&amp;quot;: &amp;quot;Och &amp;lt;em&amp;gt;svensk&amp;lt;/em&amp;gt; huvudtext&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Och svensk huvudtext&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This was [http://indiewebcamp.com/irc/2015-07-23#t1437667712078 brainstormed on the IndieWebCamp IRC-channel] where the mentioned example came up.&lt;br /&gt;
&lt;br /&gt;
* Pull request for implementation in microformat-node added 2015-07-23 https://github.com/glennjones/microformat-node/pull/23&lt;br /&gt;
** Closed 2015-09-08 because the library has changed and parsing is now handled by microformat-shiv. New issue opened there: https://github.com/glennjones/microformat-shiv/issues/22&lt;br /&gt;
&lt;br /&gt;
Additionally: consider the same for &amp;quot;id&amp;quot; attributes (use-case: rel=feed local discovery of a nested h-feed on the home page), specifically, parsing the first instance of any &amp;quot;id&amp;quot; attribute (ignoring latter duplicate id attribute values on any subsequent elements).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And alternatively: consider parsing as &amp;quot;html-id&amp;quot; and &amp;quot;html-lang&amp;quot; prefixed properties in the parsed result, e.g.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot; lang=&amp;quot;sv&amp;quot; id=&amp;quot;postfrag123&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;En svensk titel&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-content&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;With an &amp;lt;em&amp;gt;english&amp;lt;/em&amp;gt; summary&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-content&amp;quot;&amp;gt;Och &amp;lt;em&amp;gt;svensk&amp;lt;/em&amp;gt; huvudtext&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would be parsed into something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;html-id&amp;quot;: &amp;quot;postfrag123&amp;quot;,&lt;br /&gt;
  &amp;quot;html-lang&amp;quot;: &amp;quot;sv&amp;quot;,&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;En svensk titel&amp;quot;],&lt;br /&gt;
    &amp;quot;content&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;html-lang&amp;quot;: &amp;quot;en&amp;quot;,&lt;br /&gt;
        &amp;quot;html&amp;quot;: &amp;quot;With an &amp;lt;em&amp;gt;english&amp;lt;/em&amp;gt; summary&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;With an english summary&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;html&amp;quot;: &amp;quot;Och &amp;lt;em&amp;gt;svensk&amp;lt;/em&amp;gt; huvudtext&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Och svensk huvudtext&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Language inheritance ===&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;lang&amp;quot; attribute is not specified for a particular element, it is inherited from the nearest parent (or from the HTTP Content-Language header)&lt;br /&gt;
&lt;br /&gt;
https://www.w3.org/TR/html4/struct/dirlang.html#h-8.1.2&lt;br /&gt;
&lt;br /&gt;
Proposal: Determine and include the inherited &amp;quot;lang&amp;quot; value on *every* microformat object that directly specifies a lang or that has an ancestor that does, e.g. if &amp;amp;lt;html lang=&amp;quot;en&amp;quot;&amp;amp;gt;, then every object in the output will have &amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pronouns in different languages ===&lt;br /&gt;
&lt;br /&gt;
Language is also useful context when defining [[pronouns]], discussed a bit here[https://github.com/idno/Known/pull/1426#issuecomment-217626923].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-x-pronoun-nominative&amp;quot;&amp;gt;he&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-x-pronoun-possessive&amp;quot;&amp;gt;him&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-x-pronoun-oblique&amp;quot;&amp;gt;his&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would parse as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;,&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;x-pronoun-nominative&amp;quot;: [&amp;quot;he&amp;quot;],&lt;br /&gt;
    &amp;quot;x-pronoun-possessive&amp;quot;: [&amp;quot;him&amp;quot;],&lt;br /&gt;
    &amp;quot;x-pronoun-oblique&amp;quot;: [&amp;quot;his&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It could also be useful to specify multiple languages within a single h-card (pardon me if I butcher Swedish pronouns)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;en&amp;quot; class=&amp;quot;p-x-pronoun-nominative&amp;quot;&amp;gt;he&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;en&amp;quot; class=&amp;quot;p-x-pronoun-possessive&amp;quot;&amp;gt;him&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;en&amp;quot; class=&amp;quot;p-x-pronoun-oblique&amp;quot;&amp;gt;his&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;sv&amp;quot; class=&amp;quot;p-x-pronoun-nominative&amp;quot;&amp;gt;han&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;sv&amp;quot; class=&amp;quot;p-x-pronoun-possessive&amp;quot;&amp;gt;hans&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;sv&amp;quot; class=&amp;quot;p-x-pronoun-oblique&amp;quot;&amp;gt;honom&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which might parse as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;x-pronoun-nominative&amp;quot;: [{&amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;he&amp;quot;}, {&amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;han&amp;quot;}],&lt;br /&gt;
    &amp;quot;x-pronoun-possessive&amp;quot;: [{&amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;him&amp;quot;}, {&amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;hans&amp;quot;}],&lt;br /&gt;
    &amp;quot;x-pronoun-oblique&amp;quot;: [{&amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;his&amp;quot;}, {&amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;honom&amp;quot;}]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or alternatively, we could introduce a new microformat h-x-pronoun to wrap a set of pronouns&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-x-pronoun h-x-pronoun&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-nominative&amp;quot;&amp;gt;he&amp;lt;/span&amp;gt; /&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-possessive&amp;quot;&amp;gt;him&amp;lt;/span&amp;gt; /&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-oblique&amp;quot;&amp;gt;his&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-x-pronoun h-x-pronoun&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-nominative&amp;quot;&amp;gt;han&amp;lt;/span&amp;gt; /&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-possessive&amp;quot;&amp;gt;hans&amp;lt;/span&amp;gt; /&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-oblique&amp;quot;&amp;gt;honom&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
parsed as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;x-pronoun&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-x-pronoun&amp;quot;],&lt;br /&gt;
      &amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;nominative&amp;quot;: [&amp;quot;he&amp;quot;],&lt;br /&gt;
        &amp;quot;possessive&amp;quot;: [&amp;quot;him&amp;quot;],&lt;br /&gt;
        &amp;quot;oblique&amp;quot;: [&amp;quot;his&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    }, {&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-x-pronoun&amp;quot;],&lt;br /&gt;
      &amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;nominative&amp;quot;: [&amp;quot;han&amp;quot;],&lt;br /&gt;
        &amp;quot;possessive&amp;quot;: [&amp;quot;hans&amp;quot;],&lt;br /&gt;
        &amp;quot;oblique&amp;quot;: [&amp;quot;honom&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    }]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Discussion:&lt;br /&gt;
* [[User:Kylewm|Kylewm]] Including the &amp;quot;lang&amp;quot; attribute in h- and e- properties makes a ton of sense to me.&lt;br /&gt;
* [[User:Kylewm|Kylewm]] I like the idea of introducing an h-x-pronoun container that can define all the different pronoun forms for a particular language&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Canonicalization of datetime output ==&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
It would be useful to choose a (more) uniform output format for datetimes to make it easier for users of the parser to consume datetimes. Microformats2 parsers already do sophisticated pattern matching to recognize date vs. time vs. datetimes, so converting this to any specific format should not add overhead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Specifically: &lt;br /&gt;
* Choose either 'T' or space as the date/time separator.&lt;br /&gt;
** Prefer space as it is more human friendly/readable, which matters even for syntaxes/formats, as human still develop, debug them. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* Choose either +XXYY or +XX:YY as the timezone specification (and convert 'Z' to +0000).&lt;br /&gt;
** Would appreciate some study / input here as to which timezone offset syntax is more human friendly. I lean slightly toward +/-NNNN (without the colon) because in the context of seeing a time, leaving out the colon makes it less likely the offset will be confused for a time. E.g. &amp;quot;07:00-08:00&amp;quot; looks like 7-8am, even if it meant 07:00 in PST. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** Space is fine - consensus [[2015-01-20]] meetup.&lt;br /&gt;
* Parsers should ''not'' attempt make datetimes more exact than specified. They should not add time, seconds, or timezone if omitted in the original. [[User:Kylewm|Kylewm]] 04:02, 14 May 2014 (UTC)&lt;br /&gt;
** Agreed. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** or month, day per Tom Morris&lt;br /&gt;
** consensus [[2015-01-20]] meetup&lt;br /&gt;
&lt;br /&gt;
* Counterpoint: PHP's builtin date parsing does not require strict formatting. And the equivalent functionality for Python is provided by the widely used python-dateutil library. [[User:Kylewm|Kylewm]] 19:02, 14 May 2014 (UTC)&lt;br /&gt;
** However we cannot (must not) depend on either PHP or Python's &amp;quot;smart&amp;quot; &amp;quot;fixing&amp;quot; or Postelian &amp;quot;liberal handling&amp;quot;, or any other language/framework's for that matter, as they all differ in how &amp;quot;intelligent&amp;quot; they are. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perhaps just provide a guideline for these based on the above consensus.&lt;br /&gt;
&lt;br /&gt;
== Add meta http-equiv to microformats2 parsing model ==&lt;br /&gt;
Status: disagreement, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
Similar to document level parsing of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, it makes sense simultaneously to parse &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv&amp;amp;gt;&amp;lt;/code&amp;gt; elements, perhaps treating &amp;quot;Status&amp;quot; in a special way (only using first number (sequence of digits) for its &amp;quot;value&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Use case: IndieWeb &amp;quot;deleted&amp;quot; indication inline in content for static file services that don't support HTTP return codes.&lt;br /&gt;
* http://indiewebcamp.com/deleted#HTML_meta_http-equiv_for_status&lt;br /&gt;
&lt;br /&gt;
HTTP Header example:&lt;br /&gt;
* &amp;lt;samp&amp;gt;Content-Type: text/html; charset=utf-8&amp;lt;/samp&amp;gt;&lt;br /&gt;
HTML equivalent: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Related:&lt;br /&gt;
* https://www.w3.org/International/O-HTTP-charset&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Interesting thought. Are you suggesting a top level &amp;quot;http-equivs:&amp;quot; collection similar to &amp;quot;rels:&amp;quot; in the parsed output? Should we consider &amp;quot;metas:&amp;quot; instead or in addition? [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* What's the use case for this? Also, http-equiv on its own is useless. http-equiv is only a supplement to the data stored in headers. And headers aren't always there: what happens in the context of someone debugging a page who pastes the source into the textarea of an mf2 parser? Without a compelling use case for including headers (and then over-riding some of them with http-equivs), I'm not sure why an implementor want to do this. —[[User:TomMorris|Tom Morris]] 00:25, 8 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g. from https://gist.github.com/aaronpk/10297489&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Status&amp;quot; content=&amp;quot;410 GONE&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [],&lt;br /&gt;
 &amp;quot;rels&amp;quot;: {},&lt;br /&gt;
 &amp;quot;http&amp;quot;: {&lt;br /&gt;
 &amp;quot;status&amp;quot;: 410&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Maybe make this an optional pass in the parser? - Tom Morris [[2015-01-20]]&lt;br /&gt;
* For now, don't bother with metas until someone provides a use-case. Tom Morris&lt;br /&gt;
* Agreed on both counts. [[User:Tantek|Tantek]] 06:56, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MIME type==&lt;br /&gt;
See [[microformats2-mime-type]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Other Interpretation Parsing Notes==&lt;br /&gt;
Note: most of these need to be written up as separate [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
Author: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
[[microformats-2|Microformats 2]] proposes a new, all encompassing syntax modification of [[microformats-2-prefixes|prefixes]] that will allow microformats to be parsed from pages by processors without prior knowledge of a vocabulary. The core components of this model are quite simple, are quite simple to implement, but there are a number of conflicts that emerge with the functionality of existing microformats parsers that need to be handled. This page documents a proposed model to separate these concerns clearly in a way that can be applied to the documentation of generic microformats parsing rules, and the documentation of individual vocabularies.&lt;br /&gt;
&lt;br /&gt;
Collection of other unresolved parsing issues in a generic model:&lt;br /&gt;
&lt;br /&gt;
This is good material for documenting as [[microformats-2-issues]], [[microformats-2-faq]], and perhaps some of the more technical details in [[microformats-2-parsing-faq]].&lt;br /&gt;
&lt;br /&gt;
* The include pattern references other elements from elsewhere in a document. A generic parser needs to track IDs and fill them in after walking the DOM. (also, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; if adopted.)&lt;br /&gt;
** The current thinking per [[microformats-2-brainstorming]] is to adopt &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; and drop the [[include-pattern]]. [[User:Tantek|Tantek]]&lt;br /&gt;
* Will &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; always map to an &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; property name?&lt;br /&gt;
** No, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; maps to one or more elements by ids, and their children. Those referenced elements may have property class names themselves, or they may contain elements that do. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] implies &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; from an hCard in a page that uses an &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt; element. This requires format knowledge, but a generic parser does not currently track the element type of a property node. Should it?&lt;br /&gt;
** It should not. element-specific handling (e.g. using &amp;quot;alt&amp;quot; from img, and &amp;quot;title&amp;quot; from abbr) is completely done at parse time. The JSON data model does not reflect which element type or attribute the value came from. Additionally, [[hAtom]] is an example where we created far too many vocabulary-specific rules, in practice they're not necessary, and only complicate the microformat for both publisher understanding and parser implementation. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that the highest level heading within an entry implies &amp;lt;code&amp;gt;entry-title&amp;lt;/code&amp;gt;. This particular optimisation might be better off dead.&lt;br /&gt;
** Agreed, this is gone in microformats 2. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that permalinks be parsed from &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, not &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
** In practice this has been one of the more problematic/error prone aspects of hAtom implementations, and it's also inconsistent with other microformats (although [[hReview]] tried to use both rel permalinks and &amp;quot;url&amp;quot;). The dependence upon [[rel-bookmark]] for permalinks is dropped in h-atom in preference to re-using &amp;quot;u-url&amp;quot; and &amp;quot;u-uid&amp;quot;. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[XFN]] is entirely built on &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; (although, has various other differences from structural microformats, as do vote-links, so perhaps are excluded from this discussion and will always be handled by dedicated parsers/queries regardless?)&lt;br /&gt;
** The best (easiest and most reliable) use of 'rel' microformats in practice is when they are orthogonal to 'class' microformats. This is true both with [[XFN]] and some newer [[existing-rel-values|rel values]] like [[rel-author]]. In addition, it was very clear at the recent [[schema.org]] workshop's syntax session that RDFa's decision to apparently arbitrarily mix use of 'rel' and 'property' attributes for specifying different types of properties (it wasn't clear to people in the room when you use which for what) has caused a high degree of confusion among publishers and thus high error-rates. Thus if anything we should learn from both the mistakes of RDFa and our own experiences with even very deliberate/specific mixing of rel microformats in class microformats, and keep them defined as separate orthogonal building blocks that work together, but don't depend on each other. [[User:Tantek|Tantek]]&lt;br /&gt;
*** Relatedly to this: &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; in hAtom. --[[User:BenWard|BenWard]] 06:50, 5 October 2011 (UTC)&lt;br /&gt;
**** Yes, and two related things here. First, despite my (and others') objection and (past) interoperable post/entry-specific treatment by Technorati and Ice Rocket, Hixie has redefined rel-tag in [[HTML5]] to mean applying to the whole page, not a single post. Second, I've explicitly added 'p-category' to the draft 'h-atom' vocabulary in [[microformats-2]]. [[User:Tantek|Tantek]] 07:12, 5 October 2011 (UTC)&lt;br /&gt;
* HTML's &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; element includes an optional &amp;lt;code&amp;gt;pubdate&amp;lt;/code&amp;gt; attribute. Simply: We should parse this as &amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;. --[[User:BenWard|BenWard]] 06:12, 10 October 2011 (UTC)&lt;br /&gt;
** *If* there is even some reasonable data on actual use of the &amp;quot;pubdate&amp;quot; attribute (I don't think there is, frankly, especially with the removal of the algorithm to produce Atom from HTML5), then we could consider parsing &amp;quot;pubdate&amp;quot; as backwards compatible option for &amp;quot;dt-published&amp;quot;. As a general rule, however, it is bad (demonstrably/experienced) design to depend on additional attributes (c.f. RDFa confusion over &amp;quot;property&amp;quot; vs. &amp;quot;rel&amp;quot;), especially for an instance where no additional attribute is necessary. I would leave this out for now until there is non-trivial (more than just test pages or folks who've written HTML5 books, ahem) use in the wild. When there is such use in the wild, it should be documented on a wiki page. We don't want to encourage more complex (additional attribute) publishing as a result of supporting it. [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
* [[value-class-pattern]]: In microformats-2, since there are no sub-properties, there will presumably no-longer be a 'value' property in any parsed model. Properties such as 'tel &amp;gt; type' in hCard are, as I recall, deprecated due to underuse anyway, so 'tel &amp;gt; value' becomes redundant. (There's also potentially some clarification around 'price &amp;gt; value' in hListing, whereby value was used in a pattern. So, what does this mean for value class parsing, with regard to value-title patterns and date separation patterns. Are we looking for a 'p-value' and 'p-value-title' classname, but treating them specially (excluding them from regular property parsing.) Or, are we giving them a special prefix (v-text, v-title? That seems confusing, but could be a concept.) I'm fine with p- for both, and just having the parser ignore them since they're special, but need clarification and naming confirmation. --[[User:BenWard|BenWard]] 09:35, 10 October 2011 (UTC)&lt;br /&gt;
** A few things:&lt;br /&gt;
*** 1. Yes, no more subproperties. 'tel' becomes just 'p-tel'. If there is demand for a structured 'tel' value, then we can use that demand (and research into publishing in practice) to brainstorm and create an 'h-tel' structured telephone number (with perhaps fields like 'type', 'extension', some indication of it being local dialing (an extra 0 in some countries) or international dialing, etc.) Or, we address the different 'tel' types as their own flat properties (again as justified by research), e.g. perhaps 'p-tel-fax', or 'p-tel-mobile'. Something for hcard-2-brainstorming.&lt;br /&gt;
*** 2. For prices, e.g. hListing, either we're going to need to encode how to parse monetary amounts including monetary symbols, or consider creating an 'h-price' structured price. Not sure what the right answer is here, again, will need to be informed by analysis of documented actual price publication practices.&lt;br /&gt;
*** 3. We should avoid introducing a new prefix 'v-' just for value-class-pattern. As we've noted elsewhere, each new prefix adds complexity and should be avoided without substantial advantage.&lt;br /&gt;
*** 4. Using 'p-value-title' is strange, as it would be an exception to 'p-' parsing, since it would get the value from the 'title' attribute whereas 'p-' properties don't normally do that (exception: abbr).&lt;br /&gt;
*** 5. Using 'p-value' is also strange, as it wouldn't generate a 'value' property in the JSON data model.&lt;br /&gt;
*** 6. Class name 'value-title' is already sufficiently prefixed - we've found or even heard of no collisions in practice.&lt;br /&gt;
*** 7. Class name 'value' can, by its simpler naming nature, be expected to potentially collide with other web designer class name usage though we have no documentation/mention thereof. We could consider a renaming, or providing of alternative, such as 'value-string', or 'value-content', etc. However, let's keep that as a backup plan to use only if/when evidence is presented that we need to.&lt;br /&gt;
** Conclusions: for now, in microformats-2, keep using 'value' and 'value-title' as defined in the [[value-class-pattern]], and add the additional (obvious) interpretation that [[value-class-pattern#Date_and_time_parsing|value class pattern: date and time parsing]] applies to all 'dt-' properties. - [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== incorporated 2015-05-28 ==&lt;br /&gt;
The following brainstorms were incorporated 2015-05-28.&lt;br /&gt;
&lt;br /&gt;
== more information for alternates ==&lt;br /&gt;
Raised 2015-04-24 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
The existing &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; parsing is omitting &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; - that should be added.  The &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; would make sense to add here too.&lt;br /&gt;
&lt;br /&gt;
Use-case: labels for presenting alternates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 Makes sense. [[User:Tantek|Tantek]] 03:41, 25 April 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== more information for rel-based formats ==&lt;br /&gt;
Raised 2015-04-18 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
Related github test suite issue: https://github.com/microformats/tests/issues/16&lt;br /&gt;
&lt;br /&gt;
Several rel-based formats have additional information that is useful beyond the link itself, which is all we capture at the moment. As I am trying to update the Universal feedparser to support mf2 based I will show examples from the [https://github.com/kevinmarks/feedparser/tree/365623a9470e99246f393a8c1f49a0db567826b8/feedparser/tests/microformats testcases] there.&lt;br /&gt;
&lt;br /&gt;
The main change is to add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; entry for more information about the attributes and text of the urls pointed to by rel's in the document&lt;br /&gt;
&lt;br /&gt;
A fork of mf2py that implements these changes is at https://github.com/kevinmarks/mf2py&lt;br /&gt;
=== rel-tag ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;tag&amp;quot; href=&amp;quot;http://del.icio.us/tag/tech&amp;quot;&amp;gt;Technology&amp;lt;/a&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;tag&amp;quot;: [&amp;quot;http://del.icio.us/tag/tech&amp;quot;]}, &amp;quot;items&amp;quot;: []} &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is useful as a label. &lt;br /&gt;
&lt;br /&gt;
We add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; element to the parsed output with this extra data that can be looked up from the rels, which doesn't break backward compatibility and works better with xfn (see below)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://del.icio.us/tag/tech&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://del.icio.us/tag/tech&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Technology&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== xfn ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;coworker&amp;quot;: [&amp;quot;http://example.com/johndoe&amp;quot;]}, &amp;quot;items&amp;quot;: []}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is the person's name. Suggested output using the urls object:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with multiple xfn values &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker friend&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
we get this: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;friend&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;, &lt;br /&gt;
                &amp;quot;friend&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-enclosure ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;enclosure&amp;quot; href=&amp;quot;http://example.com/movie.mp4&amp;quot; type=&amp;quot;video/mpeg&amp;quot; title=&amp;quot;real title&amp;quot;&amp;gt;my movie&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;'{&amp;quot;rels&amp;quot;: {&amp;quot;enclosure&amp;quot;: [&amp;quot;http://example.com/movie.mp4&amp;quot;]}, &amp;quot;items&amp;quot;: []}'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text,  which is the title and the attributes which give type. Suggested output:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;enclosure&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/movie.mp4&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/movie.mp4&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;enclosure&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot;, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;video/mpeg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;real title&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This generalises to other rel's too, such as [[rel-feed]] and [[rel-alternate]] that have type, lang etc attributes.&lt;br /&gt;
&lt;br /&gt;
(updated to include changes from feedback below) [[User:Kevin Marks|Kevin Marks]] 22:13, 26 April 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== attributes parsed ===&lt;br /&gt;
Attributes currently parsed are:&lt;br /&gt;
* &amp;lt;code&amp;gt;hreflang&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
&lt;br /&gt;
Attributes we may consider parsing if we have a use case are &lt;br /&gt;
* &amp;lt;code&amp;gt;sizes&amp;lt;/code&amp;gt; for icon - need use-case documentation&lt;br /&gt;
* &amp;lt;code&amp;gt;coords&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
* &amp;lt;code&amp;gt;shape&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
&lt;br /&gt;
In addition there is a special attribute &amp;lt;s&amp;gt;&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; &amp;lt;/s&amp;gt;&amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; which is the text contents of the link, which is useful in rel-tag rel-enclosure and xfn, and in alternate when used for feeds. It's also clarifying for rel-me links. &lt;br /&gt;
&lt;br /&gt;
Tantek [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79057 suggests] we use &amp;lt;code&amp;gt;textContent&amp;lt;/code&amp;gt; for this instead, and make it a single string, not a list as &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is elsewhere in mf2 parsing&lt;br /&gt;
* Update: &amp;quot;text&amp;quot; is good enough, and &amp;quot;textContent&amp;quot; is ugly camelCase. [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== feedback on more rel info ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;name&amp;quot; is bad because it misleadingly conflates with use of &amp;quot;name&amp;quot; elsewhere in microformats2.&lt;br /&gt;
#* Suggested alternative: [https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent textContent] - since that's literally what is being returned there. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** as all other mf2 keys are lowercase-with-hyphens, [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79101 Tantek suggests] 'text' as that isn't going to be an html [[User:Kevin Marks|Kevin Marks]] 07:28, 25 April 2015 (UTC)&lt;br /&gt;
# no need for array for &amp;quot;name&amp;quot;/textContent - since there is always only one at most&lt;br /&gt;
#* E.g. should be &amp;quot;textContent&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#* Update: &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
# &amp;quot;urls&amp;quot; key is misleading - implies all URLs in the document, which is neither true, nor desired (takes much more parsing time and work and code)&lt;br /&gt;
#* Suggested alternative: &amp;quot;rel-urls&amp;quot;. And open to better alternatives too. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** If we are trying to extend the number of properties retuned from a rel without breaking the old structure why don't we call the new structure something like &amp;quot;rels-extended&amp;quot; [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#*** Extension is not the point, but rather to use them complementary. One structure for look-up of any rel value, hence &amp;quot;rels&amp;quot;, which returns you a list of URLs. Then you can lookup those URLs in the new mapping, by URL, hence it is called &amp;quot;rel-urls&amp;quot; - that's the point to use them in conjunction and that's why rel-urls is named what it is. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
# Why is the structure of  &amp;quot;rel-urls&amp;quot; different to the &amp;quot;alternates&amp;quot; structure. Should the &amp;quot;url&amp;quot; not just be added as a property and not as a key. Creating two data structures for one type of object seems inconsistent. It adds cognitive load to anyone trying to understand the JSON structure [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#* I was trying to avoid breaking the existing &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; structure and use of it - I did implement a variant that put the structure inside rels, and it became cumbersome and repetitive where there were multiple rels on a url (xfn cases). Denormalising as properties of the URL made more sense. It also dedupes if there is repetitive linking to the same URL, eg a series of posts with rel-author on each. [[User:Kevin Marks|Kevin Marks]] 20:05, 1 June 2015 (UTC)&lt;br /&gt;
# If the rel is a &amp;quot;tag&amp;quot; then the main value we need to return should be the last path component of the URL, not the link text? Should we add another output property ie &amp;quot;tag&amp;quot; [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#* No need to return last path segment of the URL, because the URL is already there - and that's just a library/framework utility function to get the last path segment of a URL. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
# As currently described, the URL from &amp;lt;code&amp;gt;alternates&amp;lt;/code&amp;gt; is repeated in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; structure. If we are doing this, surely &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; should be in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; too? I assumed a mapping between them. [[User:Kevin Marks|Kevin Marks]] 20:05, 1 June 2015 (UTC)&lt;br /&gt;
## edit showing this variant: http://microformats.org/wiki/index.php?title=microformats2-parsing&amp;amp;oldid=65021#parse_a_hyperlink_element_for_rel_microformats&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
#* Yes it makes sense to drop &amp;quot;alternates&amp;quot; assuming the backcompat impact is low, put alternates in &amp;quot;rels&amp;quot; along with everything else, and direct people to use rels and rel-urls for alternates functionality. Evidence this is an acceptable even preferable approach.[http://indiewebcamp.com/irc/2015-06-01/line/1433195247005] Will add an issue accordingly. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Incorporated 2015-06-06 ==&lt;br /&gt;
&lt;br /&gt;
== Nested h-* objects' &amp;quot;value&amp;quot; property ==&lt;br /&gt;
Status: resolved, resolution iterated, one real world implementation proven implementability, incorporated&lt;br /&gt;
* 2015-06-06 incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
Raised 2015-01-06 by [[User:Kylewm]];&lt;br /&gt;
&lt;br /&gt;
If a child element has a microformat (h-*) and is a property element (p-*, u-*, dt-*, e-*), the parser will add a &amp;quot;value&amp;quot; property to the resulting object. The value should attempt to be a useful representation of the object for consumers that do not have semantic knowledge of the particular h-* type. Ref: [[microformats2-parsing#parse_an_element_for_class_microformats]].&lt;br /&gt;
&lt;br /&gt;
To determine the &amp;quot;value&amp;quot;, we parse the property element simply (as if it did not have a h-* class), which works well for simple h-* objects, e.g. &amp;lt;code&amp;gt;&amp;lt;a class=&amp;quot;u-like-of h-cite&amp;quot; href=&amp;quot;...&amp;quot;&amp;gt;...&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* To handle more complex microformats, I propose that &amp;quot;value&amp;quot; for a p-* property element take on the first explicit &amp;quot;name&amp;quot; property of the nested microformat, and for a u-* property, the first explicit &amp;quot;url&amp;quot; property. Parsing will fall back on the current rules if an explicit property does not exist.&lt;br /&gt;
** This makes sense to me, and fits with the use-cases and examples I've seen. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** A similar (possibly simpler?) formulation would use the implied name and url rules to determine the &amp;quot;value&amp;quot; for p-* and u-* properties respectively&lt;br /&gt;
*** I don't think that's needed, as there are already implied rules on a property that should handle that. I'd start with just the &amp;quot;first explicit&amp;quot; scoping to be more conservative, and then see if we find any use-cases that (and existing implied rules) don't/doesn't catch. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
**** Agreement at [[2015-01-20]] meetup.&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;u-in-reply-to h-cite&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-author h-card&amp;quot; href=&amp;quot;http://example.com&amp;quot;&amp;gt;Example Author&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-name u-url&amp;quot; href=&amp;quot;http://example.com/post&amp;quot;&amp;gt;Example Post&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nested u-in-reply-to object would parse as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;in-reply-to&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-cite&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;Example Post&amp;quot;],&lt;br /&gt;
    &amp;quot;url&amp;quot;: [&amp;quot;http://example.com/post&amp;quot;],&lt;br /&gt;
    &amp;quot;author&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;:[&amp;quot;h-card&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://example.com&amp;quot;], &lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Example Author&amp;quot;]&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;Example Author&amp;quot;&lt;br /&gt;
    }],&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;value&amp;quot;: &amp;quot;http://example.com/post&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the outer &amp;quot;value&amp;quot; gets the in-reply-to h-cite's u-url property, and the inner &amp;quot;value&amp;quot; gets the author's p-name property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Because there are no implied properties of the dt-* and e-* types, and no obvious defaults, the value rules for these types would not change.&lt;br /&gt;
** A possibility for dt-* h-*: The dt-* could take either the first dt-* of the h-*, or (perhaps if no dt-* in the h-*,) the first &amp;lt;code&amp;gt;&amp;amp;lt;time&amp;amp;gt;&amp;lt;/code&amp;gt; element inside. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** First dt-* seems reasonable, predictable, and usable. Consensus at [[2015-01-20]] meetup.&lt;br /&gt;
** Update 2015-05-29: no known use-cases for first dt-* or first e-*, and implementing that &amp;quot;would require some refactoring&amp;quot; (in mf2py at least per kylewm), thus until there's a use-case for first dt-*/e-* inside, let's treat &amp;quot;dt-* h-*&amp;quot; and &amp;quot;e-* h-*&amp;quot; as before. [[User:Tantek|Tantek]] . In particular:&lt;br /&gt;
*** p-* h-* - value from first &amp;quot;name&amp;quot; as proposed above&lt;br /&gt;
*** u-* h-* - value from first &amp;quot;url&amp;quot; as proposed above&lt;br /&gt;
*** e-* h-* - value is already defined for e-* parsing, nothing special here&lt;br /&gt;
*** dt-* h-* - value from normal dt-* parsing - nothing special.&lt;br /&gt;
*** +1 totally agree, let's wait for use cases of e-* dt-* [[User:Kylewm|Kylewm]] 19:44, 29 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implemented in mf2py 2015-06-01 https://github.com/tommorris/mf2py/commit/edc895ef5a780bcee654e6644a688688934517b0&lt;br /&gt;
* Added to microformats test suite (experimental) 2015-06-01 https://github.com/microformats/tests/commit/90c8a7d8e96c7160036a298e13f16d9ddaec218e&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-brainstorming]]&lt;br /&gt;
* [[microformats2-prefixes]]&lt;br /&gt;
* [[microformats2-faq]]&lt;br /&gt;
* [[microformats2-issues]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65502</id>
		<title>microformats2-parsing-brainstorming</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65502"/>
		<updated>2016-05-07T16:57:57Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Pronouns */ discussion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing brainstorming&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is for brainstorming, discussion, and other questions and explorations about [[microformats2]] parsing.&lt;br /&gt;
&lt;br /&gt;
For the microformats2 parsing algorithm, see:&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
For filing issues / problems with microformats2-parsing, see:&lt;br /&gt;
* [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Parse language information ==&lt;br /&gt;
Raised by [[User:VoxPelli|VoxPelli]] 18:04, 23 July 2015 (UTC)&lt;br /&gt;
* 2016-060: Update: and parse &amp;quot;id&amp;quot; attribute. [[User:Tantek|Tantek]] 16:39, 29 February 2016 (UTC) (see Additionally below)&lt;br /&gt;
&lt;br /&gt;
Currently there’s no way to tell the language of parsed microformats even if those microformats has been marked up with HTML &amp;quot;lang&amp;quot;-attributes.&lt;br /&gt;
&lt;br /&gt;
There are examples in the wild of people marking up pages in such a way:&lt;br /&gt;
&lt;br /&gt;
* [http://voxpelli.com/ VoxPelli.com] has a &amp;quot;lang&amp;quot;-attribute on the h-entry of his [http://voxpelli.com/2011/03/sista-dagen-p-good-old/ swedish articles] to signify that the article is swedish even though the rest of the site is english.&lt;br /&gt;
* Stephanie [http://climbtothestars.org/archives/2013/09/17/basic-bilingual-1-0-plugin-for-wordpress-blog-in-more-than-one-language/ uses a WordPress plugin] that adds summaries of other languages at the start of her content.&lt;br /&gt;
&lt;br /&gt;
Proposal is to add a new &amp;quot;lang&amp;quot; keyword to h-* and e-* objects so that the following example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot; lang=&amp;quot;sv&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;En svensk titel&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-content&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;With an &amp;lt;em&amp;gt;english&amp;lt;/em&amp;gt; summary&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-content&amp;quot;&amp;gt;Och &amp;lt;em&amp;gt;svensk&amp;lt;/em&amp;gt; huvudtext&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would be parsed into something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;,&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;En svensk titel&amp;quot;],&lt;br /&gt;
    &amp;quot;content&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;,&lt;br /&gt;
        &amp;quot;html&amp;quot;: &amp;quot;With an &amp;lt;em&amp;gt;english&amp;lt;/em&amp;gt; summary&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;With an english summary&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;html&amp;quot;: &amp;quot;Och &amp;lt;em&amp;gt;svensk&amp;lt;/em&amp;gt; huvudtext&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Och svensk huvudtext&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This was [http://indiewebcamp.com/irc/2015-07-23#t1437667712078 brainstormed on the IndieWebCamp IRC-channel] where the mentioned example came up.&lt;br /&gt;
&lt;br /&gt;
* Pull request for implementation in microformat-node added 2015-07-23 https://github.com/glennjones/microformat-node/pull/23&lt;br /&gt;
&lt;br /&gt;
Additionally: consider the same for &amp;quot;id&amp;quot; attributes (use-case: rel=feed local discovery of a nested h-feed on the home page), specifically, parsing the first instance of any &amp;quot;id&amp;quot; attribute (ignoring latter duplicate id attribute values on any subsequent elements).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And alternatively: consider parsing as &amp;quot;html-id&amp;quot; and &amp;quot;html-lang&amp;quot; prefixed properties in the parsed result, e.g.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot; lang=&amp;quot;sv&amp;quot; id=&amp;quot;postfrag123&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;En svensk titel&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-content&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;With an &amp;lt;em&amp;gt;english&amp;lt;/em&amp;gt; summary&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-content&amp;quot;&amp;gt;Och &amp;lt;em&amp;gt;svensk&amp;lt;/em&amp;gt; huvudtext&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would be parsed into something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;html-id&amp;quot;: &amp;quot;postfrag123&amp;quot;,&lt;br /&gt;
  &amp;quot;html-lang&amp;quot;: &amp;quot;sv&amp;quot;,&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;En svensk titel&amp;quot;],&lt;br /&gt;
    &amp;quot;content&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;html-lang&amp;quot;: &amp;quot;en&amp;quot;,&lt;br /&gt;
        &amp;quot;html&amp;quot;: &amp;quot;With an &amp;lt;em&amp;gt;english&amp;lt;/em&amp;gt; summary&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;With an english summary&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;html&amp;quot;: &amp;quot;Och &amp;lt;em&amp;gt;svensk&amp;lt;/em&amp;gt; huvudtext&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Och svensk huvudtext&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pronouns in different languages ===&lt;br /&gt;
&lt;br /&gt;
Language is also useful context when defining [[pronouns]], discussed a bit here[https://github.com/idno/Known/pull/1426#issuecomment-217626923].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-x-pronoun-nominative&amp;quot;&amp;gt;he&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-x-pronoun-possessive&amp;quot;&amp;gt;him&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-x-pronoun-oblique&amp;quot;&amp;gt;his&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would parse as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;,&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;x-pronoun-nominative&amp;quot;: [&amp;quot;he&amp;quot;],&lt;br /&gt;
    &amp;quot;x-pronoun-possessive&amp;quot;: [&amp;quot;him&amp;quot;],&lt;br /&gt;
    &amp;quot;x-pronoun-oblique&amp;quot;: [&amp;quot;his&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It could also be useful to specify multiple languages within a single h-card (pardon me if I butcher Swedish pronouns)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;en&amp;quot; class=&amp;quot;p-x-pronoun-nominative&amp;quot;&amp;gt;he&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;en&amp;quot; class=&amp;quot;p-x-pronoun-possessive&amp;quot;&amp;gt;him&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;en&amp;quot; class=&amp;quot;p-x-pronoun-oblique&amp;quot;&amp;gt;his&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;sv&amp;quot; class=&amp;quot;p-x-pronoun-nominative&amp;quot;&amp;gt;han&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;sv&amp;quot; class=&amp;quot;p-x-pronoun-possessive&amp;quot;&amp;gt;hans&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;sv&amp;quot; class=&amp;quot;p-x-pronoun-oblique&amp;quot;&amp;gt;honom&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which might parse as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;x-pronoun-nominative&amp;quot;: [{&amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;he&amp;quot;}, {&amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;han&amp;quot;}],&lt;br /&gt;
    &amp;quot;x-pronoun-possessive&amp;quot;: [{&amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;him&amp;quot;}, {&amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;hans&amp;quot;}],&lt;br /&gt;
    &amp;quot;x-pronoun-oblique&amp;quot;: [{&amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;his&amp;quot;}, {&amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;honom&amp;quot;}]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or alternatively, we could introduce a new microformat h-x-pronoun to wrap a set of pronouns&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-x-pronoun h-x-pronoun&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-nominative&amp;quot;&amp;gt;he&amp;lt;/span&amp;gt; /&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-possessive&amp;quot;&amp;gt;him&amp;lt;/span&amp;gt; /&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-oblique&amp;quot;&amp;gt;his&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-x-pronoun h-x-pronoun&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-nominative&amp;quot;&amp;gt;han&amp;lt;/span&amp;gt; /&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-possessive&amp;quot;&amp;gt;hans&amp;lt;/span&amp;gt; /&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-oblique&amp;quot;&amp;gt;honom&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
parsed as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;x-pronoun&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-x-pronoun&amp;quot;],&lt;br /&gt;
      &amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;nominative&amp;quot;: [&amp;quot;he&amp;quot;],&lt;br /&gt;
        &amp;quot;possessive&amp;quot;: [&amp;quot;him&amp;quot;],&lt;br /&gt;
        &amp;quot;oblique&amp;quot;: [&amp;quot;his&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    }, {&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-x-pronoun&amp;quot;],&lt;br /&gt;
      &amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;nominative&amp;quot;: [&amp;quot;han&amp;quot;],&lt;br /&gt;
        &amp;quot;possessive&amp;quot;: [&amp;quot;hans&amp;quot;],&lt;br /&gt;
        &amp;quot;oblique&amp;quot;: [&amp;quot;honom&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    }]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Discussion:&lt;br /&gt;
* [[User:Kylewm|Kylewm]] Including the &amp;quot;lang&amp;quot; attribute in h- and e- properties makes a ton of sense to me.&lt;br /&gt;
* [[User:Kylewm|Kylewm]] I like the idea of introducing an h-x-pronoun container that can define all the different pronoun forms for a particular language&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Canonicalization of datetime output ==&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
It would be useful to choose a (more) uniform output format for datetimes to make it easier for users of the parser to consume datetimes. Microformats2 parsers already do sophisticated pattern matching to recognize date vs. time vs. datetimes, so converting this to any specific format should not add overhead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Specifically: &lt;br /&gt;
* Choose either 'T' or space as the date/time separator.&lt;br /&gt;
** Prefer space as it is more human friendly/readable, which matters even for syntaxes/formats, as human still develop, debug them. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* Choose either +XXYY or +XX:YY as the timezone specification (and convert 'Z' to +0000).&lt;br /&gt;
** Would appreciate some study / input here as to which timezone offset syntax is more human friendly. I lean slightly toward +/-NNNN (without the colon) because in the context of seeing a time, leaving out the colon makes it less likely the offset will be confused for a time. E.g. &amp;quot;07:00-08:00&amp;quot; looks like 7-8am, even if it meant 07:00 in PST. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** Space is fine - consensus [[2015-01-20]] meetup.&lt;br /&gt;
* Parsers should ''not'' attempt make datetimes more exact than specified. They should not add time, seconds, or timezone if omitted in the original. [[User:Kylewm|Kylewm]] 04:02, 14 May 2014 (UTC)&lt;br /&gt;
** Agreed. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** or month, day per Tom Morris&lt;br /&gt;
** consensus [[2015-01-20]] meetup&lt;br /&gt;
&lt;br /&gt;
* Counterpoint: PHP's builtin date parsing does not require strict formatting. And the equivalent functionality for Python is provided by the widely used python-dateutil library. [[User:Kylewm|Kylewm]] 19:02, 14 May 2014 (UTC)&lt;br /&gt;
** However we cannot (must not) depend on either PHP or Python's &amp;quot;smart&amp;quot; &amp;quot;fixing&amp;quot; or Postelian &amp;quot;liberal handling&amp;quot;, or any other language/framework's for that matter, as they all differ in how &amp;quot;intelligent&amp;quot; they are. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perhaps just provide a guideline for these based on the above consensus.&lt;br /&gt;
&lt;br /&gt;
== Add meta http-equiv to microformats2 parsing model ==&lt;br /&gt;
Status: disagreement, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
Similar to document level parsing of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, it makes sense simultaneously to parse &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv&amp;amp;gt;&amp;lt;/code&amp;gt; elements, perhaps treating &amp;quot;Status&amp;quot; in a special way (only using first number (sequence of digits) for its &amp;quot;value&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Use case: IndieWeb &amp;quot;deleted&amp;quot; indication inline in content for static file services that don't support HTTP return codes.&lt;br /&gt;
* http://indiewebcamp.com/deleted#HTML_meta_http-equiv_for_status&lt;br /&gt;
&lt;br /&gt;
HTTP Header example:&lt;br /&gt;
* &amp;lt;samp&amp;gt;Content-Type: text/html; charset=utf-8&amp;lt;/samp&amp;gt;&lt;br /&gt;
HTML equivalent: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Related:&lt;br /&gt;
* https://www.w3.org/International/O-HTTP-charset&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Interesting thought. Are you suggesting a top level &amp;quot;http-equivs:&amp;quot; collection similar to &amp;quot;rels:&amp;quot; in the parsed output? Should we consider &amp;quot;metas:&amp;quot; instead or in addition? [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* What's the use case for this? Also, http-equiv on its own is useless. http-equiv is only a supplement to the data stored in headers. And headers aren't always there: what happens in the context of someone debugging a page who pastes the source into the textarea of an mf2 parser? Without a compelling use case for including headers (and then over-riding some of them with http-equivs), I'm not sure why an implementor want to do this. —[[User:TomMorris|Tom Morris]] 00:25, 8 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g. from https://gist.github.com/aaronpk/10297489&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Status&amp;quot; content=&amp;quot;410 GONE&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [],&lt;br /&gt;
 &amp;quot;rels&amp;quot;: {},&lt;br /&gt;
 &amp;quot;http&amp;quot;: {&lt;br /&gt;
 &amp;quot;status&amp;quot;: 410&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Maybe make this an optional pass in the parser? - Tom Morris [[2015-01-20]]&lt;br /&gt;
* For now, don't bother with metas until someone provides a use-case. Tom Morris&lt;br /&gt;
* Agreed on both counts. [[User:Tantek|Tantek]] 06:56, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MIME type==&lt;br /&gt;
See [[microformats2-mime-type]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Other Interpretation Parsing Notes==&lt;br /&gt;
Note: most of these need to be written up as separate [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
Author: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
[[microformats-2|Microformats 2]] proposes a new, all encompassing syntax modification of [[microformats-2-prefixes|prefixes]] that will allow microformats to be parsed from pages by processors without prior knowledge of a vocabulary. The core components of this model are quite simple, are quite simple to implement, but there are a number of conflicts that emerge with the functionality of existing microformats parsers that need to be handled. This page documents a proposed model to separate these concerns clearly in a way that can be applied to the documentation of generic microformats parsing rules, and the documentation of individual vocabularies.&lt;br /&gt;
&lt;br /&gt;
Collection of other unresolved parsing issues in a generic model:&lt;br /&gt;
&lt;br /&gt;
This is good material for documenting as [[microformats-2-issues]], [[microformats-2-faq]], and perhaps some of the more technical details in [[microformats-2-parsing-faq]].&lt;br /&gt;
&lt;br /&gt;
* The include pattern references other elements from elsewhere in a document. A generic parser needs to track IDs and fill them in after walking the DOM. (also, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; if adopted.)&lt;br /&gt;
** The current thinking per [[microformats-2-brainstorming]] is to adopt &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; and drop the [[include-pattern]]. [[User:Tantek|Tantek]]&lt;br /&gt;
* Will &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; always map to an &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; property name?&lt;br /&gt;
** No, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; maps to one or more elements by ids, and their children. Those referenced elements may have property class names themselves, or they may contain elements that do. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] implies &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; from an hCard in a page that uses an &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt; element. This requires format knowledge, but a generic parser does not currently track the element type of a property node. Should it?&lt;br /&gt;
** It should not. element-specific handling (e.g. using &amp;quot;alt&amp;quot; from img, and &amp;quot;title&amp;quot; from abbr) is completely done at parse time. The JSON data model does not reflect which element type or attribute the value came from. Additionally, [[hAtom]] is an example where we created far too many vocabulary-specific rules, in practice they're not necessary, and only complicate the microformat for both publisher understanding and parser implementation. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that the highest level heading within an entry implies &amp;lt;code&amp;gt;entry-title&amp;lt;/code&amp;gt;. This particular optimisation might be better off dead.&lt;br /&gt;
** Agreed, this is gone in microformats 2. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that permalinks be parsed from &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, not &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
** In practice this has been one of the more problematic/error prone aspects of hAtom implementations, and it's also inconsistent with other microformats (although [[hReview]] tried to use both rel permalinks and &amp;quot;url&amp;quot;). The dependence upon [[rel-bookmark]] for permalinks is dropped in h-atom in preference to re-using &amp;quot;u-url&amp;quot; and &amp;quot;u-uid&amp;quot;. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[XFN]] is entirely built on &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; (although, has various other differences from structural microformats, as do vote-links, so perhaps are excluded from this discussion and will always be handled by dedicated parsers/queries regardless?)&lt;br /&gt;
** The best (easiest and most reliable) use of 'rel' microformats in practice is when they are orthogonal to 'class' microformats. This is true both with [[XFN]] and some newer [[existing-rel-values|rel values]] like [[rel-author]]. In addition, it was very clear at the recent [[schema.org]] workshop's syntax session that RDFa's decision to apparently arbitrarily mix use of 'rel' and 'property' attributes for specifying different types of properties (it wasn't clear to people in the room when you use which for what) has caused a high degree of confusion among publishers and thus high error-rates. Thus if anything we should learn from both the mistakes of RDFa and our own experiences with even very deliberate/specific mixing of rel microformats in class microformats, and keep them defined as separate orthogonal building blocks that work together, but don't depend on each other. [[User:Tantek|Tantek]]&lt;br /&gt;
*** Relatedly to this: &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; in hAtom. --[[User:BenWard|BenWard]] 06:50, 5 October 2011 (UTC)&lt;br /&gt;
**** Yes, and two related things here. First, despite my (and others') objection and (past) interoperable post/entry-specific treatment by Technorati and Ice Rocket, Hixie has redefined rel-tag in [[HTML5]] to mean applying to the whole page, not a single post. Second, I've explicitly added 'p-category' to the draft 'h-atom' vocabulary in [[microformats-2]]. [[User:Tantek|Tantek]] 07:12, 5 October 2011 (UTC)&lt;br /&gt;
* HTML's &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; element includes an optional &amp;lt;code&amp;gt;pubdate&amp;lt;/code&amp;gt; attribute. Simply: We should parse this as &amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;. --[[User:BenWard|BenWard]] 06:12, 10 October 2011 (UTC)&lt;br /&gt;
** *If* there is even some reasonable data on actual use of the &amp;quot;pubdate&amp;quot; attribute (I don't think there is, frankly, especially with the removal of the algorithm to produce Atom from HTML5), then we could consider parsing &amp;quot;pubdate&amp;quot; as backwards compatible option for &amp;quot;dt-published&amp;quot;. As a general rule, however, it is bad (demonstrably/experienced) design to depend on additional attributes (c.f. RDFa confusion over &amp;quot;property&amp;quot; vs. &amp;quot;rel&amp;quot;), especially for an instance where no additional attribute is necessary. I would leave this out for now until there is non-trivial (more than just test pages or folks who've written HTML5 books, ahem) use in the wild. When there is such use in the wild, it should be documented on a wiki page. We don't want to encourage more complex (additional attribute) publishing as a result of supporting it. [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
* [[value-class-pattern]]: In microformats-2, since there are no sub-properties, there will presumably no-longer be a 'value' property in any parsed model. Properties such as 'tel &amp;gt; type' in hCard are, as I recall, deprecated due to underuse anyway, so 'tel &amp;gt; value' becomes redundant. (There's also potentially some clarification around 'price &amp;gt; value' in hListing, whereby value was used in a pattern. So, what does this mean for value class parsing, with regard to value-title patterns and date separation patterns. Are we looking for a 'p-value' and 'p-value-title' classname, but treating them specially (excluding them from regular property parsing.) Or, are we giving them a special prefix (v-text, v-title? That seems confusing, but could be a concept.) I'm fine with p- for both, and just having the parser ignore them since they're special, but need clarification and naming confirmation. --[[User:BenWard|BenWard]] 09:35, 10 October 2011 (UTC)&lt;br /&gt;
** A few things:&lt;br /&gt;
*** 1. Yes, no more subproperties. 'tel' becomes just 'p-tel'. If there is demand for a structured 'tel' value, then we can use that demand (and research into publishing in practice) to brainstorm and create an 'h-tel' structured telephone number (with perhaps fields like 'type', 'extension', some indication of it being local dialing (an extra 0 in some countries) or international dialing, etc.) Or, we address the different 'tel' types as their own flat properties (again as justified by research), e.g. perhaps 'p-tel-fax', or 'p-tel-mobile'. Something for hcard-2-brainstorming.&lt;br /&gt;
*** 2. For prices, e.g. hListing, either we're going to need to encode how to parse monetary amounts including monetary symbols, or consider creating an 'h-price' structured price. Not sure what the right answer is here, again, will need to be informed by analysis of documented actual price publication practices.&lt;br /&gt;
*** 3. We should avoid introducing a new prefix 'v-' just for value-class-pattern. As we've noted elsewhere, each new prefix adds complexity and should be avoided without substantial advantage.&lt;br /&gt;
*** 4. Using 'p-value-title' is strange, as it would be an exception to 'p-' parsing, since it would get the value from the 'title' attribute whereas 'p-' properties don't normally do that (exception: abbr).&lt;br /&gt;
*** 5. Using 'p-value' is also strange, as it wouldn't generate a 'value' property in the JSON data model.&lt;br /&gt;
*** 6. Class name 'value-title' is already sufficiently prefixed - we've found or even heard of no collisions in practice.&lt;br /&gt;
*** 7. Class name 'value' can, by its simpler naming nature, be expected to potentially collide with other web designer class name usage though we have no documentation/mention thereof. We could consider a renaming, or providing of alternative, such as 'value-string', or 'value-content', etc. However, let's keep that as a backup plan to use only if/when evidence is presented that we need to.&lt;br /&gt;
** Conclusions: for now, in microformats-2, keep using 'value' and 'value-title' as defined in the [[value-class-pattern]], and add the additional (obvious) interpretation that [[value-class-pattern#Date_and_time_parsing|value class pattern: date and time parsing]] applies to all 'dt-' properties. - [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== incorporated 2015-05-28 ==&lt;br /&gt;
The following brainstorms were incorporated 2015-05-28.&lt;br /&gt;
&lt;br /&gt;
== more information for alternates ==&lt;br /&gt;
Raised 2015-04-24 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
The existing &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; parsing is omitting &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; - that should be added.  The &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; would make sense to add here too.&lt;br /&gt;
&lt;br /&gt;
Use-case: labels for presenting alternates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 Makes sense. [[User:Tantek|Tantek]] 03:41, 25 April 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== more information for rel-based formats ==&lt;br /&gt;
Raised 2015-04-18 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
Related github test suite issue: https://github.com/microformats/tests/issues/16&lt;br /&gt;
&lt;br /&gt;
Several rel-based formats have additional information that is useful beyond the link itself, which is all we capture at the moment. As I am trying to update the Universal feedparser to support mf2 based I will show examples from the [https://github.com/kevinmarks/feedparser/tree/365623a9470e99246f393a8c1f49a0db567826b8/feedparser/tests/microformats testcases] there.&lt;br /&gt;
&lt;br /&gt;
The main change is to add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; entry for more information about the attributes and text of the urls pointed to by rel's in the document&lt;br /&gt;
&lt;br /&gt;
A fork of mf2py that implements these changes is at https://github.com/kevinmarks/mf2py&lt;br /&gt;
=== rel-tag ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;tag&amp;quot; href=&amp;quot;http://del.icio.us/tag/tech&amp;quot;&amp;gt;Technology&amp;lt;/a&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;tag&amp;quot;: [&amp;quot;http://del.icio.us/tag/tech&amp;quot;]}, &amp;quot;items&amp;quot;: []} &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is useful as a label. &lt;br /&gt;
&lt;br /&gt;
We add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; element to the parsed output with this extra data that can be looked up from the rels, which doesn't break backward compatibility and works better with xfn (see below)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://del.icio.us/tag/tech&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://del.icio.us/tag/tech&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Technology&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== xfn ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;coworker&amp;quot;: [&amp;quot;http://example.com/johndoe&amp;quot;]}, &amp;quot;items&amp;quot;: []}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is the person's name. Suggested output using the urls object:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with multiple xfn values &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker friend&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
we get this: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;friend&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;, &lt;br /&gt;
                &amp;quot;friend&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-enclosure ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;enclosure&amp;quot; href=&amp;quot;http://example.com/movie.mp4&amp;quot; type=&amp;quot;video/mpeg&amp;quot; title=&amp;quot;real title&amp;quot;&amp;gt;my movie&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;'{&amp;quot;rels&amp;quot;: {&amp;quot;enclosure&amp;quot;: [&amp;quot;http://example.com/movie.mp4&amp;quot;]}, &amp;quot;items&amp;quot;: []}'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text,  which is the title and the attributes which give type. Suggested output:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;enclosure&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/movie.mp4&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/movie.mp4&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;enclosure&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot;, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;video/mpeg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;real title&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This generalises to other rel's too, such as [[rel-feed]] and [[rel-alternate]] that have type, lang etc attributes.&lt;br /&gt;
&lt;br /&gt;
(updated to include changes from feedback below) [[User:Kevin Marks|Kevin Marks]] 22:13, 26 April 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== attributes parsed ===&lt;br /&gt;
Attributes currently parsed are:&lt;br /&gt;
* &amp;lt;code&amp;gt;hreflang&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
&lt;br /&gt;
Attributes we may consider parsing if we have a use case are &lt;br /&gt;
* &amp;lt;code&amp;gt;sizes&amp;lt;/code&amp;gt; for icon - need use-case documentation&lt;br /&gt;
* &amp;lt;code&amp;gt;coords&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
* &amp;lt;code&amp;gt;shape&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
&lt;br /&gt;
In addition there is a special attribute &amp;lt;s&amp;gt;&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; &amp;lt;/s&amp;gt;&amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; which is the text contents of the link, which is useful in rel-tag rel-enclosure and xfn, and in alternate when used for feeds. It's also clarifying for rel-me links. &lt;br /&gt;
&lt;br /&gt;
Tantek [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79057 suggests] we use &amp;lt;code&amp;gt;textContent&amp;lt;/code&amp;gt; for this instead, and make it a single string, not a list as &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is elsewhere in mf2 parsing&lt;br /&gt;
* Update: &amp;quot;text&amp;quot; is good enough, and &amp;quot;textContent&amp;quot; is ugly camelCase. [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== feedback on more rel info ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;name&amp;quot; is bad because it misleadingly conflates with use of &amp;quot;name&amp;quot; elsewhere in microformats2.&lt;br /&gt;
#* Suggested alternative: [https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent textContent] - since that's literally what is being returned there. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** as all other mf2 keys are lowercase-with-hyphens, [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79101 Tantek suggests] 'text' as that isn't going to be an html [[User:Kevin Marks|Kevin Marks]] 07:28, 25 April 2015 (UTC)&lt;br /&gt;
# no need for array for &amp;quot;name&amp;quot;/textContent - since there is always only one at most&lt;br /&gt;
#* E.g. should be &amp;quot;textContent&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#* Update: &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
# &amp;quot;urls&amp;quot; key is misleading - implies all URLs in the document, which is neither true, nor desired (takes much more parsing time and work and code)&lt;br /&gt;
#* Suggested alternative: &amp;quot;rel-urls&amp;quot;. And open to better alternatives too. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** If we are trying to extend the number of properties retuned from a rel without breaking the old structure why don't we call the new structure something like &amp;quot;rels-extended&amp;quot; [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#*** Extension is not the point, but rather to use them complementary. One structure for look-up of any rel value, hence &amp;quot;rels&amp;quot;, which returns you a list of URLs. Then you can lookup those URLs in the new mapping, by URL, hence it is called &amp;quot;rel-urls&amp;quot; - that's the point to use them in conjunction and that's why rel-urls is named what it is. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
# Why is the structure of  &amp;quot;rel-urls&amp;quot; different to the &amp;quot;alternates&amp;quot; structure. Should the &amp;quot;url&amp;quot; not just be added as a property and not as a key. Creating two data structures for one type of object seems inconsistent. It adds cognitive load to anyone trying to understand the JSON structure [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#* I was trying to avoid breaking the existing &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; structure and use of it - I did implement a variant that put the structure inside rels, and it became cumbersome and repetitive where there were multiple rels on a url (xfn cases). Denormalising as properties of the URL made more sense. It also dedupes if there is repetitive linking to the same URL, eg a series of posts with rel-author on each. [[User:Kevin Marks|Kevin Marks]] 20:05, 1 June 2015 (UTC)&lt;br /&gt;
# If the rel is a &amp;quot;tag&amp;quot; then the main value we need to return should be the last path component of the URL, not the link text? Should we add another output property ie &amp;quot;tag&amp;quot; [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#* No need to return last path segment of the URL, because the URL is already there - and that's just a library/framework utility function to get the last path segment of a URL. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
# As currently described, the URL from &amp;lt;code&amp;gt;alternates&amp;lt;/code&amp;gt; is repeated in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; structure. If we are doing this, surely &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; should be in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; too? I assumed a mapping between them. [[User:Kevin Marks|Kevin Marks]] 20:05, 1 June 2015 (UTC)&lt;br /&gt;
## edit showing this variant: http://microformats.org/wiki/index.php?title=microformats2-parsing&amp;amp;oldid=65021#parse_a_hyperlink_element_for_rel_microformats&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
#* Yes it makes sense to drop &amp;quot;alternates&amp;quot; assuming the backcompat impact is low, put alternates in &amp;quot;rels&amp;quot; along with everything else, and direct people to use rels and rel-urls for alternates functionality. Evidence this is an acceptable even preferable approach.[http://indiewebcamp.com/irc/2015-06-01/line/1433195247005] Will add an issue accordingly. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Incorporated 2015-06-06 ==&lt;br /&gt;
&lt;br /&gt;
== Nested h-* objects' &amp;quot;value&amp;quot; property ==&lt;br /&gt;
Status: resolved, resolution iterated, one real world implementation proven implementability, incorporated&lt;br /&gt;
* 2015-06-06 incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
Raised 2015-01-06 by [[User:Kylewm]];&lt;br /&gt;
&lt;br /&gt;
If a child element has a microformat (h-*) and is a property element (p-*, u-*, dt-*, e-*), the parser will add a &amp;quot;value&amp;quot; property to the resulting object. The value should attempt to be a useful representation of the object for consumers that do not have semantic knowledge of the particular h-* type. Ref: [[microformats2-parsing#parse_an_element_for_class_microformats]].&lt;br /&gt;
&lt;br /&gt;
To determine the &amp;quot;value&amp;quot;, we parse the property element simply (as if it did not have a h-* class), which works well for simple h-* objects, e.g. &amp;lt;code&amp;gt;&amp;lt;a class=&amp;quot;u-like-of h-cite&amp;quot; href=&amp;quot;...&amp;quot;&amp;gt;...&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* To handle more complex microformats, I propose that &amp;quot;value&amp;quot; for a p-* property element take on the first explicit &amp;quot;name&amp;quot; property of the nested microformat, and for a u-* property, the first explicit &amp;quot;url&amp;quot; property. Parsing will fall back on the current rules if an explicit property does not exist.&lt;br /&gt;
** This makes sense to me, and fits with the use-cases and examples I've seen. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** A similar (possibly simpler?) formulation would use the implied name and url rules to determine the &amp;quot;value&amp;quot; for p-* and u-* properties respectively&lt;br /&gt;
*** I don't think that's needed, as there are already implied rules on a property that should handle that. I'd start with just the &amp;quot;first explicit&amp;quot; scoping to be more conservative, and then see if we find any use-cases that (and existing implied rules) don't/doesn't catch. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
**** Agreement at [[2015-01-20]] meetup.&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;u-in-reply-to h-cite&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-author h-card&amp;quot; href=&amp;quot;http://example.com&amp;quot;&amp;gt;Example Author&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-name u-url&amp;quot; href=&amp;quot;http://example.com/post&amp;quot;&amp;gt;Example Post&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nested u-in-reply-to object would parse as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;in-reply-to&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-cite&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;Example Post&amp;quot;],&lt;br /&gt;
    &amp;quot;url&amp;quot;: [&amp;quot;http://example.com/post&amp;quot;],&lt;br /&gt;
    &amp;quot;author&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;:[&amp;quot;h-card&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://example.com&amp;quot;], &lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Example Author&amp;quot;]&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;Example Author&amp;quot;&lt;br /&gt;
    }],&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;value&amp;quot;: &amp;quot;http://example.com/post&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the outer &amp;quot;value&amp;quot; gets the in-reply-to h-cite's u-url property, and the inner &amp;quot;value&amp;quot; gets the author's p-name property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Because there are no implied properties of the dt-* and e-* types, and no obvious defaults, the value rules for these types would not change.&lt;br /&gt;
** A possibility for dt-* h-*: The dt-* could take either the first dt-* of the h-*, or (perhaps if no dt-* in the h-*,) the first &amp;lt;code&amp;gt;&amp;amp;lt;time&amp;amp;gt;&amp;lt;/code&amp;gt; element inside. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** First dt-* seems reasonable, predictable, and usable. Consensus at [[2015-01-20]] meetup.&lt;br /&gt;
** Update 2015-05-29: no known use-cases for first dt-* or first e-*, and implementing that &amp;quot;would require some refactoring&amp;quot; (in mf2py at least per kylewm), thus until there's a use-case for first dt-*/e-* inside, let's treat &amp;quot;dt-* h-*&amp;quot; and &amp;quot;e-* h-*&amp;quot; as before. [[User:Tantek|Tantek]] . In particular:&lt;br /&gt;
*** p-* h-* - value from first &amp;quot;name&amp;quot; as proposed above&lt;br /&gt;
*** u-* h-* - value from first &amp;quot;url&amp;quot; as proposed above&lt;br /&gt;
*** e-* h-* - value is already defined for e-* parsing, nothing special here&lt;br /&gt;
*** dt-* h-* - value from normal dt-* parsing - nothing special.&lt;br /&gt;
*** +1 totally agree, let's wait for use cases of e-* dt-* [[User:Kylewm|Kylewm]] 19:44, 29 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implemented in mf2py 2015-06-01 https://github.com/tommorris/mf2py/commit/edc895ef5a780bcee654e6644a688688934517b0&lt;br /&gt;
* Added to microformats test suite (experimental) 2015-06-01 https://github.com/microformats/tests/commit/90c8a7d8e96c7160036a298e13f16d9ddaec218e&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-brainstorming]]&lt;br /&gt;
* [[microformats2-prefixes]]&lt;br /&gt;
* [[microformats2-faq]]&lt;br /&gt;
* [[microformats2-issues]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65501</id>
		<title>microformats2-parsing-brainstorming</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65501"/>
		<updated>2016-05-07T16:54:19Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Parse language information */ add section brainstorming possible markup for i8n pronouns&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing brainstorming&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is for brainstorming, discussion, and other questions and explorations about [[microformats2]] parsing.&lt;br /&gt;
&lt;br /&gt;
For the microformats2 parsing algorithm, see:&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
For filing issues / problems with microformats2-parsing, see:&lt;br /&gt;
* [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Parse language information ==&lt;br /&gt;
Raised by [[User:VoxPelli|VoxPelli]] 18:04, 23 July 2015 (UTC)&lt;br /&gt;
* 2016-060: Update: and parse &amp;quot;id&amp;quot; attribute. [[User:Tantek|Tantek]] 16:39, 29 February 2016 (UTC) (see Additionally below)&lt;br /&gt;
&lt;br /&gt;
Currently there’s no way to tell the language of parsed microformats even if those microformats has been marked up with HTML &amp;quot;lang&amp;quot;-attributes.&lt;br /&gt;
&lt;br /&gt;
There are examples in the wild of people marking up pages in such a way:&lt;br /&gt;
&lt;br /&gt;
* [http://voxpelli.com/ VoxPelli.com] has a &amp;quot;lang&amp;quot;-attribute on the h-entry of his [http://voxpelli.com/2011/03/sista-dagen-p-good-old/ swedish articles] to signify that the article is swedish even though the rest of the site is english.&lt;br /&gt;
* Stephanie [http://climbtothestars.org/archives/2013/09/17/basic-bilingual-1-0-plugin-for-wordpress-blog-in-more-than-one-language/ uses a WordPress plugin] that adds summaries of other languages at the start of her content.&lt;br /&gt;
&lt;br /&gt;
Proposal is to add a new &amp;quot;lang&amp;quot; keyword to h-* and e-* objects so that the following example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot; lang=&amp;quot;sv&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;En svensk titel&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-content&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;With an &amp;lt;em&amp;gt;english&amp;lt;/em&amp;gt; summary&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-content&amp;quot;&amp;gt;Och &amp;lt;em&amp;gt;svensk&amp;lt;/em&amp;gt; huvudtext&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would be parsed into something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;,&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;En svensk titel&amp;quot;],&lt;br /&gt;
    &amp;quot;content&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;,&lt;br /&gt;
        &amp;quot;html&amp;quot;: &amp;quot;With an &amp;lt;em&amp;gt;english&amp;lt;/em&amp;gt; summary&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;With an english summary&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;html&amp;quot;: &amp;quot;Och &amp;lt;em&amp;gt;svensk&amp;lt;/em&amp;gt; huvudtext&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Och svensk huvudtext&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This was [http://indiewebcamp.com/irc/2015-07-23#t1437667712078 brainstormed on the IndieWebCamp IRC-channel] where the mentioned example came up.&lt;br /&gt;
&lt;br /&gt;
* Pull request for implementation in microformat-node added 2015-07-23 https://github.com/glennjones/microformat-node/pull/23&lt;br /&gt;
&lt;br /&gt;
Additionally: consider the same for &amp;quot;id&amp;quot; attributes (use-case: rel=feed local discovery of a nested h-feed on the home page), specifically, parsing the first instance of any &amp;quot;id&amp;quot; attribute (ignoring latter duplicate id attribute values on any subsequent elements).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And alternatively: consider parsing as &amp;quot;html-id&amp;quot; and &amp;quot;html-lang&amp;quot; prefixed properties in the parsed result, e.g.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot; lang=&amp;quot;sv&amp;quot; id=&amp;quot;postfrag123&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;En svensk titel&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-content&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;With an &amp;lt;em&amp;gt;english&amp;lt;/em&amp;gt; summary&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-content&amp;quot;&amp;gt;Och &amp;lt;em&amp;gt;svensk&amp;lt;/em&amp;gt; huvudtext&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would be parsed into something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;html-id&amp;quot;: &amp;quot;postfrag123&amp;quot;,&lt;br /&gt;
  &amp;quot;html-lang&amp;quot;: &amp;quot;sv&amp;quot;,&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;En svensk titel&amp;quot;],&lt;br /&gt;
    &amp;quot;content&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;html-lang&amp;quot;: &amp;quot;en&amp;quot;,&lt;br /&gt;
        &amp;quot;html&amp;quot;: &amp;quot;With an &amp;lt;em&amp;gt;english&amp;lt;/em&amp;gt; summary&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;With an english summary&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;html&amp;quot;: &amp;quot;Och &amp;lt;em&amp;gt;svensk&amp;lt;/em&amp;gt; huvudtext&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Och svensk huvudtext&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pronouns ===&lt;br /&gt;
&lt;br /&gt;
Language is also useful context when defining [[pronouns]], discussed a bit here[https://github.com/idno/Known/pull/1426#issuecomment-217626923].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-x-pronoun-nominative&amp;quot;&amp;gt;he&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-x-pronoun-possessive&amp;quot;&amp;gt;him&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-x-pronoun-oblique&amp;quot;&amp;gt;his&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would parse as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;,&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;x-pronoun-nominative&amp;quot;: [&amp;quot;he&amp;quot;],&lt;br /&gt;
    &amp;quot;x-pronoun-possessive&amp;quot;: [&amp;quot;him&amp;quot;],&lt;br /&gt;
    &amp;quot;x-pronoun-oblique&amp;quot;: [&amp;quot;his&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It could also be useful to specify multiple languages within a single h-card (pardon my possible butchering of Swedish pronouns)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;en&amp;quot; class=&amp;quot;p-x-pronoun-nominative&amp;quot;&amp;gt;he&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;en&amp;quot; class=&amp;quot;p-x-pronoun-possessive&amp;quot;&amp;gt;him&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;en&amp;quot; class=&amp;quot;p-x-pronoun-oblique&amp;quot;&amp;gt;his&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;sv&amp;quot; class=&amp;quot;p-x-pronoun-nominative&amp;quot;&amp;gt;han&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;sv&amp;quot; class=&amp;quot;p-x-pronoun-possessive&amp;quot;&amp;gt;hans&amp;lt;/span&amp;gt; /&lt;br /&gt;
  &amp;lt;span lang=&amp;quot;sv&amp;quot; class=&amp;quot;p-x-pronoun-oblique&amp;quot;&amp;gt;honom&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which might parse as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;x-pronoun-nominative&amp;quot;: [{&amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;he&amp;quot;}, {&amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;han&amp;quot;}],&lt;br /&gt;
    &amp;quot;x-pronoun-possessive&amp;quot;: [{&amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;him&amp;quot;}, {&amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;hans&amp;quot;}],&lt;br /&gt;
    &amp;quot;x-pronoun-oblique&amp;quot;: [{&amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;his&amp;quot;}, {&amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;honom&amp;quot;}]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or alternatively, we could introduce a new microformat h-pronoun&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-x-pronoun h-x-pronoun&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-nominative&amp;quot;&amp;gt;he&amp;lt;/span&amp;gt; /&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-possessive&amp;quot;&amp;gt;him&amp;lt;/span&amp;gt; /&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-oblique&amp;quot;&amp;gt;his&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-x-pronoun h-x-pronoun&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-nominative&amp;quot;&amp;gt;han&amp;lt;/span&amp;gt; /&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-possessive&amp;quot;&amp;gt;hans&amp;lt;/span&amp;gt; /&lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-oblique&amp;quot;&amp;gt;honom&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
parsed as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;x-pronoun&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-x-pronoun&amp;quot;],&lt;br /&gt;
      &amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;nominative&amp;quot;: [&amp;quot;he&amp;quot;],&lt;br /&gt;
        &amp;quot;possessive&amp;quot;: [&amp;quot;him&amp;quot;],&lt;br /&gt;
        &amp;quot;oblique&amp;quot;: [&amp;quot;his&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    }, {&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-x-pronoun&amp;quot;],&lt;br /&gt;
      &amp;quot;lang&amp;quot;: &amp;quot;sv&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;nominative&amp;quot;: [&amp;quot;han&amp;quot;],&lt;br /&gt;
        &amp;quot;possessive&amp;quot;: [&amp;quot;hans&amp;quot;],&lt;br /&gt;
        &amp;quot;oblique&amp;quot;: [&amp;quot;honom&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    }]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Discussion:&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Canonicalization of datetime output ==&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
It would be useful to choose a (more) uniform output format for datetimes to make it easier for users of the parser to consume datetimes. Microformats2 parsers already do sophisticated pattern matching to recognize date vs. time vs. datetimes, so converting this to any specific format should not add overhead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Specifically: &lt;br /&gt;
* Choose either 'T' or space as the date/time separator.&lt;br /&gt;
** Prefer space as it is more human friendly/readable, which matters even for syntaxes/formats, as human still develop, debug them. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* Choose either +XXYY or +XX:YY as the timezone specification (and convert 'Z' to +0000).&lt;br /&gt;
** Would appreciate some study / input here as to which timezone offset syntax is more human friendly. I lean slightly toward +/-NNNN (without the colon) because in the context of seeing a time, leaving out the colon makes it less likely the offset will be confused for a time. E.g. &amp;quot;07:00-08:00&amp;quot; looks like 7-8am, even if it meant 07:00 in PST. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** Space is fine - consensus [[2015-01-20]] meetup.&lt;br /&gt;
* Parsers should ''not'' attempt make datetimes more exact than specified. They should not add time, seconds, or timezone if omitted in the original. [[User:Kylewm|Kylewm]] 04:02, 14 May 2014 (UTC)&lt;br /&gt;
** Agreed. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** or month, day per Tom Morris&lt;br /&gt;
** consensus [[2015-01-20]] meetup&lt;br /&gt;
&lt;br /&gt;
* Counterpoint: PHP's builtin date parsing does not require strict formatting. And the equivalent functionality for Python is provided by the widely used python-dateutil library. [[User:Kylewm|Kylewm]] 19:02, 14 May 2014 (UTC)&lt;br /&gt;
** However we cannot (must not) depend on either PHP or Python's &amp;quot;smart&amp;quot; &amp;quot;fixing&amp;quot; or Postelian &amp;quot;liberal handling&amp;quot;, or any other language/framework's for that matter, as they all differ in how &amp;quot;intelligent&amp;quot; they are. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perhaps just provide a guideline for these based on the above consensus.&lt;br /&gt;
&lt;br /&gt;
== Add meta http-equiv to microformats2 parsing model ==&lt;br /&gt;
Status: disagreement, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
Similar to document level parsing of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, it makes sense simultaneously to parse &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv&amp;amp;gt;&amp;lt;/code&amp;gt; elements, perhaps treating &amp;quot;Status&amp;quot; in a special way (only using first number (sequence of digits) for its &amp;quot;value&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Use case: IndieWeb &amp;quot;deleted&amp;quot; indication inline in content for static file services that don't support HTTP return codes.&lt;br /&gt;
* http://indiewebcamp.com/deleted#HTML_meta_http-equiv_for_status&lt;br /&gt;
&lt;br /&gt;
HTTP Header example:&lt;br /&gt;
* &amp;lt;samp&amp;gt;Content-Type: text/html; charset=utf-8&amp;lt;/samp&amp;gt;&lt;br /&gt;
HTML equivalent: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Related:&lt;br /&gt;
* https://www.w3.org/International/O-HTTP-charset&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Interesting thought. Are you suggesting a top level &amp;quot;http-equivs:&amp;quot; collection similar to &amp;quot;rels:&amp;quot; in the parsed output? Should we consider &amp;quot;metas:&amp;quot; instead or in addition? [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* What's the use case for this? Also, http-equiv on its own is useless. http-equiv is only a supplement to the data stored in headers. And headers aren't always there: what happens in the context of someone debugging a page who pastes the source into the textarea of an mf2 parser? Without a compelling use case for including headers (and then over-riding some of them with http-equivs), I'm not sure why an implementor want to do this. —[[User:TomMorris|Tom Morris]] 00:25, 8 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g. from https://gist.github.com/aaronpk/10297489&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Status&amp;quot; content=&amp;quot;410 GONE&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [],&lt;br /&gt;
 &amp;quot;rels&amp;quot;: {},&lt;br /&gt;
 &amp;quot;http&amp;quot;: {&lt;br /&gt;
 &amp;quot;status&amp;quot;: 410&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Maybe make this an optional pass in the parser? - Tom Morris [[2015-01-20]]&lt;br /&gt;
* For now, don't bother with metas until someone provides a use-case. Tom Morris&lt;br /&gt;
* Agreed on both counts. [[User:Tantek|Tantek]] 06:56, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MIME type==&lt;br /&gt;
See [[microformats2-mime-type]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Other Interpretation Parsing Notes==&lt;br /&gt;
Note: most of these need to be written up as separate [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
Author: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
[[microformats-2|Microformats 2]] proposes a new, all encompassing syntax modification of [[microformats-2-prefixes|prefixes]] that will allow microformats to be parsed from pages by processors without prior knowledge of a vocabulary. The core components of this model are quite simple, are quite simple to implement, but there are a number of conflicts that emerge with the functionality of existing microformats parsers that need to be handled. This page documents a proposed model to separate these concerns clearly in a way that can be applied to the documentation of generic microformats parsing rules, and the documentation of individual vocabularies.&lt;br /&gt;
&lt;br /&gt;
Collection of other unresolved parsing issues in a generic model:&lt;br /&gt;
&lt;br /&gt;
This is good material for documenting as [[microformats-2-issues]], [[microformats-2-faq]], and perhaps some of the more technical details in [[microformats-2-parsing-faq]].&lt;br /&gt;
&lt;br /&gt;
* The include pattern references other elements from elsewhere in a document. A generic parser needs to track IDs and fill them in after walking the DOM. (also, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; if adopted.)&lt;br /&gt;
** The current thinking per [[microformats-2-brainstorming]] is to adopt &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; and drop the [[include-pattern]]. [[User:Tantek|Tantek]]&lt;br /&gt;
* Will &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; always map to an &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; property name?&lt;br /&gt;
** No, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; maps to one or more elements by ids, and their children. Those referenced elements may have property class names themselves, or they may contain elements that do. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] implies &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; from an hCard in a page that uses an &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt; element. This requires format knowledge, but a generic parser does not currently track the element type of a property node. Should it?&lt;br /&gt;
** It should not. element-specific handling (e.g. using &amp;quot;alt&amp;quot; from img, and &amp;quot;title&amp;quot; from abbr) is completely done at parse time. The JSON data model does not reflect which element type or attribute the value came from. Additionally, [[hAtom]] is an example where we created far too many vocabulary-specific rules, in practice they're not necessary, and only complicate the microformat for both publisher understanding and parser implementation. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that the highest level heading within an entry implies &amp;lt;code&amp;gt;entry-title&amp;lt;/code&amp;gt;. This particular optimisation might be better off dead.&lt;br /&gt;
** Agreed, this is gone in microformats 2. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that permalinks be parsed from &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, not &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
** In practice this has been one of the more problematic/error prone aspects of hAtom implementations, and it's also inconsistent with other microformats (although [[hReview]] tried to use both rel permalinks and &amp;quot;url&amp;quot;). The dependence upon [[rel-bookmark]] for permalinks is dropped in h-atom in preference to re-using &amp;quot;u-url&amp;quot; and &amp;quot;u-uid&amp;quot;. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[XFN]] is entirely built on &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; (although, has various other differences from structural microformats, as do vote-links, so perhaps are excluded from this discussion and will always be handled by dedicated parsers/queries regardless?)&lt;br /&gt;
** The best (easiest and most reliable) use of 'rel' microformats in practice is when they are orthogonal to 'class' microformats. This is true both with [[XFN]] and some newer [[existing-rel-values|rel values]] like [[rel-author]]. In addition, it was very clear at the recent [[schema.org]] workshop's syntax session that RDFa's decision to apparently arbitrarily mix use of 'rel' and 'property' attributes for specifying different types of properties (it wasn't clear to people in the room when you use which for what) has caused a high degree of confusion among publishers and thus high error-rates. Thus if anything we should learn from both the mistakes of RDFa and our own experiences with even very deliberate/specific mixing of rel microformats in class microformats, and keep them defined as separate orthogonal building blocks that work together, but don't depend on each other. [[User:Tantek|Tantek]]&lt;br /&gt;
*** Relatedly to this: &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; in hAtom. --[[User:BenWard|BenWard]] 06:50, 5 October 2011 (UTC)&lt;br /&gt;
**** Yes, and two related things here. First, despite my (and others') objection and (past) interoperable post/entry-specific treatment by Technorati and Ice Rocket, Hixie has redefined rel-tag in [[HTML5]] to mean applying to the whole page, not a single post. Second, I've explicitly added 'p-category' to the draft 'h-atom' vocabulary in [[microformats-2]]. [[User:Tantek|Tantek]] 07:12, 5 October 2011 (UTC)&lt;br /&gt;
* HTML's &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; element includes an optional &amp;lt;code&amp;gt;pubdate&amp;lt;/code&amp;gt; attribute. Simply: We should parse this as &amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;. --[[User:BenWard|BenWard]] 06:12, 10 October 2011 (UTC)&lt;br /&gt;
** *If* there is even some reasonable data on actual use of the &amp;quot;pubdate&amp;quot; attribute (I don't think there is, frankly, especially with the removal of the algorithm to produce Atom from HTML5), then we could consider parsing &amp;quot;pubdate&amp;quot; as backwards compatible option for &amp;quot;dt-published&amp;quot;. As a general rule, however, it is bad (demonstrably/experienced) design to depend on additional attributes (c.f. RDFa confusion over &amp;quot;property&amp;quot; vs. &amp;quot;rel&amp;quot;), especially for an instance where no additional attribute is necessary. I would leave this out for now until there is non-trivial (more than just test pages or folks who've written HTML5 books, ahem) use in the wild. When there is such use in the wild, it should be documented on a wiki page. We don't want to encourage more complex (additional attribute) publishing as a result of supporting it. [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
* [[value-class-pattern]]: In microformats-2, since there are no sub-properties, there will presumably no-longer be a 'value' property in any parsed model. Properties such as 'tel &amp;gt; type' in hCard are, as I recall, deprecated due to underuse anyway, so 'tel &amp;gt; value' becomes redundant. (There's also potentially some clarification around 'price &amp;gt; value' in hListing, whereby value was used in a pattern. So, what does this mean for value class parsing, with regard to value-title patterns and date separation patterns. Are we looking for a 'p-value' and 'p-value-title' classname, but treating them specially (excluding them from regular property parsing.) Or, are we giving them a special prefix (v-text, v-title? That seems confusing, but could be a concept.) I'm fine with p- for both, and just having the parser ignore them since they're special, but need clarification and naming confirmation. --[[User:BenWard|BenWard]] 09:35, 10 October 2011 (UTC)&lt;br /&gt;
** A few things:&lt;br /&gt;
*** 1. Yes, no more subproperties. 'tel' becomes just 'p-tel'. If there is demand for a structured 'tel' value, then we can use that demand (and research into publishing in practice) to brainstorm and create an 'h-tel' structured telephone number (with perhaps fields like 'type', 'extension', some indication of it being local dialing (an extra 0 in some countries) or international dialing, etc.) Or, we address the different 'tel' types as their own flat properties (again as justified by research), e.g. perhaps 'p-tel-fax', or 'p-tel-mobile'. Something for hcard-2-brainstorming.&lt;br /&gt;
*** 2. For prices, e.g. hListing, either we're going to need to encode how to parse monetary amounts including monetary symbols, or consider creating an 'h-price' structured price. Not sure what the right answer is here, again, will need to be informed by analysis of documented actual price publication practices.&lt;br /&gt;
*** 3. We should avoid introducing a new prefix 'v-' just for value-class-pattern. As we've noted elsewhere, each new prefix adds complexity and should be avoided without substantial advantage.&lt;br /&gt;
*** 4. Using 'p-value-title' is strange, as it would be an exception to 'p-' parsing, since it would get the value from the 'title' attribute whereas 'p-' properties don't normally do that (exception: abbr).&lt;br /&gt;
*** 5. Using 'p-value' is also strange, as it wouldn't generate a 'value' property in the JSON data model.&lt;br /&gt;
*** 6. Class name 'value-title' is already sufficiently prefixed - we've found or even heard of no collisions in practice.&lt;br /&gt;
*** 7. Class name 'value' can, by its simpler naming nature, be expected to potentially collide with other web designer class name usage though we have no documentation/mention thereof. We could consider a renaming, or providing of alternative, such as 'value-string', or 'value-content', etc. However, let's keep that as a backup plan to use only if/when evidence is presented that we need to.&lt;br /&gt;
** Conclusions: for now, in microformats-2, keep using 'value' and 'value-title' as defined in the [[value-class-pattern]], and add the additional (obvious) interpretation that [[value-class-pattern#Date_and_time_parsing|value class pattern: date and time parsing]] applies to all 'dt-' properties. - [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== incorporated 2015-05-28 ==&lt;br /&gt;
The following brainstorms were incorporated 2015-05-28.&lt;br /&gt;
&lt;br /&gt;
== more information for alternates ==&lt;br /&gt;
Raised 2015-04-24 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
The existing &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; parsing is omitting &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; - that should be added.  The &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; would make sense to add here too.&lt;br /&gt;
&lt;br /&gt;
Use-case: labels for presenting alternates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 Makes sense. [[User:Tantek|Tantek]] 03:41, 25 April 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== more information for rel-based formats ==&lt;br /&gt;
Raised 2015-04-18 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
Related github test suite issue: https://github.com/microformats/tests/issues/16&lt;br /&gt;
&lt;br /&gt;
Several rel-based formats have additional information that is useful beyond the link itself, which is all we capture at the moment. As I am trying to update the Universal feedparser to support mf2 based I will show examples from the [https://github.com/kevinmarks/feedparser/tree/365623a9470e99246f393a8c1f49a0db567826b8/feedparser/tests/microformats testcases] there.&lt;br /&gt;
&lt;br /&gt;
The main change is to add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; entry for more information about the attributes and text of the urls pointed to by rel's in the document&lt;br /&gt;
&lt;br /&gt;
A fork of mf2py that implements these changes is at https://github.com/kevinmarks/mf2py&lt;br /&gt;
=== rel-tag ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;tag&amp;quot; href=&amp;quot;http://del.icio.us/tag/tech&amp;quot;&amp;gt;Technology&amp;lt;/a&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;tag&amp;quot;: [&amp;quot;http://del.icio.us/tag/tech&amp;quot;]}, &amp;quot;items&amp;quot;: []} &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is useful as a label. &lt;br /&gt;
&lt;br /&gt;
We add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; element to the parsed output with this extra data that can be looked up from the rels, which doesn't break backward compatibility and works better with xfn (see below)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://del.icio.us/tag/tech&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://del.icio.us/tag/tech&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Technology&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== xfn ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;coworker&amp;quot;: [&amp;quot;http://example.com/johndoe&amp;quot;]}, &amp;quot;items&amp;quot;: []}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is the person's name. Suggested output using the urls object:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with multiple xfn values &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker friend&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
we get this: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;friend&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;, &lt;br /&gt;
                &amp;quot;friend&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-enclosure ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;enclosure&amp;quot; href=&amp;quot;http://example.com/movie.mp4&amp;quot; type=&amp;quot;video/mpeg&amp;quot; title=&amp;quot;real title&amp;quot;&amp;gt;my movie&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;'{&amp;quot;rels&amp;quot;: {&amp;quot;enclosure&amp;quot;: [&amp;quot;http://example.com/movie.mp4&amp;quot;]}, &amp;quot;items&amp;quot;: []}'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text,  which is the title and the attributes which give type. Suggested output:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;enclosure&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/movie.mp4&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/movie.mp4&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;enclosure&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot;, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;video/mpeg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;real title&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This generalises to other rel's too, such as [[rel-feed]] and [[rel-alternate]] that have type, lang etc attributes.&lt;br /&gt;
&lt;br /&gt;
(updated to include changes from feedback below) [[User:Kevin Marks|Kevin Marks]] 22:13, 26 April 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== attributes parsed ===&lt;br /&gt;
Attributes currently parsed are:&lt;br /&gt;
* &amp;lt;code&amp;gt;hreflang&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
&lt;br /&gt;
Attributes we may consider parsing if we have a use case are &lt;br /&gt;
* &amp;lt;code&amp;gt;sizes&amp;lt;/code&amp;gt; for icon - need use-case documentation&lt;br /&gt;
* &amp;lt;code&amp;gt;coords&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
* &amp;lt;code&amp;gt;shape&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
&lt;br /&gt;
In addition there is a special attribute &amp;lt;s&amp;gt;&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; &amp;lt;/s&amp;gt;&amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; which is the text contents of the link, which is useful in rel-tag rel-enclosure and xfn, and in alternate when used for feeds. It's also clarifying for rel-me links. &lt;br /&gt;
&lt;br /&gt;
Tantek [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79057 suggests] we use &amp;lt;code&amp;gt;textContent&amp;lt;/code&amp;gt; for this instead, and make it a single string, not a list as &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is elsewhere in mf2 parsing&lt;br /&gt;
* Update: &amp;quot;text&amp;quot; is good enough, and &amp;quot;textContent&amp;quot; is ugly camelCase. [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== feedback on more rel info ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;name&amp;quot; is bad because it misleadingly conflates with use of &amp;quot;name&amp;quot; elsewhere in microformats2.&lt;br /&gt;
#* Suggested alternative: [https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent textContent] - since that's literally what is being returned there. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** as all other mf2 keys are lowercase-with-hyphens, [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79101 Tantek suggests] 'text' as that isn't going to be an html [[User:Kevin Marks|Kevin Marks]] 07:28, 25 April 2015 (UTC)&lt;br /&gt;
# no need for array for &amp;quot;name&amp;quot;/textContent - since there is always only one at most&lt;br /&gt;
#* E.g. should be &amp;quot;textContent&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#* Update: &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
# &amp;quot;urls&amp;quot; key is misleading - implies all URLs in the document, which is neither true, nor desired (takes much more parsing time and work and code)&lt;br /&gt;
#* Suggested alternative: &amp;quot;rel-urls&amp;quot;. And open to better alternatives too. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** If we are trying to extend the number of properties retuned from a rel without breaking the old structure why don't we call the new structure something like &amp;quot;rels-extended&amp;quot; [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#*** Extension is not the point, but rather to use them complementary. One structure for look-up of any rel value, hence &amp;quot;rels&amp;quot;, which returns you a list of URLs. Then you can lookup those URLs in the new mapping, by URL, hence it is called &amp;quot;rel-urls&amp;quot; - that's the point to use them in conjunction and that's why rel-urls is named what it is. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
# Why is the structure of  &amp;quot;rel-urls&amp;quot; different to the &amp;quot;alternates&amp;quot; structure. Should the &amp;quot;url&amp;quot; not just be added as a property and not as a key. Creating two data structures for one type of object seems inconsistent. It adds cognitive load to anyone trying to understand the JSON structure [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#* I was trying to avoid breaking the existing &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; structure and use of it - I did implement a variant that put the structure inside rels, and it became cumbersome and repetitive where there were multiple rels on a url (xfn cases). Denormalising as properties of the URL made more sense. It also dedupes if there is repetitive linking to the same URL, eg a series of posts with rel-author on each. [[User:Kevin Marks|Kevin Marks]] 20:05, 1 June 2015 (UTC)&lt;br /&gt;
# If the rel is a &amp;quot;tag&amp;quot; then the main value we need to return should be the last path component of the URL, not the link text? Should we add another output property ie &amp;quot;tag&amp;quot; [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#* No need to return last path segment of the URL, because the URL is already there - and that's just a library/framework utility function to get the last path segment of a URL. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
# As currently described, the URL from &amp;lt;code&amp;gt;alternates&amp;lt;/code&amp;gt; is repeated in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; structure. If we are doing this, surely &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; should be in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; too? I assumed a mapping between them. [[User:Kevin Marks|Kevin Marks]] 20:05, 1 June 2015 (UTC)&lt;br /&gt;
## edit showing this variant: http://microformats.org/wiki/index.php?title=microformats2-parsing&amp;amp;oldid=65021#parse_a_hyperlink_element_for_rel_microformats&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
#* Yes it makes sense to drop &amp;quot;alternates&amp;quot; assuming the backcompat impact is low, put alternates in &amp;quot;rels&amp;quot; along with everything else, and direct people to use rels and rel-urls for alternates functionality. Evidence this is an acceptable even preferable approach.[http://indiewebcamp.com/irc/2015-06-01/line/1433195247005] Will add an issue accordingly. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Incorporated 2015-06-06 ==&lt;br /&gt;
&lt;br /&gt;
== Nested h-* objects' &amp;quot;value&amp;quot; property ==&lt;br /&gt;
Status: resolved, resolution iterated, one real world implementation proven implementability, incorporated&lt;br /&gt;
* 2015-06-06 incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
Raised 2015-01-06 by [[User:Kylewm]];&lt;br /&gt;
&lt;br /&gt;
If a child element has a microformat (h-*) and is a property element (p-*, u-*, dt-*, e-*), the parser will add a &amp;quot;value&amp;quot; property to the resulting object. The value should attempt to be a useful representation of the object for consumers that do not have semantic knowledge of the particular h-* type. Ref: [[microformats2-parsing#parse_an_element_for_class_microformats]].&lt;br /&gt;
&lt;br /&gt;
To determine the &amp;quot;value&amp;quot;, we parse the property element simply (as if it did not have a h-* class), which works well for simple h-* objects, e.g. &amp;lt;code&amp;gt;&amp;lt;a class=&amp;quot;u-like-of h-cite&amp;quot; href=&amp;quot;...&amp;quot;&amp;gt;...&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* To handle more complex microformats, I propose that &amp;quot;value&amp;quot; for a p-* property element take on the first explicit &amp;quot;name&amp;quot; property of the nested microformat, and for a u-* property, the first explicit &amp;quot;url&amp;quot; property. Parsing will fall back on the current rules if an explicit property does not exist.&lt;br /&gt;
** This makes sense to me, and fits with the use-cases and examples I've seen. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** A similar (possibly simpler?) formulation would use the implied name and url rules to determine the &amp;quot;value&amp;quot; for p-* and u-* properties respectively&lt;br /&gt;
*** I don't think that's needed, as there are already implied rules on a property that should handle that. I'd start with just the &amp;quot;first explicit&amp;quot; scoping to be more conservative, and then see if we find any use-cases that (and existing implied rules) don't/doesn't catch. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
**** Agreement at [[2015-01-20]] meetup.&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;u-in-reply-to h-cite&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-author h-card&amp;quot; href=&amp;quot;http://example.com&amp;quot;&amp;gt;Example Author&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-name u-url&amp;quot; href=&amp;quot;http://example.com/post&amp;quot;&amp;gt;Example Post&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nested u-in-reply-to object would parse as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;in-reply-to&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-cite&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;Example Post&amp;quot;],&lt;br /&gt;
    &amp;quot;url&amp;quot;: [&amp;quot;http://example.com/post&amp;quot;],&lt;br /&gt;
    &amp;quot;author&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;:[&amp;quot;h-card&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://example.com&amp;quot;], &lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Example Author&amp;quot;]&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;Example Author&amp;quot;&lt;br /&gt;
    }],&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;value&amp;quot;: &amp;quot;http://example.com/post&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the outer &amp;quot;value&amp;quot; gets the in-reply-to h-cite's u-url property, and the inner &amp;quot;value&amp;quot; gets the author's p-name property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Because there are no implied properties of the dt-* and e-* types, and no obvious defaults, the value rules for these types would not change.&lt;br /&gt;
** A possibility for dt-* h-*: The dt-* could take either the first dt-* of the h-*, or (perhaps if no dt-* in the h-*,) the first &amp;lt;code&amp;gt;&amp;amp;lt;time&amp;amp;gt;&amp;lt;/code&amp;gt; element inside. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** First dt-* seems reasonable, predictable, and usable. Consensus at [[2015-01-20]] meetup.&lt;br /&gt;
** Update 2015-05-29: no known use-cases for first dt-* or first e-*, and implementing that &amp;quot;would require some refactoring&amp;quot; (in mf2py at least per kylewm), thus until there's a use-case for first dt-*/e-* inside, let's treat &amp;quot;dt-* h-*&amp;quot; and &amp;quot;e-* h-*&amp;quot; as before. [[User:Tantek|Tantek]] . In particular:&lt;br /&gt;
*** p-* h-* - value from first &amp;quot;name&amp;quot; as proposed above&lt;br /&gt;
*** u-* h-* - value from first &amp;quot;url&amp;quot; as proposed above&lt;br /&gt;
*** e-* h-* - value is already defined for e-* parsing, nothing special here&lt;br /&gt;
*** dt-* h-* - value from normal dt-* parsing - nothing special.&lt;br /&gt;
*** +1 totally agree, let's wait for use cases of e-* dt-* [[User:Kylewm|Kylewm]] 19:44, 29 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implemented in mf2py 2015-06-01 https://github.com/tommorris/mf2py/commit/edc895ef5a780bcee654e6644a688688934517b0&lt;br /&gt;
* Added to microformats test suite (experimental) 2015-06-01 https://github.com/microformats/tests/commit/90c8a7d8e96c7160036a298e13f16d9ddaec218e&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-brainstorming]]&lt;br /&gt;
* [[microformats2-prefixes]]&lt;br /&gt;
* [[microformats2-faq]]&lt;br /&gt;
* [[microformats2-issues]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65500</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65500"/>
		<updated>2016-05-07T07:10:52Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Noscript skip/parse */ -0 and a question&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] We've added this in mf2py too now, and I'm happy with it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] reasoning given here makes sense&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 [[User:Kylewm|Kylewm]] I can't necessarily think of a case where two of the same URL values is useful, but it feels like the parser's job to preserve the fidelity of the input. (this has been fixed in Known's markup btw [https://github.com/idno/Known/issues/1372])&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] with a caveat.&lt;br /&gt;
** Returned JSON SHOULD (not MUST) be UTF8 rather than ASCII with \u encoding because it is easier to read and debug.&lt;br /&gt;
** When parsing e- properties, HTML entities should be left escaped in the &amp;quot;html&amp;quot; value. This is important when parsing a reply-context; if the original post contains an escaped HTML code snippet, I want the reply context to show the same code snippet, rather than converting it all into real tags.&lt;br /&gt;
** e.g. &amp;lt;code&amp;gt;&amp;quot;content&amp;quot;: [{&amp;quot;html&amp;quot;: &amp;quot;&amp;amp;amp;lt;b&amp;amp;amp;gt;1&amp;amp;amp;mdash;2&amp;amp;amp;lt;/b&amp;amp;amp;gt;&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;amp;lt;b&amp;amp;gt;1&amp;amp;mdash;2&amp;amp;lt;/b&amp;amp;gt;&amp;quot;}]&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] agree with rejecting property names that include capital letters (specifically detecting camelCase seems harder to define)&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] leave sanitization to the sanitizers!&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] sgtm&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* -1 [[User:Kylewm|Kylewm]] A pretty display would be a nice debugging tool, but I'm -1 the proposal to define a specific, default HTML output. The two proposed use-cases are totally buildable without it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] Is it possible a js-only client-rendered site would want to serve microformats in a noscript block? I know we encourage people to do better progressive-enhancement than that, but not everyone does, and I'd prefer it to no microformats.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65499</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65499"/>
		<updated>2016-05-07T07:03:43Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* default generated HTML */ -1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] We've added this in mf2py too now, and I'm happy with it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] reasoning given here makes sense&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 [[User:Kylewm|Kylewm]] I can't necessarily think of a case where two of the same URL values is useful, but it feels like the parser's job to preserve the fidelity of the input. (this has been fixed in Known's markup btw [https://github.com/idno/Known/issues/1372])&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] with a caveat.&lt;br /&gt;
** Returned JSON SHOULD (not MUST) be UTF8 rather than ASCII with \u encoding because it is easier to read and debug.&lt;br /&gt;
** When parsing e- properties, HTML entities should be left escaped in the &amp;quot;html&amp;quot; value. This is important when parsing a reply-context; if the original post contains an escaped HTML code snippet, I want the reply context to show the same code snippet, rather than converting it all into real tags.&lt;br /&gt;
** e.g. &amp;lt;code&amp;gt;&amp;quot;content&amp;quot;: [{&amp;quot;html&amp;quot;: &amp;quot;&amp;amp;amp;lt;b&amp;amp;amp;gt;1&amp;amp;amp;mdash;2&amp;amp;amp;lt;/b&amp;amp;amp;gt;&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;amp;lt;b&amp;amp;gt;1&amp;amp;mdash;2&amp;amp;lt;/b&amp;amp;gt;&amp;quot;}]&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] agree with rejecting property names that include capital letters (specifically detecting camelCase seems harder to define)&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] leave sanitization to the sanitizers!&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] sgtm&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* -1 [[User:Kylewm|Kylewm]] A pretty display would be a nice debugging tool, but I'm -1 the proposal to define a specific, default HTML output. The two proposed use-cases are totally buildable without it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65498</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65498"/>
		<updated>2016-05-07T06:53:22Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* use poster if no src on video for u props */ +1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] We've added this in mf2py too now, and I'm happy with it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] reasoning given here makes sense&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 [[User:Kylewm|Kylewm]] I can't necessarily think of a case where two of the same URL values is useful, but it feels like the parser's job to preserve the fidelity of the input. (this has been fixed in Known's markup btw [https://github.com/idno/Known/issues/1372])&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] with a caveat.&lt;br /&gt;
** Returned JSON SHOULD (not MUST) be UTF8 rather than ASCII with \u encoding because it is easier to read and debug.&lt;br /&gt;
** When parsing e- properties, HTML entities should be left escaped in the &amp;quot;html&amp;quot; value. This is important when parsing a reply-context; if the original post contains an escaped HTML code snippet, I want the reply context to show the same code snippet, rather than converting it all into real tags.&lt;br /&gt;
** e.g. &amp;lt;code&amp;gt;&amp;quot;content&amp;quot;: [{&amp;quot;html&amp;quot;: &amp;quot;&amp;amp;amp;lt;b&amp;amp;amp;gt;1&amp;amp;amp;mdash;2&amp;amp;amp;lt;/b&amp;amp;amp;gt;&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;amp;lt;b&amp;amp;gt;1&amp;amp;mdash;2&amp;amp;lt;/b&amp;amp;gt;&amp;quot;}]&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] agree with rejecting property names that include capital letters (specifically detecting camelCase seems harder to define)&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] leave sanitization to the sanitizers!&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] sgtm&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65497</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65497"/>
		<updated>2016-05-07T06:51:51Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* exclude style elements before parsing */ +1 amended proposal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] We've added this in mf2py too now, and I'm happy with it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] reasoning given here makes sense&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 [[User:Kylewm|Kylewm]] I can't necessarily think of a case where two of the same URL values is useful, but it feels like the parser's job to preserve the fidelity of the input. (this has been fixed in Known's markup btw [https://github.com/idno/Known/issues/1372])&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] with a caveat.&lt;br /&gt;
** Returned JSON SHOULD (not MUST) be UTF8 rather than ASCII with \u encoding because it is easier to read and debug.&lt;br /&gt;
** When parsing e- properties, HTML entities should be left escaped in the &amp;quot;html&amp;quot; value. This is important when parsing a reply-context; if the original post contains an escaped HTML code snippet, I want the reply context to show the same code snippet, rather than converting it all into real tags.&lt;br /&gt;
** e.g. &amp;lt;code&amp;gt;&amp;quot;content&amp;quot;: [{&amp;quot;html&amp;quot;: &amp;quot;&amp;amp;amp;lt;b&amp;amp;amp;gt;1&amp;amp;amp;mdash;2&amp;amp;amp;lt;/b&amp;amp;amp;gt;&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;amp;lt;b&amp;amp;gt;1&amp;amp;mdash;2&amp;amp;lt;/b&amp;amp;gt;&amp;quot;}]&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] agree with rejecting property names that include capital letters (specifically detecting camelCase seems harder to define)&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] leave sanitization to the sanitizers!&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65496</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65496"/>
		<updated>2016-05-07T06:48:08Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* ignore u-camelCase properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] We've added this in mf2py too now, and I'm happy with it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] reasoning given here makes sense&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 [[User:Kylewm|Kylewm]] I can't necessarily think of a case where two of the same URL values is useful, but it feels like the parser's job to preserve the fidelity of the input. (this has been fixed in Known's markup btw [https://github.com/idno/Known/issues/1372])&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] with a caveat.&lt;br /&gt;
** Returned JSON SHOULD (not MUST) be UTF8 rather than ASCII with \u encoding because it is easier to read and debug.&lt;br /&gt;
** When parsing e- properties, HTML entities should be left escaped in the &amp;quot;html&amp;quot; value. This is important when parsing a reply-context; if the original post contains an escaped HTML code snippet, I want the reply context to show the same code snippet, rather than converting it all into real tags.&lt;br /&gt;
** e.g. &amp;lt;code&amp;gt;&amp;quot;content&amp;quot;: [{&amp;quot;html&amp;quot;: &amp;quot;&amp;amp;amp;lt;b&amp;amp;amp;gt;1&amp;amp;amp;mdash;2&amp;amp;amp;lt;/b&amp;amp;amp;gt;&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;amp;lt;b&amp;amp;gt;1&amp;amp;mdash;2&amp;amp;lt;/b&amp;amp;gt;&amp;quot;}]&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] agree with rejecting property names that include capital letters (specifically detecting camelCase seems harder to define)&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65495</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65495"/>
		<updated>2016-05-07T06:47:43Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* ignore u-camelCase properties */ +1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] We've added this in mf2py too now, and I'm happy with it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] reasoning given here makes sense&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 [[User:Kylewm|Kylewm]] I can't necessarily think of a case where two of the same URL values is useful, but it feels like the parser's job to preserve the fidelity of the input. (this has been fixed in Known's markup btw [https://github.com/idno/Known/issues/1372])&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] with a caveat.&lt;br /&gt;
** Returned JSON SHOULD (not MUST) be UTF8 rather than ASCII with \u encoding because it is easier to read and debug.&lt;br /&gt;
** When parsing e- properties, HTML entities should be left escaped in the &amp;quot;html&amp;quot; value. This is important when parsing a reply-context; if the original post contains an escaped HTML code snippet, I want the reply context to show the same code snippet, rather than converting it all into real tags.&lt;br /&gt;
** e.g. &amp;lt;code&amp;gt;&amp;quot;content&amp;quot;: [{&amp;quot;html&amp;quot;: &amp;quot;&amp;amp;amp;lt;b&amp;amp;amp;gt;1&amp;amp;amp;mdash;2&amp;amp;amp;lt;/b&amp;amp;amp;gt;&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;amp;lt;b&amp;amp;gt;1&amp;amp;mdash;2&amp;amp;lt;/b&amp;amp;gt;&amp;quot;}]&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] agree with rejecting capital letters (specifically detecting camelCase seems harder to define)&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65494</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65494"/>
		<updated>2016-05-07T06:46:23Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* unicode generation in JSON */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] We've added this in mf2py too now, and I'm happy with it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] reasoning given here makes sense&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 [[User:Kylewm|Kylewm]] I can't necessarily think of a case where two of the same URL values is useful, but it feels like the parser's job to preserve the fidelity of the input. (this has been fixed in Known's markup btw [https://github.com/idno/Known/issues/1372])&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] with a caveat.&lt;br /&gt;
** Returned JSON SHOULD (not MUST) be UTF8 rather than ASCII with \u encoding because it is easier to read and debug.&lt;br /&gt;
** When parsing e- properties, HTML entities should be left escaped in the &amp;quot;html&amp;quot; value. This is important when parsing a reply-context; if the original post contains an escaped HTML code snippet, I want the reply context to show the same code snippet, rather than converting it all into real tags.&lt;br /&gt;
** e.g. &amp;lt;code&amp;gt;&amp;quot;content&amp;quot;: [{&amp;quot;html&amp;quot;: &amp;quot;&amp;amp;amp;lt;b&amp;amp;amp;gt;1&amp;amp;amp;mdash;2&amp;amp;amp;lt;/b&amp;amp;amp;gt;&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;amp;lt;b&amp;amp;gt;1&amp;amp;mdash;2&amp;amp;lt;/b&amp;amp;gt;&amp;quot;}]&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65493</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65493"/>
		<updated>2016-05-07T06:45:36Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* unicode generation in JSON */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] We've added this in mf2py too now, and I'm happy with it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] reasoning given here makes sense&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 [[User:Kylewm|Kylewm]] I can't necessarily think of a case where two of the same URL values is useful, but it feels like the parser's job to preserve the fidelity of the input. (this has been fixed in Known's markup btw [https://github.com/idno/Known/issues/1372])&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] with a caveat.&lt;br /&gt;
** Returned JSON SHOULD (not MUST) be UTF8 rather than ASCII with \u encoding because it is easier to read and debug.&lt;br /&gt;
** When parsing e- properties, HTML entities should be left escaped in the &amp;quot;html&amp;quot; value. This is important when parsing a reply-context; if the original post contains an escaped HTML code snippet, I want the reply context to show the same code snippet, rather than converting it all into real tags.&lt;br /&gt;
** e.g. &amp;lt;code&amp;gt;&amp;quot;content&amp;quot;: [{&amp;quot;html&amp;quot;: &amp;quot;&amp;amp;amp;lt;b&amp;amp;amp;gt;1&amp;amp;amp;mdash;2&amp;amp;amp;lt;/b&amp;amp;amp;gt;&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;amp;lt;b&amp;amp;gt; 1&amp;amp;mdash;2&amp;amp;lt;/b&amp;amp;gt;&amp;quot;}]&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65492</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65492"/>
		<updated>2016-05-07T06:42:54Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* unicode generation in JSON */ +1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] We've added this in mf2py too now, and I'm happy with it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] reasoning given here makes sense&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 [[User:Kylewm|Kylewm]] I can't necessarily think of a case where two of the same URL values is useful, but it feels like the parser's job to preserve the fidelity of the input. (this has been fixed in Known's markup btw [https://github.com/idno/Known/issues/1372])&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] with a caveat. Returned JSON SHOULD (not MUST) be UTF8 rather than ASCII with \u encoding because it is much more human friendly when dealing with non-English and especially non-Latin alphabets. However, when parsing e- properties, HTML entities should be left alone in the &amp;quot;html&amp;quot; value, so &amp;lt;code&amp;gt;&amp;quot;content&amp;quot;: [{&amp;quot;html&amp;quot;: &amp;quot;&amp;amp;amp;lt;b&amp;amp;amp;gt;1&amp;amp;amp;mdash;2&amp;amp;amp;lt;/b&amp;amp;amp;gt; &amp;amp;amp;&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;amp;lt;b&amp;amp;gt; 1&amp;amp;mdash;2&amp;amp;lt;/b&amp;amp;gt;&amp;quot;}]&amp;lt;/code&amp;gt;. This is important, e.g. when parsing/displaying a reply-context; if the original post contains an escaped HTML code snippet, I want the reply context to show the same code snippet, rather than converting it all into real tags.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65491</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65491"/>
		<updated>2016-05-07T06:37:32Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* unicode generation in JSON */ +1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] We've added this in mf2py too now, and I'm happy with it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] reasoning given here makes sense&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 [[User:Kylewm|Kylewm]] I can't necessarily think of a case where two of the same URL values is useful, but it feels like the parser's job to preserve the fidelity of the input. (this has been fixed in Known's markup btw [https://github.com/idno/Known/issues/1372])&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] with a caveat. Returned JSON SHOULD (not MUST) be UTF8 rather than ASCII with \u encoding. However, when parsing e- properties, HTML entities should be left alone in the &amp;quot;html&amp;quot; value, so &amp;lt;code&amp;gt;&amp;quot;content&amp;quot;: [{&amp;quot;html&amp;quot;: &amp;quot;&amp;amp;amp;lt;b&amp;amp;amp;gt; &amp;amp;amp;mdash;&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;amp;lt;b&amp;amp;gt; &amp;amp;mdash;&amp;quot;}]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65490</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65490"/>
		<updated>2016-05-07T06:29:01Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* de-dupe URLs? */ -1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] We've added this in mf2py too now, and I'm happy with it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] reasoning given here makes sense&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 [[User:Kylewm|Kylewm]] I can't necessarily think of a case where two of the same URL values is useful, but it feels like the parser's job to preserve the fidelity of the input. (this has been fixed in Known's markup btw [https://github.com/idno/Known/issues/1372])&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65489</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65489"/>
		<updated>2016-05-07T06:19:47Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* img fallback in p- */ +1 to adding whitespace around images&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] We've added this in mf2py too now, and I'm happy with it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] reasoning given here makes sense&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65488</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65488"/>
		<updated>2016-05-07T06:17:44Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* implied name when alt=&amp;quot;&amp;quot; */ +1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] We've added this in mf2py too now, and I'm happy with it.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65487</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65487"/>
		<updated>2016-05-07T06:17:09Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* parsing a dt- property */ discussion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== parsing a dt- property ===&lt;br /&gt;
* Should instruct to replace a &amp;quot;T&amp;quot; separator with a single space.&lt;br /&gt;
* Value-class-pattern parsing should instruct to use a single space as the separator.&lt;br /&gt;
* Value-class-pattern should instruct to keep the authored level of specificity, rather than implying 00 seconds when not present. http://microformats.org/wiki/value-class-pattern##If+by+parsing+the+%22value%22&lt;br /&gt;
&lt;br /&gt;
Log: https://indiewebcamp.com/irc/2016-04-25#t1461606553653&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +0 [[User:Kylewm|Kylewm]] on replacing &amp;quot;T&amp;quot; as the separator. Would you please clarify whether that is only for value class pattern/assembling dates from components, or is it proposing to *always* normalize dt's?&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] this makes sense to me, and as far as I can tell, for the other cases too for *implied* properties:&lt;br /&gt;
** area[alt], abbr[title], and all other attributes where there is an existence test, there should be a :not[alt=&amp;quot;&amp;quot;] empty test, for implied p-name, u-photo, u-url&lt;br /&gt;
* +1 [[User:GRegorLove|gRegor]] sounds good to me.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65475</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65475"/>
		<updated>2016-04-22T00:45:26Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* implied name when alt=&amp;quot;&amp;quot; */ proposal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Proposal: modify the spec to explicitly exclude these tags:&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not([alt=&amp;quot;&amp;quot;]):not[.h-*] then use that img alt for name &lt;br /&gt;
&lt;br /&gt;
And audit the other implied rules for similar cases.&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65474</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65474"/>
		<updated>2016-04-22T00:43:24Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* implied name when alt=&amp;quot;&amp;quot; */ new issue&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== implied name when alt=&amp;quot;&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The implied name rule&lt;br /&gt;
&lt;br /&gt;
* else if .h-x&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
&lt;br /&gt;
is slightly under-specified for the case where alt is provided but intentionally blank. The desired behavior is to use the img alt tag only if it is non-empty. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;https://kylewm.com&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;https://kylewm.com/photo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  Kyle&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PHP and JS parsers already seem to return the desired result (&amp;quot;Kyle&amp;quot; in the above example). The Python parser uses the alt text and returns &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
Trying to make an author h-card without too many extra elements I first did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; &amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;u-logo&amp;quot; src=&amp;quot;/static/logo.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;mention.tech&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I was surprised that the p-name and p-org  took the src and the plaintext and concatenated them giving &amp;lt;code&amp;gt;http://mention-tech.appspot.com/static/logo.jpgmention.tech&amp;lt;/code&amp;gt;, though that is the current spec (a separate php-mf2 bug ignored the empty alt when I added it).&lt;br /&gt;
&lt;br /&gt;
While this is what the spec says, I can't think of a scenario where concatenating a string to a URL gives a useful result. Instead, if we fallback on the src of an img due to it having no alt I propose we put a space on beginning and end. As whitespace is stripped from beginning and end of p- values, this should still give the url in the simplest case, but avoid creating nonsensical URLs in cases like this.&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
Currently, Known templates end up linking to the author's url in the h-card twice. This leads to duplicate URLs in the parsed output, which make jf2 conversion insert a children element.&lt;br /&gt;
Should we be deduping URLs? Or is this a GIGO issue?&lt;br /&gt;
&lt;br /&gt;
=== unicode generation in JSON ===&lt;br /&gt;
Currently we will convert HTML entities into unicode as part of the parsing process. However, these and other non-asciicharacters can be output as escaped unicode in the generated JSON&lt;br /&gt;
Broadly this is OK, as we assume JSON parsers should be able to handle this accordingly.&lt;br /&gt;
However, it does mean the text is somewhat ambiguous, and unclear, especially when complex unicode codepoints like emoji are involved.&lt;br /&gt;
&lt;br /&gt;
Secondarily, when the parsed output of an e- element is presented, having \u escaped text in the HTML is not really valid, and utf8 would be preferred. That way the JSON output could safely pass through a naive string concatenation model as well as a valid unicode decoder (some languages do not cope with astral plane unicode well, yet utf8 safely encodes them).&lt;br /&gt;
&lt;br /&gt;
See https://github.com/tommorris/mf2py/issues/65 for further discussion of this.&lt;br /&gt;
&lt;br /&gt;
I have tweaked unmung to output utf8 instead for inline data entry, eg: [http://www.unmung.com/?url=&amp;amp;html=%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3EEntity+%26mdash%3B+emdash%3C%2Fspan%3E%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22h-entry%22%3E%3Cspan+class%3D%22e-name%22%3Eunicode+%E2%80%94+emdash+%E2%AD%90%EF%B8%8F%E2%9A%A1%EF%B8%8F%3C%2Fspan%3E%3C%2Fdiv%3E&amp;amp;pretty=on this case]&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: [http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on this twitter markup]&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Should &amp;quot;p-name&amp;quot; still be implied if another explicit class is already provided?&lt;br /&gt;
&lt;br /&gt;
Here is a somewhat contrived &amp;quot;u-url&amp;quot; related example, taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** -0 failed consensus, this proposal is rejected. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo&lt;br /&gt;
**** though if there is an img with u-featured but not u-photo, it's likely that was an explicit author decision (e.g. for an article) - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** Especially difficult to make a case for name.&lt;br /&gt;
**** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
**** Yet over-implied p-names appear to cause problems with many Bridgy webmention consuming use-cases[https://indiewebcamp.com/irc/2016-04-01/line/1459530869915], that's a good case - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
**** may need a broader rule, like any explicit p-* property on an element stops implied p-name. - [[User:Tantek|Tantek]] 22:11, 1 April 2016 (UTC)&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65445</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65445"/>
		<updated>2016-03-13T23:40:55Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* exclude style elements before parsing */ grammar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** ... provide input on this proposal here&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo and especially for name.&lt;br /&gt;
*** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65444</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65444"/>
		<updated>2016-03-13T23:40:28Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* exclude style elements before parsing */ +1 barnabywalters narrowed proposal for &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; tags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] php-mf2 already ignores classnames with capitalised prefixes, ignoring any classnames with capital letters seems totally reasonable &lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] +1 to removing the contents of &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from all plaintext properties (and 'value' property in HTML dicts), -1 to removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; from HTML. That’s a job for a sanitization stage. As aaronpk points out, sanitization will have to be done anyway if the content is to be reposted, so doing so in the parser doesn’t actually save anyone any work, but removes information which could be useful to people (example use cases: publishing posts with embedded per-post styling, publishing interactive HTML documents with embedded javascript)&lt;br /&gt;
** +1 this seems like reasonable feedback to make a new refined proposal. [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
** +1 I like the revised proposal and am happy to change my vote to this [[User:Aaronpk|Aaronpk]] 21:16, 13 March 2016 (UTC)&lt;br /&gt;
** +1 Totally agree with the narrowing the proposal. All the problems I've had with script and style tags come from plaintext properties, and agree that they may even be useful to some consumers of the HTML properties (e.g. an embedded YouTube video) [[User:Kylewm|Kylewm]] 23:40, 13 March 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proposal 2: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (except for e-* HTML values, which preserve all markup). [[User:Tantek|Tantek]] 20:37, 13 March 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] easy to implement and based on real-world markup, no objections&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** +1 Barnaby, php-mf2’s mf1 backcompat produces this exact result, and it makes a lot of sense to me&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* +1 [[User:Barnabywalters|Barnaby]] agreed with Glenn, this would be a nice thing to have, but IMO it’s out of scope for the parser and should be specified separately. Personally I would probably implement it separately too, depending on how much work it is.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
* 0 [[User:Barnabywalters|Barnaby]] to me this should be treated the same as the script/style contents — removed completely from all plaintext properties, but left unaltered in raw HTML.&lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* [[User:Barnabywalters|Barnaby]] in theory, as the video and audio data by default can’t be included in plaintext properties, and the fallback content (much like img alt attributes) should be somehow human-readable and useful, I would suggest keeping it in plaintext properties. I’d like to see some real-world examples of what fallback content people are using — if it’s links or plaintext descriptions this approach could work well, if people are writing instructions saying “install flash” or “update your browser” it’s not going to produce very pretty results&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** ... provide input on this proposal here&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo and especially for name.&lt;br /&gt;
*** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65422</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65422"/>
		<updated>2016-02-29T16:39:49Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* exclude style elements before parsing */ +1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
Due to Suit CSS (and others? citations?) recent (2015-?) use of &amp;quot;u-*&amp;quot; class names for so-called &amp;quot;[http://davidtheclark.com/on-utility-classes/ utility classes]&amp;quot;, we are seeing some false positives in a few very rare instances, e.g.: http://www.unmung.com/mf2?url=http%3A%2F%2Fwww.kevinmarks.com%2Ftwitterutils.html&amp;amp;html=&amp;amp;pretty=on&lt;br /&gt;
&lt;br /&gt;
(Nearly) all these &amp;quot;utility classes&amp;quot; use camelCase for the class name suffixes, thus we can filter them out by looking for camelCase (since microformats class name conventions are always all lowercase and hyphenated), or even just looking for (and rejecting) *any* capital letters.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* microformats2 parsers MUST IGNORE u-* classnames where the * has any uppercase letter(s).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] Let's get this fix rolling quickly to avoid further pollution.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats#c85457 2016-01-25 raised in #microformats]&lt;br /&gt;
&lt;br /&gt;
Ran into an issue of a &amp;lt;style&amp;gt; element being parsed as plain text in a p-name. Should [[microformats2-parsing]] be updated to indicate &amp;lt;style&amp;gt; should be excluded when parsing? Appears to implicitly fall under [[microformats2-parsing#note_HTML_parsing_rules]]&lt;br /&gt;
&lt;br /&gt;
Sample link: http://veganstraightedge.com/notes/2016/01/16/tonight-s-dinner-tacocleanse-beverly-hills-c&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;script&amp;gt; tag can be similarly problematic.&lt;br /&gt;
&lt;br /&gt;
Proposal: Drop both &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; elements completely when parsing any property (including e-* HTML values). [[User:Tantek|Tantek]] 01:01, 29 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Please discuss and/or give +1/0/-1 feedback&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as proposer&lt;br /&gt;
* +1 [[User:Aaronpk|aaronpk]] as a consumer of HTML from an e-* property, I will always be sanitizing the HTML and removing &amp;lt;script&amp;gt; and &amp;lt;style&amp;gt; anyway&lt;br /&gt;
* +1 [[User:Kylewm|kylewm]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use poster if no src on video for u props ===&lt;br /&gt;
[https://indiewebcamp.com/irc/2015-12-13#t1450035721661 2015-12-13 raised in #indiewebcamp]&lt;br /&gt;
&lt;br /&gt;
There is a use-case of marking up the &amp;quot;poster&amp;quot; of a video element as the u-featured of an [[h-entry]], to do that, we need to change [[microformats2-parsing#parsing_a_u-_property|u- property parsing]] to look at the poster attribute of the video element, after it's looked for the src attribute.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot; else if video.u-x[poster], then get the poster attribute &amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Real-world example of markup in the wild:&lt;br /&gt;
* http://veganstraightedge.com/videos/2013/5/31/1/backyard-squirrel-buddy&lt;br /&gt;
** and likely all other videos posted there.&lt;br /&gt;
&lt;br /&gt;
Background discussion that led to this proposal:&lt;br /&gt;
* https://indiewebcamp.com/irc/2015-12-13#t1450035721661&lt;br /&gt;
&lt;br /&gt;
This seems very straightforward so I've added it as PROPOSED directly in the parsing spec. This issue is for tracking the discussion.&lt;br /&gt;
&lt;br /&gt;
Feedback from parser implementers please!&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** ... provide input on this proposal here&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo and especially for name.&lt;br /&gt;
*** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65336</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65336"/>
		<updated>2015-12-01T00:48:16Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* implied properties when an explicit class is provided */ simplify suggested modification to implied url prasing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** ... provide input on this proposal here&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*&amp;lt;strong&amp;gt;,.u-*&amp;lt;/strong&amp;gt;]&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo and especially for name.&lt;br /&gt;
*** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65335</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65335"/>
		<updated>2015-12-01T00:46:29Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* implied properties when an explicit class is provided */ suggestion: split these out per property. I suspect it only affects u-url.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-adr&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** +1 Calli, yes, this is easier for me to implement (than taking both MF1 and MF2 properties) because it is consistent - for me, consistency is the controlling factor in favor rather than ease of parser implementation&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;adr h-custom&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
&amp;quot;items&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;adr&amp;quot;: [{&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;MF1MF2&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-custom&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;locality&amp;quot;: [&amp;quot;MF2&amp;quot;],&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;MF1MF2&amp;quot;]&lt;br /&gt;
       }&lt;br /&gt;
     }]&lt;br /&gt;
   }  &lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[#any_h-_root_class_name_overrides_and_stops_backcompat_root]] resolution, the class name &amp;quot;h-custom&amp;quot; overrides the use of &amp;quot;adr&amp;quot; as a backcompat root.&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
*** +1 this seems reasonable, if a publisher is going to add an mf2 class, it is unlikely they want other classes automatically implied from the same value [[User:Aaronpk|Aaronpk]] 23:19, 29 November 2015 (UTC)&lt;br /&gt;
*** -1 for now. To my knowledge, this has only been observed in artificially constructed unit tests and examples, and it adds some weird edge cases that are hard to reason about. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** ... provide input on this proposal here&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
** Suggestion: split this issue up per property. I think it makes sense for u-url and can be easily added to the spec as e.g. &amp;quot;.h-x&amp;gt;a[href]:only-of-type:not[.h-*]&amp;lt;strong&amp;gt;:not[.u-*]&amp;lt;/strong&amp;gt;&amp;quot;. [[User:Kylewm|Kylewm]] 00:46, 1 December 2015 (UTC)&lt;br /&gt;
*** Obviously wrong to assume a link explicitly pointing elsewhere is our &amp;quot;url&amp;quot; &lt;br /&gt;
*** More difficult to make a case for photo and especially for name.&lt;br /&gt;
*** &amp;quot;name&amp;quot; is implied at least by [.h-x textContent], so often the excluded element would end up included anyway.&lt;br /&gt;
*** ... provide input on this refined proposal here&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65318</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65318"/>
		<updated>2015-11-25T01:36:25Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* uf2 children on backcompat properties */ +1 resolution to treat mf1 properties like mf1 children&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
[http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c84632 2015-11-24 raised by Calli] in #microformats&lt;br /&gt;
&lt;br /&gt;
Related but different from [[#uf2_children_inside_a_classic_microformats_root_class_name]], when there is a uf2 child directly on a backcompat property, what should happen? E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;MF1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;p-locality&amp;quot;&amp;gt;MF2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What is the expected behavior and parser output?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: the nested &amp;quot;adr h-adr&amp;quot; child is treated as an mf2 object, not backcompat, and thus the resulting parsed &amp;quot;locality&amp;quot; property has a single value of &amp;quot;MF2&amp;quot;. Proposed by Calli, noting that Glenn Jones's microformatshiv gets that result currently, and it would be easier for him (Calli) to implement this way.&lt;br /&gt;
** +1 Tantek, seems reasonable and the reasoning provided is good (we have one implementation this way already)&lt;br /&gt;
** +1 Kyle, this is consistent with the resolution to the related issue&lt;br /&gt;
** ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2015-09-08 raised by Tantek in #indiewebcamp&lt;br /&gt;
&lt;br /&gt;
Should there be a default (perhaps not quite &amp;quot;canonical&amp;quot;) way to map/generate HTML+microformats2 from a parsed mf2 JSON output?&lt;br /&gt;
&lt;br /&gt;
E.g. straw proposal:&lt;br /&gt;
* JSON/mf2 -&amp;gt; [[XOXO]]+mf2&lt;br /&gt;
&lt;br /&gt;
Existing work / mappings:&lt;br /&gt;
* https://github.com/snarfed/granary/blob/master/granary/microformats2.py#L295&lt;br /&gt;
&lt;br /&gt;
Related to:&lt;br /&gt;
* https://github.com/snarfed/granary/issues/31&lt;br /&gt;
&lt;br /&gt;
Use-cases:&lt;br /&gt;
* default webview / presentation for a site that stores mf2 JSON output&lt;br /&gt;
* possibly a way to implement a distributed HTTP webcache retrieval protocol&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] I think we should have this, but am open to proposals on specifics!&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] Also think this is worth looking at, but I am not sure it should be part of the parser spec. Feels like it should be built as a separate library and have it own spec on the microformats wiki.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] skip noscript (and inside) because in today's typical browsing contexts, nothing in noscript is displayed, thus we should discourage marking up effectively invisible content.&lt;br /&gt;
** Proposed change to [[microformats2-parsing#parse_a_document_for_microformats]]:&lt;br /&gt;
*** from: &amp;quot;follow the HTML parsing rules&amp;quot;&lt;br /&gt;
*** to: &amp;quot;follow the HTML parsing rules (including skipping/omitting &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; elements, e.g. like the html5lib DOM parser)&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] This subject does need to be address, but differently to proposed change. My personal view is that  e-* html should be passed through raw and then the consumer can process it in a way they feel fit. Its a case for helper libraries. I am about to build a helper library to do this based on the Readability code to post process e-* html. Other people may want to take different approaches, defining this in the spec feels like move into a whole area of new functionally.  &lt;br /&gt;
&lt;br /&gt;
As a separate new point we need to consider &amp;quot;exclude tags&amp;quot; lists for parsed text from html.  We should consider &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;noframe&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; there maybe other I have not gone through all the tags in current HTML spec. Also we should consider what to do about the more common pattern of fallback text within media tags &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt; etc. This should be explicitly discussed in the parsing rules. At the moment my experimental text normalisation does exclude tags, but the default text parse does not. Currently the fallback content in media tags like &amp;lt;code&amp;gt;&amp;lt;video&amp;gt;&amp;lt;/code&amp;gt; is added to the parse text. 12:56, 25 Septemeber 2015 (UTC)&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;&lt;br /&gt;
Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is (somewhat) covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'W3C Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] output more human readable &amp;lt;code&amp;gt;2015-07-28 12:55:33&amp;lt;/code&amp;gt; canonically, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string.&lt;br /&gt;
** Let's update any test cases as needed for this. - [[User:Tantek|Tantek]]&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
** Refined: Or should this be refined by per parsing prefix? [[User:Tantek|Tantek]] 22:59, 18 September 2015 (UTC) &lt;br /&gt;
*** Any explicit &amp;quot;p-*&amp;quot; property means no implied &amp;quot;p-name&amp;quot; from that element&lt;br /&gt;
*** Any explicit &amp;quot;u-*&amp;quot; property means no implied &amp;quot;u-url&amp;quot; nor &amp;quot;u-photo&amp;quot; from that element.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform to the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation ===&lt;br /&gt;
Status: resolved, existing behavior correct, no changes to parsing spec.&lt;br /&gt;
&lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names on that same element. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
** added &amp;quot;on that same element&amp;quot; as that was what we were discussing/implying in this issue. [[User:Tantek|Tantek]] 22:49, 18 September 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
*** The &amp;quot;parsing for implied properties&amp;quot; section only references name, photo, url properties. Where (in the spec) is the confusion about &amp;quot;value&amp;quot; coming from? [[User:Tantek|Tantek]]&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=spread-microformats&amp;diff=65216</id>
		<title>spread-microformats</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=spread-microformats&amp;diff=65216"/>
		<updated>2015-09-05T04:27:44Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* logo text */ all these hotlinked images are weird&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;Spread Microformats&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inspired by [http://spreadfirefox.com/ Spread Firefox], this page is for sharing community resources for marketing microformats such as [[buttons]], banners, wallpaper / desktop screens, logo graphics, [[stickers]], t-shirts etc.&lt;br /&gt;
&lt;br /&gt;
== Email ==&lt;br /&gt;
* See [[advocacy-email-samples]] for some sample emails you can copy/customize and send to site owners to encourage them adopt microformats.&lt;br /&gt;
&lt;br /&gt;
== Wallpaper ==&lt;br /&gt;
=== Wallpaper and desktop screens. ===&lt;br /&gt;
* A [https://web.archive.org/web/20111128072549/http://remiprevost.com/images/wallpapers/microformats/ wallpaper] by [[User:Remi|Rémi Prévost]]&lt;br /&gt;
&lt;br /&gt;
== Logo ==&lt;br /&gt;
&lt;br /&gt;
=== logo text ===&lt;br /&gt;
&lt;br /&gt;
https://web.archive.org/web/20110820103746/http://img.skitch.com/20090715-c3xmikadkj8udt4sq6aqfkqtac.png&lt;br /&gt;
&lt;br /&gt;
* High-resolution [http://simplebits.com/bits/microformats/microformats-logo.eps EPS] and  [http://simplebits.com/bits/microformats/microformats-logo.png transparent PNG] versions of the microformats logo text by [[User:DanCederholm|Dan Cederholm]].&lt;br /&gt;
* the microformats typeface is [http://new.myfonts.com/fonts/emigre/solex/medium/ Solex] by Emigre.&lt;br /&gt;
&lt;br /&gt;
=== logo mark ===&lt;br /&gt;
* A [https://web.archive.org/web/20111128072549/http://remiprevost.com/images/wallpapers/microformats/mf-vector.svg SVG] and [https://web.archive.org/web/20111128072549/http://remiprevost.com/images/wallpapers/microformats/mf-vector.png PNG] (for Fireworks) version of the microformats logo, by [[User:Remi|Rémi Prévost]]&lt;br /&gt;
&lt;br /&gt;
== POSH ==&lt;br /&gt;
* [[posh|POSH]] logos and buttons&lt;br /&gt;
&lt;br /&gt;
== stickers ==&lt;br /&gt;
See the [[stickers]] page to easily order a set of moo microformats stickers!&lt;br /&gt;
&lt;br /&gt;
== T-Shirts ==&lt;br /&gt;
* See [http://flickr.com/photos/tags/microformatstshirt photos of microformats tshirts on Flickr] (the [http://flickr.com/photos/tags/microformatstshirt/clusters/ clusters] are especially fun)&lt;br /&gt;
** Note also [http://pixelsebi.com/2006-10-26/microformats-t-shirt-in-second-life/ microformats t-shirt in Second Life]&lt;br /&gt;
=== do it yourself tshirts ===&lt;br /&gt;
[[User:TheJbf|Burcu Dogan]] has made her own microformats t-shirt:&lt;br /&gt;
&lt;br /&gt;
http://i44.tinypic.com/2s01i1j.jpg&lt;br /&gt;
&lt;br /&gt;
For those who are not able to find a microformats t-shirt, it is possible to make one at home less than an hour. The requirements for such a pressing process are listed below:&lt;br /&gt;
* A high quality microformats logo (which can be found below the '''Logo headline''' on this page)&lt;br /&gt;
* A black t-shirt&lt;br /&gt;
* An iron-on transfer paper for '''dark t-shirts''' (note that printers doesn't print white, so there're special papers to print white on dark)&lt;br /&gt;
* An iron an a hard surface. (Ironing press with a large surface is highly recommended.)&lt;br /&gt;
* A laser printer&lt;br /&gt;
* Sharp and sensitive scissors&lt;br /&gt;
* Non-metalic heat resisting papers&lt;br /&gt;
&lt;br /&gt;
('''Warning:''' Take the instructions on the transfer paper you bought as the first reference, we're not responsible for unsuccessful attempts. Tips about pressing can change from paper to paper.)&lt;br /&gt;
&lt;br /&gt;
Firstly, you need to print the logo on the transfer paper. Transfer papers for dark t-shirts are sticky backed white papers which vary in size. You need to decide which size you want to press on your t-shirt. A4 and A3 are suitable for microformats t-shirts.&lt;br /&gt;
&lt;br /&gt;
Print the logo with a black background. The result of the paper printed should look like this: &lt;br /&gt;
&lt;br /&gt;
http://i40.tinypic.com/2ylqqmb.jpg&lt;br /&gt;
&lt;br /&gt;
(You can, of course decrease, the amount of background area to save ink)&lt;br /&gt;
&lt;br /&gt;
Now it is time to separate logo from the background. Carefully clip the edges and get the logo all alone. White borders should stay with the green layers, don't make a mistake by clipping them out.&lt;br /&gt;
&lt;br /&gt;
Prepare the iron press, you will need the highest temperature with no stream to transfer successfully. Give your press at least 10 minutes to heat fully. While the iron is heating, decide which position your logo should appear. Use a ruler to check if the logo is positioned symmetrically.&lt;br /&gt;
&lt;br /&gt;
http://i41.tinypic.com/2v334pc.png&lt;br /&gt;
&lt;br /&gt;
If your iron press is heated, gently peel the tiny paper on the back of the transfer paper to make it sticky. Place it on the t-shirt and put 1 or 2 non-metalic heat resisting paper of any kind on the logo. Be sure that transfer paper doesn't overlap.&lt;br /&gt;
&lt;br /&gt;
http://i40.tinypic.com/kcl7gk.png&lt;br /&gt;
&lt;br /&gt;
Press the iron for 10-15 seconds. This actually depends on the paper you are using, so it is best to follow the instructions on the iron-on transfer paper you purchased. If necessary repress the iron on the whole surface for 5-10 seconds again. &lt;br /&gt;
&lt;br /&gt;
And, you made a new microformats t-shirt! Don't forget to take a picture and share.&lt;br /&gt;
&lt;br /&gt;
Note that you should hand wash your t-shirt and iron it from back carefully. Don't forget that it is also possible to use another fabrics such as bags to print microformats logos. We're waiting for your creations.&lt;br /&gt;
&lt;br /&gt;
== External online community resources ==&lt;br /&gt;
&lt;br /&gt;
=== Video ===&lt;br /&gt;
* See [http://www.youtube.com/results?search_query=microformats videos of microformats on YouTube] or [http://vimeo.com/groups/microformats Vimeo], in particular, a [http://www.youtube.com/watch?v=UAV4SGpPuQI video of a microformats tshirt] ([http://www.flickr.com/photos/fumi/372068162/ photo]).&lt;br /&gt;
&lt;br /&gt;
===Social networking===&lt;br /&gt;
Groups for fans and advocates of microformats to join or follow:&amp;lt;!--listed alphabetically--&amp;gt;&lt;br /&gt;
* [http://www.facebook.com/microformats Facebook microformats fan page]&lt;br /&gt;
* [http://www.facebook.com/group.php?gid=2374732285 Facebook microformats group]&lt;br /&gt;
* [http://flickr.com/groups/microformats/ Flickr microformats group]&lt;br /&gt;
* [http://getsatisfaction.com/microformats microformats on Satisfaction]&lt;br /&gt;
* [http://twitter.com/microformats microformats on Twitter].&lt;br /&gt;
&lt;br /&gt;
=== wiki-communities ===&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Wikipedia:WikiProject_Microformats Wikipedia: Project Microformats]&lt;br /&gt;
**[http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EC%9C%84%ED%82%A4%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8_%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%ED%8F%AC%EB%A7%B7 -&amp;quot; - in Korean]&lt;br /&gt;
**[http://zh.wikipedia.org/wiki/Wikipedia:%E5%B0%88%E9%A1%8C/%E5%BE%AE%E6%A0%BC%E5%BC%8F -&amp;quot; - in Chinese]&lt;br /&gt;
* [http://www.usemod.com/cgi-bin/mb.pl?MicroFormats meatball:microformats] -- a first page (stub to be reviewed) dedicated to have any review/opinion from the meatballers especially on the wiki-formats.&lt;br /&gt;
* [http://communitywiki.org/fr/MicroFormats communitywiki:microformats] -- an old multilingual page with a blockcodemachine proposal.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[advocacy]]&lt;br /&gt;
* [[buttons]]&lt;br /&gt;
* [[podcasts]]&lt;br /&gt;
* [[presentations]]&lt;br /&gt;
* [[press]]&lt;br /&gt;
* [[2d_barcodes]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=spread-microformats&amp;diff=65215</id>
		<title>spread-microformats</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=spread-microformats&amp;diff=65215"/>
		<updated>2015-09-05T04:23:37Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* logo mark */ fix links with archive.org&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;Spread Microformats&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inspired by [http://spreadfirefox.com/ Spread Firefox], this page is for sharing community resources for marketing microformats such as [[buttons]], banners, wallpaper / desktop screens, logo graphics, [[stickers]], t-shirts etc.&lt;br /&gt;
&lt;br /&gt;
== Email ==&lt;br /&gt;
* See [[advocacy-email-samples]] for some sample emails you can copy/customize and send to site owners to encourage them adopt microformats.&lt;br /&gt;
&lt;br /&gt;
== Wallpaper ==&lt;br /&gt;
=== Wallpaper and desktop screens. ===&lt;br /&gt;
* A [https://web.archive.org/web/20111128072549/http://remiprevost.com/images/wallpapers/microformats/ wallpaper] by [[User:Remi|Rémi Prévost]]&lt;br /&gt;
&lt;br /&gt;
== Logo ==&lt;br /&gt;
&lt;br /&gt;
=== logo text ===&lt;br /&gt;
[http://microformats.org/img/logo.gif http://img.skitch.com/20090715-c3xmikadkj8udt4sq6aqfkqtac.png]&lt;br /&gt;
&lt;br /&gt;
* High-resolution [http://simplebits.com/bits/microformats/microformats-logo.eps EPS] and  [http://simplebits.com/bits/microformats/microformats-logo.png transparent PNG] versions of the microformats logo text by [[User:DanCederholm|Dan Cederholm]].&lt;br /&gt;
* the microformats typeface is [http://new.myfonts.com/fonts/emigre/solex/medium/ Solex] by Emigre.&lt;br /&gt;
&lt;br /&gt;
=== logo mark ===&lt;br /&gt;
* A [https://web.archive.org/web/20111128072549/http://remiprevost.com/images/wallpapers/microformats/mf-vector.svg SVG] and [https://web.archive.org/web/20111128072549/http://remiprevost.com/images/wallpapers/microformats/mf-vector.png PNG] (for Fireworks) version of the microformats logo, by [[User:Remi|Rémi Prévost]]&lt;br /&gt;
&lt;br /&gt;
== POSH ==&lt;br /&gt;
* [[posh|POSH]] logos and buttons&lt;br /&gt;
&lt;br /&gt;
== stickers ==&lt;br /&gt;
See the [[stickers]] page to easily order a set of moo microformats stickers!&lt;br /&gt;
&lt;br /&gt;
== T-Shirts ==&lt;br /&gt;
* See [http://flickr.com/photos/tags/microformatstshirt photos of microformats tshirts on Flickr] (the [http://flickr.com/photos/tags/microformatstshirt/clusters/ clusters] are especially fun)&lt;br /&gt;
** Note also [http://pixelsebi.com/2006-10-26/microformats-t-shirt-in-second-life/ microformats t-shirt in Second Life]&lt;br /&gt;
=== do it yourself tshirts ===&lt;br /&gt;
[[User:TheJbf|Burcu Dogan]] has made her own microformats t-shirt:&lt;br /&gt;
&lt;br /&gt;
http://i44.tinypic.com/2s01i1j.jpg&lt;br /&gt;
&lt;br /&gt;
For those who are not able to find a microformats t-shirt, it is possible to make one at home less than an hour. The requirements for such a pressing process are listed below:&lt;br /&gt;
* A high quality microformats logo (which can be found below the '''Logo headline''' on this page)&lt;br /&gt;
* A black t-shirt&lt;br /&gt;
* An iron-on transfer paper for '''dark t-shirts''' (note that printers doesn't print white, so there're special papers to print white on dark)&lt;br /&gt;
* An iron an a hard surface. (Ironing press with a large surface is highly recommended.)&lt;br /&gt;
* A laser printer&lt;br /&gt;
* Sharp and sensitive scissors&lt;br /&gt;
* Non-metalic heat resisting papers&lt;br /&gt;
&lt;br /&gt;
('''Warning:''' Take the instructions on the transfer paper you bought as the first reference, we're not responsible for unsuccessful attempts. Tips about pressing can change from paper to paper.)&lt;br /&gt;
&lt;br /&gt;
Firstly, you need to print the logo on the transfer paper. Transfer papers for dark t-shirts are sticky backed white papers which vary in size. You need to decide which size you want to press on your t-shirt. A4 and A3 are suitable for microformats t-shirts.&lt;br /&gt;
&lt;br /&gt;
Print the logo with a black background. The result of the paper printed should look like this: &lt;br /&gt;
&lt;br /&gt;
http://i40.tinypic.com/2ylqqmb.jpg&lt;br /&gt;
&lt;br /&gt;
(You can, of course decrease, the amount of background area to save ink)&lt;br /&gt;
&lt;br /&gt;
Now it is time to separate logo from the background. Carefully clip the edges and get the logo all alone. White borders should stay with the green layers, don't make a mistake by clipping them out.&lt;br /&gt;
&lt;br /&gt;
Prepare the iron press, you will need the highest temperature with no stream to transfer successfully. Give your press at least 10 minutes to heat fully. While the iron is heating, decide which position your logo should appear. Use a ruler to check if the logo is positioned symmetrically.&lt;br /&gt;
&lt;br /&gt;
http://i41.tinypic.com/2v334pc.png&lt;br /&gt;
&lt;br /&gt;
If your iron press is heated, gently peel the tiny paper on the back of the transfer paper to make it sticky. Place it on the t-shirt and put 1 or 2 non-metalic heat resisting paper of any kind on the logo. Be sure that transfer paper doesn't overlap.&lt;br /&gt;
&lt;br /&gt;
http://i40.tinypic.com/kcl7gk.png&lt;br /&gt;
&lt;br /&gt;
Press the iron for 10-15 seconds. This actually depends on the paper you are using, so it is best to follow the instructions on the iron-on transfer paper you purchased. If necessary repress the iron on the whole surface for 5-10 seconds again. &lt;br /&gt;
&lt;br /&gt;
And, you made a new microformats t-shirt! Don't forget to take a picture and share.&lt;br /&gt;
&lt;br /&gt;
Note that you should hand wash your t-shirt and iron it from back carefully. Don't forget that it is also possible to use another fabrics such as bags to print microformats logos. We're waiting for your creations.&lt;br /&gt;
&lt;br /&gt;
== External online community resources ==&lt;br /&gt;
&lt;br /&gt;
=== Video ===&lt;br /&gt;
* See [http://www.youtube.com/results?search_query=microformats videos of microformats on YouTube] or [http://vimeo.com/groups/microformats Vimeo], in particular, a [http://www.youtube.com/watch?v=UAV4SGpPuQI video of a microformats tshirt] ([http://www.flickr.com/photos/fumi/372068162/ photo]).&lt;br /&gt;
&lt;br /&gt;
===Social networking===&lt;br /&gt;
Groups for fans and advocates of microformats to join or follow:&amp;lt;!--listed alphabetically--&amp;gt;&lt;br /&gt;
* [http://www.facebook.com/microformats Facebook microformats fan page]&lt;br /&gt;
* [http://www.facebook.com/group.php?gid=2374732285 Facebook microformats group]&lt;br /&gt;
* [http://flickr.com/groups/microformats/ Flickr microformats group]&lt;br /&gt;
* [http://getsatisfaction.com/microformats microformats on Satisfaction]&lt;br /&gt;
* [http://twitter.com/microformats microformats on Twitter].&lt;br /&gt;
&lt;br /&gt;
=== wiki-communities ===&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Wikipedia:WikiProject_Microformats Wikipedia: Project Microformats]&lt;br /&gt;
**[http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EC%9C%84%ED%82%A4%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8_%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%ED%8F%AC%EB%A7%B7 -&amp;quot; - in Korean]&lt;br /&gt;
**[http://zh.wikipedia.org/wiki/Wikipedia:%E5%B0%88%E9%A1%8C/%E5%BE%AE%E6%A0%BC%E5%BC%8F -&amp;quot; - in Chinese]&lt;br /&gt;
* [http://www.usemod.com/cgi-bin/mb.pl?MicroFormats meatball:microformats] -- a first page (stub to be reviewed) dedicated to have any review/opinion from the meatballers especially on the wiki-formats.&lt;br /&gt;
* [http://communitywiki.org/fr/MicroFormats communitywiki:microformats] -- an old multilingual page with a blockcodemachine proposal.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[advocacy]]&lt;br /&gt;
* [[buttons]]&lt;br /&gt;
* [[podcasts]]&lt;br /&gt;
* [[presentations]]&lt;br /&gt;
* [[press]]&lt;br /&gt;
* [[2d_barcodes]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=spread-microformats&amp;diff=65214</id>
		<title>spread-microformats</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=spread-microformats&amp;diff=65214"/>
		<updated>2015-09-05T04:21:58Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Wallpaper and desktop screens. */ replace with archive.org link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;Spread Microformats&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inspired by [http://spreadfirefox.com/ Spread Firefox], this page is for sharing community resources for marketing microformats such as [[buttons]], banners, wallpaper / desktop screens, logo graphics, [[stickers]], t-shirts etc.&lt;br /&gt;
&lt;br /&gt;
== Email ==&lt;br /&gt;
* See [[advocacy-email-samples]] for some sample emails you can copy/customize and send to site owners to encourage them adopt microformats.&lt;br /&gt;
&lt;br /&gt;
== Wallpaper ==&lt;br /&gt;
=== Wallpaper and desktop screens. ===&lt;br /&gt;
* A [https://web.archive.org/web/20111128072549/http://remiprevost.com/images/wallpapers/microformats/ wallpaper] by [[User:Remi|Rémi Prévost]]&lt;br /&gt;
&lt;br /&gt;
== Logo ==&lt;br /&gt;
&lt;br /&gt;
=== logo text ===&lt;br /&gt;
[http://microformats.org/img/logo.gif http://img.skitch.com/20090715-c3xmikadkj8udt4sq6aqfkqtac.png]&lt;br /&gt;
&lt;br /&gt;
* High-resolution [http://simplebits.com/bits/microformats/microformats-logo.eps EPS] and  [http://simplebits.com/bits/microformats/microformats-logo.png transparent PNG] versions of the microformats logo text by [[User:DanCederholm|Dan Cederholm]].&lt;br /&gt;
* the microformats typeface is [http://new.myfonts.com/fonts/emigre/solex/medium/ Solex] by Emigre.&lt;br /&gt;
&lt;br /&gt;
=== logo mark ===&lt;br /&gt;
* (SVG and PNG files no longer exist at this URL) &amp;lt;nowiki&amp;gt;A [http://remiprevost.com/images/wallpapers/microformats/mf-vector.svg SVG] and [http://remiprevost.com/images/wallpapers/microformats/mf-vector.png PNG] (for Fireworks) version of the microformats logo&amp;lt;/nowiki&amp;gt;, by [[User:Remi|Rémi Prévost]]&lt;br /&gt;
&lt;br /&gt;
== POSH ==&lt;br /&gt;
* [[posh|POSH]] logos and buttons&lt;br /&gt;
&lt;br /&gt;
== stickers ==&lt;br /&gt;
See the [[stickers]] page to easily order a set of moo microformats stickers!&lt;br /&gt;
&lt;br /&gt;
== T-Shirts ==&lt;br /&gt;
* See [http://flickr.com/photos/tags/microformatstshirt photos of microformats tshirts on Flickr] (the [http://flickr.com/photos/tags/microformatstshirt/clusters/ clusters] are especially fun)&lt;br /&gt;
** Note also [http://pixelsebi.com/2006-10-26/microformats-t-shirt-in-second-life/ microformats t-shirt in Second Life]&lt;br /&gt;
=== do it yourself tshirts ===&lt;br /&gt;
[[User:TheJbf|Burcu Dogan]] has made her own microformats t-shirt:&lt;br /&gt;
&lt;br /&gt;
http://i44.tinypic.com/2s01i1j.jpg&lt;br /&gt;
&lt;br /&gt;
For those who are not able to find a microformats t-shirt, it is possible to make one at home less than an hour. The requirements for such a pressing process are listed below:&lt;br /&gt;
* A high quality microformats logo (which can be found below the '''Logo headline''' on this page)&lt;br /&gt;
* A black t-shirt&lt;br /&gt;
* An iron-on transfer paper for '''dark t-shirts''' (note that printers doesn't print white, so there're special papers to print white on dark)&lt;br /&gt;
* An iron an a hard surface. (Ironing press with a large surface is highly recommended.)&lt;br /&gt;
* A laser printer&lt;br /&gt;
* Sharp and sensitive scissors&lt;br /&gt;
* Non-metalic heat resisting papers&lt;br /&gt;
&lt;br /&gt;
('''Warning:''' Take the instructions on the transfer paper you bought as the first reference, we're not responsible for unsuccessful attempts. Tips about pressing can change from paper to paper.)&lt;br /&gt;
&lt;br /&gt;
Firstly, you need to print the logo on the transfer paper. Transfer papers for dark t-shirts are sticky backed white papers which vary in size. You need to decide which size you want to press on your t-shirt. A4 and A3 are suitable for microformats t-shirts.&lt;br /&gt;
&lt;br /&gt;
Print the logo with a black background. The result of the paper printed should look like this: &lt;br /&gt;
&lt;br /&gt;
http://i40.tinypic.com/2ylqqmb.jpg&lt;br /&gt;
&lt;br /&gt;
(You can, of course decrease, the amount of background area to save ink)&lt;br /&gt;
&lt;br /&gt;
Now it is time to separate logo from the background. Carefully clip the edges and get the logo all alone. White borders should stay with the green layers, don't make a mistake by clipping them out.&lt;br /&gt;
&lt;br /&gt;
Prepare the iron press, you will need the highest temperature with no stream to transfer successfully. Give your press at least 10 minutes to heat fully. While the iron is heating, decide which position your logo should appear. Use a ruler to check if the logo is positioned symmetrically.&lt;br /&gt;
&lt;br /&gt;
http://i41.tinypic.com/2v334pc.png&lt;br /&gt;
&lt;br /&gt;
If your iron press is heated, gently peel the tiny paper on the back of the transfer paper to make it sticky. Place it on the t-shirt and put 1 or 2 non-metalic heat resisting paper of any kind on the logo. Be sure that transfer paper doesn't overlap.&lt;br /&gt;
&lt;br /&gt;
http://i40.tinypic.com/kcl7gk.png&lt;br /&gt;
&lt;br /&gt;
Press the iron for 10-15 seconds. This actually depends on the paper you are using, so it is best to follow the instructions on the iron-on transfer paper you purchased. If necessary repress the iron on the whole surface for 5-10 seconds again. &lt;br /&gt;
&lt;br /&gt;
And, you made a new microformats t-shirt! Don't forget to take a picture and share.&lt;br /&gt;
&lt;br /&gt;
Note that you should hand wash your t-shirt and iron it from back carefully. Don't forget that it is also possible to use another fabrics such as bags to print microformats logos. We're waiting for your creations.&lt;br /&gt;
&lt;br /&gt;
== External online community resources ==&lt;br /&gt;
&lt;br /&gt;
=== Video ===&lt;br /&gt;
* See [http://www.youtube.com/results?search_query=microformats videos of microformats on YouTube] or [http://vimeo.com/groups/microformats Vimeo], in particular, a [http://www.youtube.com/watch?v=UAV4SGpPuQI video of a microformats tshirt] ([http://www.flickr.com/photos/fumi/372068162/ photo]).&lt;br /&gt;
&lt;br /&gt;
===Social networking===&lt;br /&gt;
Groups for fans and advocates of microformats to join or follow:&amp;lt;!--listed alphabetically--&amp;gt;&lt;br /&gt;
* [http://www.facebook.com/microformats Facebook microformats fan page]&lt;br /&gt;
* [http://www.facebook.com/group.php?gid=2374732285 Facebook microformats group]&lt;br /&gt;
* [http://flickr.com/groups/microformats/ Flickr microformats group]&lt;br /&gt;
* [http://getsatisfaction.com/microformats microformats on Satisfaction]&lt;br /&gt;
* [http://twitter.com/microformats microformats on Twitter].&lt;br /&gt;
&lt;br /&gt;
=== wiki-communities ===&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Wikipedia:WikiProject_Microformats Wikipedia: Project Microformats]&lt;br /&gt;
**[http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EC%9C%84%ED%82%A4%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8_%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%ED%8F%AC%EB%A7%B7 -&amp;quot; - in Korean]&lt;br /&gt;
**[http://zh.wikipedia.org/wiki/Wikipedia:%E5%B0%88%E9%A1%8C/%E5%BE%AE%E6%A0%BC%E5%BC%8F -&amp;quot; - in Chinese]&lt;br /&gt;
* [http://www.usemod.com/cgi-bin/mb.pl?MicroFormats meatball:microformats] -- a first page (stub to be reviewed) dedicated to have any review/opinion from the meatballers especially on the wiki-formats.&lt;br /&gt;
* [http://communitywiki.org/fr/MicroFormats communitywiki:microformats] -- an old multilingual page with a blockcodemachine proposal.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[advocacy]]&lt;br /&gt;
* [[buttons]]&lt;br /&gt;
* [[podcasts]]&lt;br /&gt;
* [[presentations]]&lt;br /&gt;
* [[press]]&lt;br /&gt;
* [[2d_barcodes]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65191</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65191"/>
		<updated>2015-08-25T15:52:51Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Noscript skip/parse */ sign properly&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]] 15:52, 25 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;. Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'WC3 Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation === &lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
&lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: resolved, warning in specification, awaiting implementations to drop&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform the the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65190</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65190"/>
		<updated>2015-08-25T15:52:18Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Noscript skip/parse */ note about mf2py and html5lib&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== Noscript skip/parse ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
Should mf parsers skip &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tag in the HTML, like the &amp;lt;code&amp;gt;&amp;lt;template&amp;gt;&amp;lt;/code&amp;gt; tag mentioned in http://microformats.org/wiki/microformats2-parsing#note_HTML_parsing_rules ?&lt;br /&gt;
&lt;br /&gt;
mf2py skips &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; when using the html5lib DOM parser but no when using lxml parser. Example use of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; https://kartikprabhu.com/ featured images have a no javascript fallback image inside &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;class='u-featured'&amp;lt;/code&amp;gt; markup.&lt;br /&gt;
* html5lib actually HTML-escapes the contents of &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt;, so to mf2py it just looks like plain text with no tags. In Woodwind, I've resorted to using regex to strip out &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; tags before parsing (very hacky). [[User:Kylewm|Kylewm]]`&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2015-07-28&lt;br /&gt;
&lt;br /&gt;
http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property does not specify any standard format to use for datetimes. e.g.  &amp;lt;pre&amp;gt;2015-07-28T12:55:33&amp;lt;/pre&amp;gt; vs &amp;lt;pre&amp;gt;2015-07-28 12:55:33&amp;lt;/pre&amp;gt;. Would be good to standardize this to compare various parser outputs.&lt;br /&gt;
&lt;br /&gt;
2015-07-29: This subject is covered in http://microformats.org/wiki/iso-8601 As it stands the JavaScript parsers support output in the 3 main profiles, 'WC3 Note', 'RFC 3339' and 'HTML5' plus 'auto' which keeps authors format. The default date output for the JavaScript parsers is the same format as the date was originally authored in. This can be changes by setting the options.dateFormat switch to any of the other profiles mentioned. It would be good if other parser also had a switch to force output to a common profiles so we could compare various parser outputs, but I think the default should be how a date was authored. All output whatever profile should also keeps the authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string. This is important if you want to compare parser outputs. &lt;br /&gt;
&lt;br /&gt;
The only exception to this where date and times are combined such as the implied h-event rule for dt-start and dt-end where I output in the HTML5 style 2015-07-29 12:55:33 as there is no predefined author preference and HTML5 profile is more human readable. [[User:GlennJones|Glenn Jones]] 11:02, 29 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation === &lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;+1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* -1 I'm not sure this would solve the problem because auto-filled text could come from the parent h-* (&amp;quot;some extraneous text&amp;quot; in the example above) [[User:emmak|Emma Kuo]] 20:50, 4 July 2015 (UTC)&lt;br /&gt;
* -1 I agree with the other -1s. This would break some of the simplicity of the model. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;-1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
* +1 We already have interop on this between mf2py and phpmf2, as well as people depending on it to explicitly set empty property values. [[User:Tantek|Tantek]] 05:12, 14 July 2015 (UTC)&lt;br /&gt;
* +1 As we already have interop with two parsers and solid user issue from Emma we should take this approach. [[User:GlennJones|Glenn Jones]] 11:51, 29 July 2015 (UTC)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* +1 I think this is the best option I will implement it and update the wiki once its in the JavaScript parser. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
* I don't think I understand this rule. If I was stop all parsing of of classic microformats in the presence of any h-* root in a document then some of the other rules such as &amp;quot;uf2 children inside a classic microformats root class name&amp;quot; do not make sense. Could this item be expanded and explained a bit more? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behaviour was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I think this will help backcompat parsing, I will implement it and update the wiki once its in the JavaScript parser. The test suite will also need updating. [[User:GlennJones|Glenn Jones]] 11:55, 29 July 2015 (UTC) &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Block overlapping properties from different microformat versions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** +1 I think this will help backcompat parsing, but there are two major things to consider. It may well break some consumer code as the output for a microformats currently always has the name property, there may not be the defences code to check this is true when we remove the implied name rule for classic microformats.  The test suite will also need major updating as all the test output for classic microformats will have. I will look into implementing this and report back to the wiki. [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
&lt;br /&gt;
** Also it should be made clear that we are only removing the implied rules from classic microformats parsing and not the value property? [[User:GlennJones|Glenn Jones]] 12:13, 29 July 2015 (UTC) &lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html Currently you need to switch on the option &amp;quot;Set implied properties by microformat version&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== implied date for dt properties both mf2 and backcompat ===&lt;br /&gt;
The [[value-class-pattern#microformats2_parsers|value class pattern dt-* date proposal]] should apply to both mf2 dt-* properties, and backcompat classic microformats, to preserve the hAtom / hCalendar optimizations noted on that page, but in a generic way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] 16:12, 18 August 2015 (UTC)&lt;br /&gt;
* +1 [[User:Glenn Jones|Glenn Jones]] 20 August 2015&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015-08-21: [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
Now implemented in microformat-shiv can be tested at http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: resolved, warning in specification, awaiting implementations to drop&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform the the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== u- parsing iframe src ===&lt;br /&gt;
Currently if I put u-* on an iframe it gets the value of the fallback text. This seems a shame. Getting the URL seems a sensible answer.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== i- parsing iframe src ===&lt;br /&gt;
&lt;br /&gt;
More controversially, what about using an iframe for transclusion? A use case here is comments on a static site. Currently, on eg http://www.kevinmarks.com/microformatschema.html the comments are injected via JS, making them opaque to parsers and thus precluding further parsing such as salmentions.&lt;br /&gt;
&lt;br /&gt;
If instead they were an iframe embedding them, a parser could optionally fetch its contents, parse them, and include them in the parsed mf2 output at that point. Overloading u-* for this seems wrong; e-* as below for srcdoc would have a different effect; this implies a new prefix directive would be needed. A strawman i-* (for include) may work.&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 09:07, 11 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65105</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65105"/>
		<updated>2015-07-03T14:42:15Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Empty properties overridden by implied rules against user expectation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation === &lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing. (mf2py and php-mf2 will both happily include empty strings in their output) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behavior was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: resolved, warning in specification, awaiting implementations to drop&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform the the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65104</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65104"/>
		<updated>2015-07-03T14:40:34Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Empty properties overridden by implied rules against user expectation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation === &lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing (which is what mf2py does in this case) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behavior was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: resolved, warning in specification, awaiting implementations to drop&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform the the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65103</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65103"/>
		<updated>2015-07-03T14:40:02Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Empty properties overridden by implied rules against user expectation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== Empty properties overridden by implied rules against user expectation === &lt;br /&gt;
2015-07-03: raised by [[User:Glenn Jones|Glenn Jones]]&lt;br /&gt;
&lt;br /&gt;
Emma Kuo brought up an issue (https://github.com/glennjones/microformat-node/issues/22) based on following the indieweb note pattern, where the content of a note is given both the e-content and p-name classes. If the element containing the notes only has none text content like image the p-name can have unexpected value. Here is the example she gave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;photo.jpg&amp;quot; class=&amp;quot;u-photo&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        Some extraneous text&lt;br /&gt;
        &amp;lt;div class=&amp;quot;h-cite&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://someother.site/like&amp;quot; class=&amp;quot;u-url&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;http://this.site/photo&amp;quot; class=&amp;quot;u-like-of&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;e-content p-name&amp;quot;&amp;gt;liked this&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the moment I parser this as follows: - if a property (p-name) is empty do not add it to the output. In this case &amp;quot;empty&amp;quot; is classed as not containing any non-whitespace text. As far as I known there is no guidance on how to handle &amp;quot;empty&amp;quot; properties in microformats paring rules, so I followed the conventions of JSON API's not to return &amp;quot;empty&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
The side effect of the above is that p-name also has a number of &amp;quot;implied rules&amp;quot;. The &amp;quot;implied rules&amp;quot; try to automatically fill properties like p-name if there is no defined value. In the example above it uses the textContent of the parent h-entry, so value of the h-entry&amp;gt;p-name is the text content of the h-cite i.e. &amp;quot;likes this&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. We should not allow the &amp;quot;implied name rule&amp;quot; to get textContent from within a child h-* &lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 I believe this is inline with how we parse properties and will meet user/author expectations  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&lt;br /&gt;
* -1 A nested h-* is still part of the content of the parent h-*, I don't quite understand the rationale for excluding it. For example, I may include lots of h-cards in the body of a post that references people and wouldn't want them to be excluded from the implied name generation. [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2.  We should not execute the &amp;quot;implied rules&amp;quot; where there is an author defined &amp;quot;empty&amp;quot; property.&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 Although the output would meet author expectations it is complex for parsers as they will have to keep state for each property through the whole series of parsing rules.  [[User:Glenn Jones|Glenn Jones]] 9:22, 3 July 2015 (UTC)&lt;br /&gt;
* +1 An explicit, empty, p-name property should prevent an implicit p-name from being generated. For example tantek.com includes &amp;amp;gt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;gt;/span&amp;gt; at the start of the h-feed to prevent a giant name from being auto-generated. From my reading of the parsing spec, I don't see any reason that blank strings should be excluded from parsing (which is what mf2py does in this case) [[User:Kylewm|Kylewm]] 14:40, 3 July 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behavior was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: resolved, warning in specification, awaiting implementations to drop&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform the the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# '''keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)'''&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
2015-06-08 option 2 resolved by consensus and implementation in mf2py.&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65065</id>
		<title>microformats2-parsing-brainstorming</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65065"/>
		<updated>2015-06-17T00:53:54Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Nested h-* objects' &amp;quot;value&amp;quot; property */ change microformats2-parser link to microformats2-parsing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing brainstorming&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is for brainstorming, discussion, and other questions and explorations about [[microformats2]] parsing.&lt;br /&gt;
&lt;br /&gt;
For the microformats2 parsing algorithm, see:&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
For filing issues / problems with microformats2-parsing, see:&lt;br /&gt;
* [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Canonicalization of datetime output ==&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
It would be useful to choose a (more) uniform output format for datetimes to make it easier for users of the parser to consume datetimes. Microformats2 parsers already do sophisticated pattern matching to recognize date vs. time vs. datetimes, so converting this to any specific format should not add overhead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Specifically: &lt;br /&gt;
* Choose either 'T' or space as the date/time separator.&lt;br /&gt;
** Prefer space as it is more human friendly/readable, which matters even for syntaxes/formats, as human still develop, debug them. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* Choose either +XXYY or +XX:YY as the timezone specification (and convert 'Z' to +0000).&lt;br /&gt;
** Would appreciate some study / input here as to which timezone offset syntax is more human friendly. I lean slightly toward +/-NNNN (without the colon) because in the context of seeing a time, leaving out the colon makes it less likely the offset will be confused for a time. E.g. &amp;quot;07:00-08:00&amp;quot; looks like 7-8am, even if it meant 07:00 in PST. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** Space is fine - consensus [[2015-01-20]] meetup.&lt;br /&gt;
* Parsers should ''not'' attempt make datetimes more exact than specified. They should not add time, seconds, or timezone if omitted in the original. [[User:Kylewm|Kylewm]] 04:02, 14 May 2014 (UTC)&lt;br /&gt;
** Agreed. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** or month, day per Tom Morris&lt;br /&gt;
** consensus [[2015-01-20]] meetup&lt;br /&gt;
&lt;br /&gt;
* Counterpoint: PHP's builtin date parsing does not require strict formatting. And the equivalent functionality for Python is provided by the widely used python-dateutil library. [[User:Kylewm|Kylewm]] 19:02, 14 May 2014 (UTC)&lt;br /&gt;
** However we cannot (must not) depend on either PHP or Python's &amp;quot;smart&amp;quot; &amp;quot;fixing&amp;quot; or Postelian &amp;quot;liberal handling&amp;quot;, or any other language/framework's for that matter, as they all differ in how &amp;quot;intelligent&amp;quot; they are. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perhaps just provide a guideline for these based on the above consensus.&lt;br /&gt;
&lt;br /&gt;
== Add meta http-equiv to microformats2 parsing model ==&lt;br /&gt;
Status: disagreement, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
Similar to document level parsing of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, it makes sense simultaneously to parse &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv&amp;amp;gt;&amp;lt;/code&amp;gt; elements, perhaps treating &amp;quot;Status&amp;quot; in a special way (only using first number (sequence of digits) for its &amp;quot;value&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Use case: IndieWeb &amp;quot;deleted&amp;quot; indication inline in content for static file services that don't support HTTP return codes.&lt;br /&gt;
* http://indiewebcamp.com/deleted#HTML_meta_http-equiv_for_status&lt;br /&gt;
&lt;br /&gt;
HTTP Header example:&lt;br /&gt;
* &amp;lt;samp&amp;gt;Content-Type: text/html; charset=utf-8&amp;lt;/samp&amp;gt;&lt;br /&gt;
HTML equivalent: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Related:&lt;br /&gt;
* https://www.w3.org/International/O-HTTP-charset&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Interesting thought. Are you suggesting a top level &amp;quot;http-equivs:&amp;quot; collection similar to &amp;quot;rels:&amp;quot; in the parsed output? Should we consider &amp;quot;metas:&amp;quot; instead or in addition? [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* What's the use case for this? Also, http-equiv on its own is useless. http-equiv is only a supplement to the data stored in headers. And headers aren't always there: what happens in the context of someone debugging a page who pastes the source into the textarea of an mf2 parser? Without a compelling use case for including headers (and then over-riding some of them with http-equivs), I'm not sure why an implementor want to do this. —[[User:TomMorris|Tom Morris]] 00:25, 8 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g. from https://gist.github.com/aaronpk/10297489&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Status&amp;quot; content=&amp;quot;410 GONE&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [],&lt;br /&gt;
 &amp;quot;rels&amp;quot;: {},&lt;br /&gt;
 &amp;quot;http&amp;quot;: {&lt;br /&gt;
 &amp;quot;status&amp;quot;: 410&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Maybe make this an optional pass in the parser? - Tom Morris [[2015-01-20]]&lt;br /&gt;
* For now, don't bother with metas until someone provides a use-case. Tom Morris&lt;br /&gt;
* Agreed on both counts. [[User:Tantek|Tantek]] 06:56, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MIME type==&lt;br /&gt;
See [[microformats2-mime-type]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Other Interpretation Parsing Notes==&lt;br /&gt;
Note: most of these need to be written up as separate [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
Author: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
[[microformats-2|Microformats 2]] proposes a new, all encompassing syntax modification of [[microformats-2-prefixes|prefixes]] that will allow microformats to be parsed from pages by processors without prior knowledge of a vocabulary. The core components of this model are quite simple, are quite simple to implement, but there are a number of conflicts that emerge with the functionality of existing microformats parsers that need to be handled. This page documents a proposed model to separate these concerns clearly in a way that can be applied to the documentation of generic microformats parsing rules, and the documentation of individual vocabularies.&lt;br /&gt;
&lt;br /&gt;
Collection of other unresolved parsing issues in a generic model:&lt;br /&gt;
&lt;br /&gt;
This is good material for documenting as [[microformats-2-issues]], [[microformats-2-faq]], and perhaps some of the more technical details in [[microformats-2-parsing-faq]].&lt;br /&gt;
&lt;br /&gt;
* The include pattern references other elements from elsewhere in a document. A generic parser needs to track IDs and fill them in after walking the DOM. (also, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; if adopted.)&lt;br /&gt;
** The current thinking per [[microformats-2-brainstorming]] is to adopt &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; and drop the [[include-pattern]]. [[User:Tantek|Tantek]]&lt;br /&gt;
* Will &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; always map to an &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; property name?&lt;br /&gt;
** No, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; maps to one or more elements by ids, and their children. Those referenced elements may have property class names themselves, or they may contain elements that do. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] implies &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; from an hCard in a page that uses an &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt; element. This requires format knowledge, but a generic parser does not currently track the element type of a property node. Should it?&lt;br /&gt;
** It should not. element-specific handling (e.g. using &amp;quot;alt&amp;quot; from img, and &amp;quot;title&amp;quot; from abbr) is completely done at parse time. The JSON data model does not reflect which element type or attribute the value came from. Additionally, [[hAtom]] is an example where we created far too many vocabulary-specific rules, in practice they're not necessary, and only complicate the microformat for both publisher understanding and parser implementation. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that the highest level heading within an entry implies &amp;lt;code&amp;gt;entry-title&amp;lt;/code&amp;gt;. This particular optimisation might be better off dead.&lt;br /&gt;
** Agreed, this is gone in microformats 2. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that permalinks be parsed from &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, not &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
** In practice this has been one of the more problematic/error prone aspects of hAtom implementations, and it's also inconsistent with other microformats (although [[hReview]] tried to use both rel permalinks and &amp;quot;url&amp;quot;). The dependence upon [[rel-bookmark]] for permalinks is dropped in h-atom in preference to re-using &amp;quot;u-url&amp;quot; and &amp;quot;u-uid&amp;quot;. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[XFN]] is entirely built on &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; (although, has various other differences from structural microformats, as do vote-links, so perhaps are excluded from this discussion and will always be handled by dedicated parsers/queries regardless?)&lt;br /&gt;
** The best (easiest and most reliable) use of 'rel' microformats in practice is when they are orthogonal to 'class' microformats. This is true both with [[XFN]] and some newer [[existing-rel-values|rel values]] like [[rel-author]]. In addition, it was very clear at the recent [[schema.org]] workshop's syntax session that RDFa's decision to apparently arbitrarily mix use of 'rel' and 'property' attributes for specifying different types of properties (it wasn't clear to people in the room when you use which for what) has caused a high degree of confusion among publishers and thus high error-rates. Thus if anything we should learn from both the mistakes of RDFa and our own experiences with even very deliberate/specific mixing of rel microformats in class microformats, and keep them defined as separate orthogonal building blocks that work together, but don't depend on each other. [[User:Tantek|Tantek]]&lt;br /&gt;
*** Relatedly to this: &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; in hAtom. --[[User:BenWard|BenWard]] 06:50, 5 October 2011 (UTC)&lt;br /&gt;
**** Yes, and two related things here. First, despite my (and others') objection and (past) interoperable post/entry-specific treatment by Technorati and Ice Rocket, Hixie has redefined rel-tag in [[HTML5]] to mean applying to the whole page, not a single post. Second, I've explicitly added 'p-category' to the draft 'h-atom' vocabulary in [[microformats-2]]. [[User:Tantek|Tantek]] 07:12, 5 October 2011 (UTC)&lt;br /&gt;
* HTML's &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; element includes an optional &amp;lt;code&amp;gt;pubdate&amp;lt;/code&amp;gt; attribute. Simply: We should parse this as &amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;. --[[User:BenWard|BenWard]] 06:12, 10 October 2011 (UTC)&lt;br /&gt;
** *If* there is even some reasonable data on actual use of the &amp;quot;pubdate&amp;quot; attribute (I don't think there is, frankly, especially with the removal of the algorithm to produce Atom from HTML5), then we could consider parsing &amp;quot;pubdate&amp;quot; as backwards compatible option for &amp;quot;dt-published&amp;quot;. As a general rule, however, it is bad (demonstrably/experienced) design to depend on additional attributes (c.f. RDFa confusion over &amp;quot;property&amp;quot; vs. &amp;quot;rel&amp;quot;), especially for an instance where no additional attribute is necessary. I would leave this out for now until there is non-trivial (more than just test pages or folks who've written HTML5 books, ahem) use in the wild. When there is such use in the wild, it should be documented on a wiki page. We don't want to encourage more complex (additional attribute) publishing as a result of supporting it. [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
* [[value-class-pattern]]: In microformats-2, since there are no sub-properties, there will presumably no-longer be a 'value' property in any parsed model. Properties such as 'tel &amp;gt; type' in hCard are, as I recall, deprecated due to underuse anyway, so 'tel &amp;gt; value' becomes redundant. (There's also potentially some clarification around 'price &amp;gt; value' in hListing, whereby value was used in a pattern. So, what does this mean for value class parsing, with regard to value-title patterns and date separation patterns. Are we looking for a 'p-value' and 'p-value-title' classname, but treating them specially (excluding them from regular property parsing.) Or, are we giving them a special prefix (v-text, v-title? That seems confusing, but could be a concept.) I'm fine with p- for both, and just having the parser ignore them since they're special, but need clarification and naming confirmation. --[[User:BenWard|BenWard]] 09:35, 10 October 2011 (UTC)&lt;br /&gt;
** A few things:&lt;br /&gt;
*** 1. Yes, no more subproperties. 'tel' becomes just 'p-tel'. If there is demand for a structured 'tel' value, then we can use that demand (and research into publishing in practice) to brainstorm and create an 'h-tel' structured telephone number (with perhaps fields like 'type', 'extension', some indication of it being local dialing (an extra 0 in some countries) or international dialing, etc.) Or, we address the different 'tel' types as their own flat properties (again as justified by research), e.g. perhaps 'p-tel-fax', or 'p-tel-mobile'. Something for hcard-2-brainstorming.&lt;br /&gt;
*** 2. For prices, e.g. hListing, either we're going to need to encode how to parse monetary amounts including monetary symbols, or consider creating an 'h-price' structured price. Not sure what the right answer is here, again, will need to be informed by analysis of documented actual price publication practices.&lt;br /&gt;
*** 3. We should avoid introducing a new prefix 'v-' just for value-class-pattern. As we've noted elsewhere, each new prefix adds complexity and should be avoided without substantial advantage.&lt;br /&gt;
*** 4. Using 'p-value-title' is strange, as it would be an exception to 'p-' parsing, since it would get the value from the 'title' attribute whereas 'p-' properties don't normally do that (exception: abbr).&lt;br /&gt;
*** 5. Using 'p-value' is also strange, as it wouldn't generate a 'value' property in the JSON data model.&lt;br /&gt;
*** 6. Class name 'value-title' is already sufficiently prefixed - we've found or even heard of no collisions in practice.&lt;br /&gt;
*** 7. Class name 'value' can, by its simpler naming nature, be expected to potentially collide with other web designer class name usage though we have no documentation/mention thereof. We could consider a renaming, or providing of alternative, such as 'value-string', or 'value-content', etc. However, let's keep that as a backup plan to use only if/when evidence is presented that we need to.&lt;br /&gt;
** Conclusions: for now, in microformats-2, keep using 'value' and 'value-title' as defined in the [[value-class-pattern]], and add the additional (obvious) interpretation that [[value-class-pattern#Date_and_time_parsing|value class pattern: date and time parsing]] applies to all 'dt-' properties. - [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== incorporated 2015-05-28 ==&lt;br /&gt;
The following brainstorms were incorporated 2015-05-28.&lt;br /&gt;
&lt;br /&gt;
== more information for alternates ==&lt;br /&gt;
Raised 2015-04-24 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
The existing &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; parsing is omitting &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; - that should be added.  The &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; would make sense to add here too.&lt;br /&gt;
&lt;br /&gt;
Use-case: labels for presenting alternates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 Makes sense. [[User:Tantek|Tantek]] 03:41, 25 April 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== more information for rel-based formats ==&lt;br /&gt;
Raised 2015-04-18 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
Related github test suite issue: https://github.com/microformats/tests/issues/16&lt;br /&gt;
&lt;br /&gt;
Several rel-based formats have additional information that is useful beyond the link itself, which is all we capture at the moment. As I am trying to update the Universal feedparser to support mf2 based I will show examples from the [https://github.com/kevinmarks/feedparser/tree/365623a9470e99246f393a8c1f49a0db567826b8/feedparser/tests/microformats testcases] there.&lt;br /&gt;
&lt;br /&gt;
The main change is to add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; entry for more information about the attributes and text of the urls pointed to by rel's in the document&lt;br /&gt;
&lt;br /&gt;
A fork of mf2py that implements these changes is at https://github.com/kevinmarks/mf2py&lt;br /&gt;
=== rel-tag ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;tag&amp;quot; href=&amp;quot;http://del.icio.us/tag/tech&amp;quot;&amp;gt;Technology&amp;lt;/a&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;tag&amp;quot;: [&amp;quot;http://del.icio.us/tag/tech&amp;quot;]}, &amp;quot;items&amp;quot;: []} &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is useful as a label. &lt;br /&gt;
&lt;br /&gt;
We add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; element to the parsed output with this extra data that can be looked up from the rels, which doesn't break backward compatibility and works better with xfn (see below)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://del.icio.us/tag/tech&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://del.icio.us/tag/tech&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Technology&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== xfn ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;coworker&amp;quot;: [&amp;quot;http://example.com/johndoe&amp;quot;]}, &amp;quot;items&amp;quot;: []}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is the person's name. Suggested output using the urls object:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with multiple xfn values &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker friend&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
we get this: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;friend&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;, &lt;br /&gt;
                &amp;quot;friend&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-enclosure ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;enclosure&amp;quot; href=&amp;quot;http://example.com/movie.mp4&amp;quot; type=&amp;quot;video/mpeg&amp;quot; title=&amp;quot;real title&amp;quot;&amp;gt;my movie&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;'{&amp;quot;rels&amp;quot;: {&amp;quot;enclosure&amp;quot;: [&amp;quot;http://example.com/movie.mp4&amp;quot;]}, &amp;quot;items&amp;quot;: []}'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text,  which is the title and the attributes which give type. Suggested output:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;enclosure&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/movie.mp4&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/movie.mp4&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;enclosure&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot;, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;video/mpeg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;real title&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This generalises to other rel's too, such as [[rel-feed]] and [[rel-alternate]] that have type, lang etc attributes.&lt;br /&gt;
&lt;br /&gt;
(updated to include changes from feedback below) [[User:Kevin Marks|Kevin Marks]] 22:13, 26 April 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== attributes parsed ===&lt;br /&gt;
Attributes currently parsed are:&lt;br /&gt;
* &amp;lt;code&amp;gt;hreflang&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
&lt;br /&gt;
Attributes we may consider parsing if we have a use case are &lt;br /&gt;
* &amp;lt;code&amp;gt;sizes&amp;lt;/code&amp;gt; for icon - need use-case documentation&lt;br /&gt;
* &amp;lt;code&amp;gt;coords&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
* &amp;lt;code&amp;gt;shape&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
&lt;br /&gt;
In addition there is a special attribute &amp;lt;s&amp;gt;&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; &amp;lt;/s&amp;gt;&amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; which is the text contents of the link, which is useful in rel-tag rel-enclosure and xfn, and in alternate when used for feeds. It's also clarifying for rel-me links. &lt;br /&gt;
&lt;br /&gt;
Tantek [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79057 suggests] we use &amp;lt;code&amp;gt;textContent&amp;lt;/code&amp;gt; for this instead, and make it a single string, not a list as &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is elsewhere in mf2 parsing&lt;br /&gt;
* Update: &amp;quot;text&amp;quot; is good enough, and &amp;quot;textContent&amp;quot; is ugly camelCase. [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== feedback on more rel info ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;name&amp;quot; is bad because it misleadingly conflates with use of &amp;quot;name&amp;quot; elsewhere in microformats2.&lt;br /&gt;
#* Suggested alternative: [https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent textContent] - since that's literally what is being returned there. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** as all other mf2 keys are lowercase-with-hyphens, [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79101 Tantek suggests] 'text' as that isn't going to be an html [[User:Kevin Marks|Kevin Marks]] 07:28, 25 April 2015 (UTC)&lt;br /&gt;
# no need for array for &amp;quot;name&amp;quot;/textContent - since there is always only one at most&lt;br /&gt;
#* E.g. should be &amp;quot;textContent&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#* Update: &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
# &amp;quot;urls&amp;quot; key is misleading - implies all URLs in the document, which is neither true, nor desired (takes much more parsing time and work and code)&lt;br /&gt;
#* Suggested alternative: &amp;quot;rel-urls&amp;quot;. And open to better alternatives too. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** If we are trying to extend the number of properties retuned from a rel without breaking the old structure why don't we call the new structure something like &amp;quot;rels-extended&amp;quot; [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#*** Extension is not the point, but rather to use them complementary. One structure for look-up of any rel value, hence &amp;quot;rels&amp;quot;, which returns you a list of URLs. Then you can lookup those URLs in the new mapping, by URL, hence it is called &amp;quot;rel-urls&amp;quot; - that's the point to use them in conjunction and that's why rel-urls is named what it is. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
# Why is the structure of  &amp;quot;rel-urls&amp;quot; different to the &amp;quot;alternates&amp;quot; structure. Should the &amp;quot;url&amp;quot; not just be added as a property and not as a key. Creating two data structures for one type of object seems inconsistent. It adds cognitive load to anyone trying to understand the JSON structure [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#* I was trying to avoid breaking the existing &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; structure and use of it - I did implement a variant that put the structure inside rels, and it became cumbersome and repetitive where there were multiple rels on a url (xfn cases). Denormalising as properties of the URL made more sense. It also dedupes if there is repetitive linking to the same URL, eg a series of posts with rel-author on each. [[User:Kevin Marks|Kevin Marks]] 20:05, 1 June 2015 (UTC)&lt;br /&gt;
# If the rel is a &amp;quot;tag&amp;quot; then the main value we need to return should be the last path component of the URL, not the link text? Should we add another output property ie &amp;quot;tag&amp;quot; [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#* No need to return last path segment of the URL, because the URL is already there - and that's just a library/framework utility function to get the last path segment of a URL. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
# As currently described, the URL from &amp;lt;code&amp;gt;alternates&amp;lt;/code&amp;gt; is repeated in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; structure. If we are doing this, surely &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; should be in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; too? I assumed a mapping between them. [[User:Kevin Marks|Kevin Marks]] 20:05, 1 June 2015 (UTC)&lt;br /&gt;
## edit showing this variant: http://microformats.org/wiki/index.php?title=microformats2-parsing&amp;amp;oldid=65021#parse_a_hyperlink_element_for_rel_microformats&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
#* Yes it makes sense to drop &amp;quot;alternates&amp;quot; assuming the backcompat impact is low, put alternates in &amp;quot;rels&amp;quot; along with everything else, and direct people to use rels and rel-urls for alternates functionality. Evidence this is an acceptable even preferable approach.[http://indiewebcamp.com/irc/2015-06-01/line/1433195247005] Will add an issue accordingly. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Incorporated 2015-06-06 ==&lt;br /&gt;
&lt;br /&gt;
== Nested h-* objects' &amp;quot;value&amp;quot; property ==&lt;br /&gt;
Status: resolved, resolution iterated, one real world implementation proven implementability, incorporated&lt;br /&gt;
* 2015-06-06 incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
Raised 2015-01-06 by [[User:Kylewm]];&lt;br /&gt;
&lt;br /&gt;
If a child element has a microformat (h-*) and is a property element (p-*, u-*, dt-*, e-*), the parser will add a &amp;quot;value&amp;quot; property to the resulting object. The value should attempt to be a useful representation of the object for consumers that do not have semantic knowledge of the particular h-* type. Ref: [[microformats2-parsing#parse_an_element_for_class_microformats]].&lt;br /&gt;
&lt;br /&gt;
To determine the &amp;quot;value&amp;quot;, we parse the property element simply (as if it did not have a h-* class), which works well for simple h-* objects, e.g. &amp;lt;code&amp;gt;&amp;lt;a class=&amp;quot;u-like-of h-cite&amp;quot; href=&amp;quot;...&amp;quot;&amp;gt;...&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* To handle more complex microformats, I propose that &amp;quot;value&amp;quot; for a p-* property element take on the first explicit &amp;quot;name&amp;quot; property of the nested microformat, and for a u-* property, the first explicit &amp;quot;url&amp;quot; property. Parsing will fall back on the current rules if an explicit property does not exist.&lt;br /&gt;
** This makes sense to me, and fits with the use-cases and examples I've seen. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** A similar (possibly simpler?) formulation would use the implied name and url rules to determine the &amp;quot;value&amp;quot; for p-* and u-* properties respectively&lt;br /&gt;
*** I don't think that's needed, as there are already implied rules on a property that should handle that. I'd start with just the &amp;quot;first explicit&amp;quot; scoping to be more conservative, and then see if we find any use-cases that (and existing implied rules) don't/doesn't catch. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
**** Agreement at [[2015-01-20]] meetup.&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;u-in-reply-to h-cite&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-author h-card&amp;quot; href=&amp;quot;http://example.com&amp;quot;&amp;gt;Example Author&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-name u-url&amp;quot; href=&amp;quot;http://example.com/post&amp;quot;&amp;gt;Example Post&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nested u-in-reply-to object would parse as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;in-reply-to&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-cite&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;Example Post&amp;quot;],&lt;br /&gt;
    &amp;quot;url&amp;quot;: [&amp;quot;http://example.com/post&amp;quot;],&lt;br /&gt;
    &amp;quot;author&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;:[&amp;quot;h-card&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://example.com&amp;quot;], &lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Example Author&amp;quot;]&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;Example Author&amp;quot;&lt;br /&gt;
    }],&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;value&amp;quot;: &amp;quot;http://example.com/post&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the outer &amp;quot;value&amp;quot; gets the in-reply-to h-cite's u-url property, and the inner &amp;quot;value&amp;quot; gets the author's p-name property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Because there are no implied properties of the dt-* and e-* types, and no obvious defaults, the value rules for these types would not change.&lt;br /&gt;
** A possibility for dt-* h-*: The dt-* could take either the first dt-* of the h-*, or (perhaps if no dt-* in the h-*,) the first &amp;lt;code&amp;gt;&amp;amp;lt;time&amp;amp;gt;&amp;lt;/code&amp;gt; element inside. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** First dt-* seems reasonable, predictable, and usable. Consensus at [[2015-01-20]] meetup.&lt;br /&gt;
** Update 2015-05-29: no known use-cases for first dt-* or first e-*, and implementing that &amp;quot;would require some refactoring&amp;quot; (in mf2py at least per kylewm), thus until there's a use-case for first dt-*/e-* inside, let's treat &amp;quot;dt-* h-*&amp;quot; and &amp;quot;e-* h-*&amp;quot; as before. [[User:Tantek|Tantek]] . In particular:&lt;br /&gt;
*** p-* h-* - value from first &amp;quot;name&amp;quot; as proposed above&lt;br /&gt;
*** u-* h-* - value from first &amp;quot;url&amp;quot; as proposed above&lt;br /&gt;
*** e-* h-* - value is already defined for e-* parsing, nothing special here&lt;br /&gt;
*** dt-* h-* - value from normal dt-* parsing - nothing special.&lt;br /&gt;
*** +1 totally agree, let's wait for use cases of e-* dt-* [[User:Kylewm|Kylewm]] 19:44, 29 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implemented in mf2py 2015-06-01 https://github.com/tommorris/mf2py/commit/edc895ef5a780bcee654e6644a688688934517b0&lt;br /&gt;
* Added to microformats test suite (experimental) 2015-06-01 https://github.com/microformats/tests/commit/90c8a7d8e96c7160036a298e13f16d9ddaec218e&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-brainstorming]]&lt;br /&gt;
* [[microformats2-prefixes]]&lt;br /&gt;
* [[microformats2-faq]]&lt;br /&gt;
* [[microformats2-issues]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65047</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65047"/>
		<updated>2015-06-08T20:45:18Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* whitespace collapsing revisited */ +1 leading/trailing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behavior was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection ===&lt;br /&gt;
Status: resolved, warning in specification, awaiting implementations to drop&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 split into separate issue from include alternates in rels per implementation feedback from Kevin Marks. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot; in original issue now &amp;quot;include alternates in rels&amp;quot;, we no longer need &amp;quot;alternates&amp;quot;, and those with client consuming code have universally indicated that they would rather use rel-urls anyway. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform the the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
#* +1 will help parsers be more consistent with each other, and I haven't ever encountered a case where preserving leading/trailing whitespace was desirable [[User:Kylewm|Kylewm]] 20:45, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deduping of rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-02 by [[User:Kevin Marks|Kevin Marks]] &lt;br /&gt;
* 2015-06-05 resolved by consensus and one real world implementation proof of implementability and verification of expected results. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Many sites have multiple duplicate rel links to the same url - a very common case is WordPress home pages eg [http://ma.tt ma.tt] &lt;br /&gt;
&lt;br /&gt;
Each post on the page has a block like&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;entry-meta&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;date&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/2015/05/beethoven-mozart-bach/&amp;quot; &lt;br /&gt;
    title=&amp;quot;Permalink to Beethoven, Mozart,&amp;amp;nbsp;Bach&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;entry-date&amp;quot; datetime=&amp;quot;2015-05-31T22:42:00+00:00&amp;quot;&amp;gt;May 31, 2015&amp;lt;/time&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;categories-links&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://ma.tt/category/asides/&amp;quot; rel=&amp;quot;category tag&amp;quot;&amp;gt;Asides&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;author vcard&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;url fn n&amp;quot; href=&amp;quot;http://ma.tt/author/saxmatt/&amp;quot; &lt;br /&gt;
    title=&amp;quot;View all posts by Matt&amp;quot; rel=&amp;quot;author&amp;quot;&amp;gt;Matt&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- .entry-meta --&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As currently defined, the parser will create duplicate entries in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; for each post:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;, &lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; we will also see:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;, &lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;, &lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;, &lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
These duplicates are unhelpful for parser consumers. We should:&lt;br /&gt;
* make them both sets - only listing distinct values. This will remove ordering information, but order is irrelevant for rel in html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;category&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;author&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/category/asides/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;home&amp;quot;: [&lt;br /&gt;
            &amp;quot;https://ma.tt/&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
}&lt;br /&gt;
…&lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://ma.tt/author/saxmatt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;author&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;View all posts by Matt&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;home&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Matt Mullenweg&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
…&lt;br /&gt;
        &amp;quot;https://ma.tt/category/asides/&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;category&amp;quot;, &lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Asides&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* possibly we could also make &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; sets too. That would solve the information loss issue with the current parsers&lt;br /&gt;
** Resolution: in the case of duplicate other attributes, first one set wins. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 as the proposer. A version of mf2py that does this is running at unmung,com. see [http://www.unmung.com/mf2?url=https%3A%2F%2Fma.tt&amp;amp;html=&amp;amp;pretty=on fro ma.tt] or [http://www.unmung.com/?html=%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E%0D%0A%3Ca+href%3D%22http%3A%2F%2Fma.tt%2Fcategory%2Fasides%2F%22+rel%3D%22category+tag%22%3EAsides%3C%2Fa%3E&amp;amp;pretty=on a simple test] [[User:Kevin Marks|Kevin Marks]] 23:49, 2 June 2015 (UTC)&lt;br /&gt;
* +1 makes sense to me, and not having them be sets in the current spec is likely an oversight on my part. Thanks for noting this issue. [[User:Tantek|Tantek]] 05:28, 3 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== include alternates in rels ===&lt;br /&gt;
Status: incorporated into [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
* 2015-06-05 resolved per consensus and one real world implementation proof of implementability. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
** +1 drop &amp;quot;alternates&amp;quot; independently now made a separate issue. [[User:Tantek|Tantek]] 03:42, 6 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
* implemented in [https://github.com/kevinmarks/mf2py/commit/4dba45200eef11da811f64817d02044ab9e98b77 my fork of mf2py] and running on [http://www.unmung.com/?html=%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fa%22%3Eauthor+a%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22author%22+href%3D%22http%3A%2F%2Fexample.com%2Fb%22%3Eauthor+b%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F1%22%3Epost+1%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22in-reply-to%22+href%3D%22http%3A%2F%2Fexample.com%2F2%22%3Epost+2%3C%2Fa%3E%0D%0A%3Ca+rel%3D%22alternate+home%22%0D%0A+++href%3D%22http%3A%2F%2Fexample.com%2Ffr%22%0D%0A+++media%3D%22handheld%22%0D%0A+++hreflang%3D%22fr%22%3EFrench+mobile+homepage%3C%2Fa%3E&amp;amp;pretty=on unmung] [[User:Kevin Marks|Kevin Marks]] 01:29, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2&amp;diff=65040</id>
		<title>microformats2</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2&amp;diff=65040"/>
		<updated>2015-06-03T16:05:09Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Java */ replace [] with {} to bc mediawiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats 2&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
Welcome to the microformats2 home page.&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Microformats2 is the simplest way to markup structured information in HTML. Microformats2 improves ease of use and implementation for &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; authors (publishers) and developers ([[microformats2-parsing|parser]] implementers).&lt;br /&gt;
&lt;br /&gt;
Microformats2 replaces and supersedes both classic microformats, as well as [[microdata]], and [[RDFa]].&lt;br /&gt;
&lt;br /&gt;
=== simple microformats 2 examples ===&lt;br /&gt;
Here are a few simple microformats2 examples along with canonical [[JSON]].&lt;br /&gt;
&lt;br /&gt;
==== person example ====&lt;br /&gt;
* Simple person reference:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card&amp;quot;&amp;gt;Frances Berriman&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Frances Berriman&amp;quot;] &lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== hyperlinked person ====&lt;br /&gt;
* Simple hyperlinked person reference&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://benward.me&amp;quot;&amp;gt;Ben Ward&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Ben Ward&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://benward.me&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== hyperlinked person image ====&lt;br /&gt;
* Simple hyperlinked person image&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://rohit.khare.org/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;img alt=&amp;quot;Rohit Khare&amp;quot;&lt;br /&gt;
      src=&amp;quot;https://s3.amazonaws.com/twitter_production/profile_images/53307499/180px-Rohit-sq_bigger.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Rohit Khare&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://rohit.khare.org&amp;quot;],&lt;br /&gt;
      &amp;quot;photo&amp;quot;: [&amp;quot;https://s3.amazonaws.com/twitter_production/profile_images/53307499/180px-Rohit-sq_bigger.jpg&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional simple cases details in [[microformats-2-implied-properties]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== detailed person example ====&lt;br /&gt;
* More detailed person&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img class=&amp;quot;u-photo&amp;quot; alt=&amp;quot;photo of Mitchell&amp;quot;&lt;br /&gt;
       src=&amp;quot;https://webfwd.org/content/about-experts/300.mitchellbaker/mentor_mbaker.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt;&lt;br /&gt;
 (&amp;lt;a class=&amp;quot;u-url&amp;quot; &lt;br /&gt;
     href=&amp;quot;https://twitter.com/MitchellBaker&amp;quot;&lt;br /&gt;
    &amp;gt;@MitchellBaker&amp;lt;/a&amp;gt;)&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-org&amp;quot;&amp;gt;Mozilla Foundation&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;p-note&amp;quot;&amp;gt;&lt;br /&gt;
    Mitchell is responsible for setting the direction and scope of the Mozilla Foundation and its activities.&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-category&amp;quot;&amp;gt;Strategy&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-category&amp;quot;&amp;gt;Leadership&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;photo&amp;quot;: [&amp;quot;https://webfwd.org/content/about-experts/300.mitchellbaker/mentor_mbaker.jpg&amp;quot;],&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&lt;br /&gt;
        &amp;quot;http://blog.lizardwrangler.com/&amp;quot;,&lt;br /&gt;
        &amp;quot;https://twitter.com/MitchellBaker&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
      &amp;quot;note&amp;quot;: [&amp;quot;Mitchell is responsible for setting the direction and scope of the Mozilla Foundation and its activities.&amp;quot;],&lt;br /&gt;
      &amp;quot;category&amp;quot;: [&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;,&lt;br /&gt;
        &amp;quot;Leadership&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Notes: &lt;br /&gt;
# The JSON &amp;lt;code&amp;gt;&amp;quot;type&amp;quot;&amp;lt;/code&amp;gt; uses the full microformat root class name (e.g. &amp;lt;code&amp;gt;&amp;quot;h-card&amp;quot;&amp;lt;/code&amp;gt;) for consistent identification.&lt;br /&gt;
# all properties are optional and syntactically plural with parsed values provided in document order; particular microformats (and applications there-of) may apply specific/singular semantics to first value of a property.&lt;br /&gt;
&lt;br /&gt;
=== microformats2 design ===&lt;br /&gt;
microformats2 has the following key design aspects:&lt;br /&gt;
# '''Prefixes for class names.'''  Class names used for microformats use prefixes that start with with &amp;lt;code&amp;gt;'h-' 'p-' 'u-' 'dt-', 'e-'&amp;lt;/code&amp;gt;. These are '''syntax independent from vocabularies''', which can then be developed separately.&lt;br /&gt;
#* 'h-*' for root class names, e.g. 'h-card'&lt;br /&gt;
#* 'p-*' for simple (text) properties, e.g. 'p-name'&lt;br /&gt;
#* 'u-*' for URL properties, e.g. 'u-photo'&lt;br /&gt;
#* 'dt-*' for date/time properties, e.g. 'dt-bday'&lt;br /&gt;
#* 'e-*' for embedded markup properties, e.g. 'e-note'. See [[microformats2#naming_conventions_for_generic_parsing|prefix naming conventions]] for more details.&lt;br /&gt;
# '''Flat sets of optional properties.''' All microformats consist of a root, and a collection of properties. Hierarchical data is represented with nested microformats, typically as property values themselves. Properties are all optional and potentially multivalued (applications needing a singular semantic may use first instance).&lt;br /&gt;
# '''Single class markup for common uses.''' Common simple markup patterns require only a single microformat root class name, which parsers use to find a few generic properties: &amp;lt;code&amp;gt;name, url, photo&amp;lt;/code&amp;gt;. The simple microformats2 examples above demonstrate these.&lt;br /&gt;
&lt;br /&gt;
Parsing details for each of these (including how to generate canonical JSON) are specified step-by-step in the:&lt;br /&gt;
* '''[[microformats2-parsing|microformats2 parsing specification]]'''&lt;br /&gt;
&lt;br /&gt;
== v2 vocabularies ==&lt;br /&gt;
Status: '''&amp;lt;span id=&amp;quot;draft_v2_vocabularies&amp;quot;&amp;gt;draft&amp;lt;/span&amp;gt;'''. Please review and provide feedback in [[IRC]].&lt;br /&gt;
* [[h-adr]]&lt;br /&gt;
* [[h-card]]&lt;br /&gt;
* [[h-entry]]&lt;br /&gt;
* [[h-event]]&lt;br /&gt;
* [[h-feed]]&lt;br /&gt;
* [[h-geo]]&lt;br /&gt;
* [[h-item]]&lt;br /&gt;
* [[h-listing]]&lt;br /&gt;
* [[h-product]]&lt;br /&gt;
* [[h-recipe]]&lt;br /&gt;
* [[h-resume]]&lt;br /&gt;
* [[h-review]]&lt;br /&gt;
* [[h-review-aggregate]]&lt;br /&gt;
&lt;br /&gt;
See below for vocabulary summaries.&lt;br /&gt;
&lt;br /&gt;
=== h-adr ===&lt;br /&gt;
{{main|h-adr}}&lt;br /&gt;
&lt;br /&gt;
The '''h-adr''' microformat is for marking up structured locations such as addresses, physical and/or postal. This is an update to [[adr]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-adr&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-adr&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-post-office-box&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-extended-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-street-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-locality&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-region&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-postal-code&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-country-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-label&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;''' (or '''&amp;lt;code&amp;gt;u-geo&amp;lt;/code&amp;gt;''' with a RFC 5870 geo: URL) - new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-altitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-adr&amp;quot; is found, don't look for an &amp;quot;adr&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;adr&amp;quot;&amp;gt;adr&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;post-office-box&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extended-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;street-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;locality&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;region&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;postal-code&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;country-name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== h-card ===&lt;br /&gt;
{{main|h-card}}&lt;br /&gt;
&lt;br /&gt;
The '''h-card''' microformat is for marking up people and organizations. This is an update to [[hCard]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-card&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-honorific-prefix&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-given-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-additional-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-family-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-sort-string&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-honorific-suffix&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-nickname&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-email&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-uid&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-adr&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-post-office-box&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-extended-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-street-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-locality&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-region&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-postal-code&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-country-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-label&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;''' or '''&amp;lt;code&amp;gt;u-geo&amp;lt;/code&amp;gt;''' with a RFC 5870 geo: URL, new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-altitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-tel&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-note&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-bday&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-key&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-org&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-job-title&amp;lt;/code&amp;gt;''' - previously 'title' in hCard, disambiguated.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-role&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-impp&amp;lt;/code&amp;gt;''' per RFC 4770, new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-sex&amp;lt;/code&amp;gt;''' new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-gender-identity&amp;lt;/code&amp;gt;''' new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-anniversary&amp;lt;/code&amp;gt;''' new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Reserved properties: (properties not used much (if at all) in practice)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-organization-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-organization-unit&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-tz&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-rev&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-card&amp;quot; is found, don't look for a &amp;quot;vcard&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;vcard&amp;quot;&amp;gt;vcard&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;honorific-prefix&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;given-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;additional-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;family-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;honorific-suffix&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nickname&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;email&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;logo&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;uid&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-adr h-adr&amp;lt;/code&amp;gt;''' including compat root class &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extended-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;street-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;locality&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;region&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;postal-code&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;country-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-geo h-geo&amp;lt;/code&amp;gt;''' including compat root class &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;note&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bday&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;organization-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;organization-unit&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; - parse as '''p-job-title'''&lt;br /&gt;
* &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Reserved: (backward compat properties that parsers {{may}} implement, if they do, they {{must}} implement in this way:&lt;br /&gt;
* &amp;lt;code&amp;gt;tz&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;rev&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Note: use of 'value' within 'tel' should be automatically handled by the support of the [[value-class-pattern]]. And for now, the 'type' subproperty of 'tel' is dropped/ignored. If there is demonstrable documented need for additional tel types (e.g. fax), we can introduce new flat properties as needed (e.g. p-tel-fax).&lt;br /&gt;
&lt;br /&gt;
=== h-entry ===&lt;br /&gt;
{{main|h-entry}}&lt;br /&gt;
&lt;br /&gt;
The '''h-entry''' microformat is for marking up syndicatable content such as blog posts, notes, articles, comments, photos and similar. This is an update to [[hAtom]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-entry&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' (was p-entry-title, see issues)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;''' (was p-entry-summary, see issues)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-content&amp;lt;/code&amp;gt;''' (was e-entry-content, see issues)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-updated&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-uid&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
This is an update to [[hAtom]]. &lt;br /&gt;
&lt;br /&gt;
Brainstorming:&lt;br /&gt;
&lt;br /&gt;
The following properties are proposed additions to h-entry above and beyond what hAtom (or Atom) provides, based on various existing link preview markup conventions:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-audio&amp;lt;/code&amp;gt;''' - consider special u- parsing rules for &amp;lt;code&amp;gt;&amp;amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-video&amp;lt;/code&amp;gt;''' - consider special u- parsing rules for &amp;lt;code&amp;gt;&amp;amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-in-reply-to&amp;lt;/code&amp;gt;''' - for links to other posts that this post is a reply to (comment regarding, etc.)&lt;br /&gt;
&lt;br /&gt;
Backward compatibility: &lt;br /&gt;
&lt;br /&gt;
(*)hAtom-specific implementations that perform custom display or translation (e.g. to Atom XML) {{should}} prefer &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt; over &amp;lt;code&amp;gt;p-entry-title&amp;lt;/code&amp;gt;, and use &amp;lt;code&amp;gt;p-entry-title&amp;lt;/code&amp;gt; value(s) as a fallback if there is no &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For hAtom backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-entry&amp;quot; is found, don't look for a &amp;quot;hentry&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hentry&amp;quot;&amp;gt;hentry&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;entry-title&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;entry-summary&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;entry-content&amp;lt;/code&amp;gt; - parse as '''e-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;published&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;updated&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-geo h-geo&amp;lt;/code&amp;gt;''' including compat root &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;h-entry-faq&amp;quot;&amp;gt;FAQ:&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* '''What is the &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt; of a [http://indiewebcamp.com/note note]?'''&lt;br /&gt;
** A few options, from simplest to most detailed.&lt;br /&gt;
*** '''same as the p-content/e-content''' property.&lt;br /&gt;
*** '''same as the &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; element''' on the note permalink post page. When publishing a note on its own permalink post page, the contents of the note are likely abbreviated for the title of the page. The same abbreviation can be used for the p-name.&lt;br /&gt;
*** '''first sentence of the p-content/e-content''' property. It may be better for [http://indiewebcamp.com/syndication syndication] and [[link-preview]] purposes to provide just the first sentence of the note as the &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. Similarly if only a portion of the content is syndicated to other sites, that portion can be marked up as the &amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resolved Issues:&lt;br /&gt;
* 2012-245 Resolved. See [http://krijnhoetmer.nl/irc-logs/microformats/20120830#l-120 2012-243 IRC discussion/consensus] for:&lt;br /&gt;
** Use '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;p-entry-summary&amp;lt;/code&amp;gt;'''. The historical semantic of &amp;quot;entry-summary&amp;quot; is not different from &amp;quot;summary&amp;quot; in any significant (or discernible way). Collapsing the two will simplify the overall microformats2 vocabularies further. In microformats2, entry-summary is no more.&lt;br /&gt;
** Use '''&amp;lt;code&amp;gt;e-content&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;e-entry-content&amp;lt;/code&amp;gt;'''. Same point and advantage. In microformats2, entry-content is no more.&lt;br /&gt;
** '''drop &amp;lt;code&amp;gt;p-entry-title&amp;lt;/code&amp;gt;'''. Unnecessary and subsumed by &amp;quot;p-name&amp;quot;. Would consider move to backward compat only if cases are presented - known publishing uses are expected to be updated shortly.&lt;br /&gt;
&lt;br /&gt;
=== h-event ===&lt;br /&gt;
{{main|h-event}}&lt;br /&gt;
&lt;br /&gt;
The '''h-event''' microformat is for marking up events. This is an update to [[hCalendar]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-event&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;'''(*)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-start&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-end&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-duration&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-description&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-location&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
This is an update to [[hCalendar]]. &lt;br /&gt;
&lt;br /&gt;
(*)hCalendar-specific implementations that perform custom display or translation (e.g. to iCalendar .ics) {{should}} prefer &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt; over &amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;, and use &amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt; value(s) as a fallback if there is no &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-event&amp;quot; is found, don't look for a &amp;quot;vevent&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;vevent&amp;quot;&amp;gt;vevent&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;dtstart&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;dt-start&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;dtend&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;dt-end&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;dt-duration&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;location&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;, and compat root &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-adr&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-geo h-geo&amp;lt;/code&amp;gt;''' including compat root &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== h-geo ===&lt;br /&gt;
{{main|h-geo}}&lt;br /&gt;
&lt;br /&gt;
The '''h-geo''' microformat is for marking up WGS84 geophysical coordinates. This is an update to [[geo]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-geo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-altitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-geo&amp;quot; is found, don't look for an &amp;quot;geo&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;geo&amp;quot;&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== h-item ===&lt;br /&gt;
{{main|h-item}}&lt;br /&gt;
&lt;br /&gt;
The '''h-item''' microformat is for marking up the item of an [[h-review]] or [[h-product]]. This is an update to part of [[hReview]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-item&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-item&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Note: in practice, due to the microformats2 implied property rules, it is expected that most uses of &amp;quot;h-item&amp;quot; won't require any explicit properties at all (since microformats2 parsers will infer name, photo, and url properties from the structure of the element with &amp;quot;h-item&amp;quot; and its contained content/elements if any).&lt;br /&gt;
&lt;br /&gt;
=== h-product ===&lt;br /&gt;
{{main|h-product}}&lt;br /&gt;
&lt;br /&gt;
The '''h-product''' microformat is for marking up products. This is an update to [[hProduct]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-product&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-product&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - name of the product&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;''' - photo of the product&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-brand&amp;lt;/code&amp;gt;''' - manufacturer, can also be a nested &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - freeform categories or tags applied to the item by the reviewer &lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-description&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - URL of the product&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-identifier&amp;lt;/code&amp;gt;''' - includes type (e.g. mpn, upc, isbn, issn, sn, vin, sku etc.) and value.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-review&amp;lt;/code&amp;gt;''' - a review of the product, can also be a nested &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-price&amp;lt;/code&amp;gt;''' - retail price of the product&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-product&amp;quot; is found, don't look for an &amp;quot;hproduct&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hproduct&amp;quot;&amp;gt;hproduct&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt;  - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;brand&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;identifier&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; - including compat root class &amp;lt;code&amp;gt;hreview&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: [[hProduct]] has at least one experimental property which has real world adoption due to [[Google]] and [[Bing]] search support of hProduct. Currently this is: '''price'''&lt;br /&gt;
&lt;br /&gt;
=== h-recipe ===&lt;br /&gt;
{{main|h-recipe}}&lt;br /&gt;
&lt;br /&gt;
The '''h-recipe''' microformat is for marking up food recipes. This is an update to [[hRecipe]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-recipe&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - the name of the recipe&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-ingredient&amp;lt;/code&amp;gt;''' - describes one or more ingredients used in the recipe.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-yield&amp;lt;/code&amp;gt;''' - Specifies the quantity produced by the recipe, like how many persons it satisfyies &lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-instructions&amp;lt;/code&amp;gt;''' - the method of the recipe.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-duration&amp;lt;/code&amp;gt;''' - the time it takes to prepare the meal described by the recipe.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;''' - an accompanying image&lt;br /&gt;
&lt;br /&gt;
Experimental properties with wide adoption&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;'''  - provides a short summary or introduction &lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt;''' - the person who wrote the recipe with &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;''' - the date the recipe was published&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-nutrition&amp;lt;/code&amp;gt;''' - nutritional information like calories, fat, dietary fiber etc.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-recipe&amp;quot; is found, don't look for an &amp;quot;hrecipe&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hrecipe&amp;quot;&amp;gt;hrecipe&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;instructions&amp;lt;/code&amp;gt; - parse as '''e-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt;  - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nutrition&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: [[hRecipe]] has a number of experimental properties which have real world adoption due to [[Google]] recipe search support of hRecipe. These are: summary, author, published and nutrition&lt;br /&gt;
&lt;br /&gt;
=== h-resume ===&lt;br /&gt;
{{main|h-resume}}&lt;br /&gt;
&lt;br /&gt;
The '''h-resume''' microformat is for marking up resumes. This is an update to [[hResume]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-resume&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-resume&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;''' - overview of qualifications and objectives&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-contact&amp;lt;/code&amp;gt;''' - current contact info in an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-education&amp;lt;/code&amp;gt;''' - an education &amp;lt;code&amp;gt;h-calendar&amp;lt;/code&amp;gt; event, years, nested &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; of the school, location.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-experience&amp;lt;/code&amp;gt;''' - a job or other professional experience &amp;lt;code&amp;gt;h-calendar&amp;lt;/code&amp;gt; event, years, nested &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; of the organization, location, job-title.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-skill&amp;lt;/code&amp;gt;''' - a skill or ability, optionally including level and/or duration of experience&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-affiliation&amp;lt;/code&amp;gt;''' - an affiliation with an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; organization&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-resume&amp;quot; is found, don't look for an &amp;quot;hresume&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hresume&amp;quot;&amp;gt;hresume&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;contact&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;education&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vevent&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;experience&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vevent&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;skill&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;affiliation&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: skill has a [[hresume-skill-brainstorm|proposed expansion into competency]] with explicit summary, rating and/or duration components. Based on existing real world adoption, we should consider an h-competency vocabulary with p-summary, p-rating, and dt-duration properties.&lt;br /&gt;
&lt;br /&gt;
=== h-review ===&lt;br /&gt;
{{main|h-review}}&lt;br /&gt;
&lt;br /&gt;
The '''h-review''' microformat is for marking up reviews. This is an update to [[hReview]]. See also [[h-item]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-review&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - name of the review&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-item&amp;lt;/code&amp;gt;''' - thing been reviewed i.e. business or person (h-card), event (h-event), place (h-adr or h-geo), product (h-product), website, url, or other item ([[h-item]]).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-reviewer&amp;lt;/code&amp;gt;''' - person who authored the review &lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-reviewed&amp;lt;/code&amp;gt;''' - date time of when the review was written&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-rating&amp;lt;/code&amp;gt;''' - value from 1-5 indicating a rating for the item (5 best).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-best&amp;lt;/code&amp;gt;'''  - define best rating value. can be numerically lower than worst.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-worst&amp;lt;/code&amp;gt;'''  - define worst rating value. can be numerically higher than best. &lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-description&amp;lt;/code&amp;gt;''' - the full text written evaluation and opinion of the reviewer&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - freeform categories or tags applied to the item by the reviewer &lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - URL of the review&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-review&amp;quot; is found, don't look for an &amp;quot;hreview&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hreview&amp;quot;&amp;gt;hreview&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt; parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''p-name''' of the item being reviewed (p-item h-item p-name)&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt; - parse as '''u-photo''' of the item being reviewed (p-item h-item u-photo)&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-url''' of the item being reviewed (p-item h-item u-url)&lt;br /&gt;
* &amp;lt;code&amp;gt;reviewer&amp;lt;/code&amp;gt;  - including compat root vcard in the absence of h-card&lt;br /&gt;
* &amp;lt;code&amp;gt;dtreviewed&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rating&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;worst&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt; - parse as '''e-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;tag&amp;quot;&amp;lt;/code&amp;gt; - parse as '''p-category'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;self bookmark&amp;quot;&amp;lt;/code&amp;gt; - parse as '''u-url'''. note that &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute value is treated as a space separated set, thus any presence of &amp;quot;self&amp;quot; and &amp;quot;bookmark&amp;quot; within such a set in a rel value is accepted.&lt;br /&gt;
&lt;br /&gt;
Note: The [[hReview]] format has three properties which make use of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute, these are &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;, permalink (via the &amp;lt;code&amp;gt;self&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt; values) and &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;. Microformats 2 parsers {{should}} map these URLs into the page scoped rel collection.&lt;br /&gt;
&lt;br /&gt;
=== h-review-aggregate ===&lt;br /&gt;
{{main|h-review-aggregate}}&lt;br /&gt;
&lt;br /&gt;
The '''h-review-aggregate''' microformat is for marking up aggregate reviews of a single item. This is an update to [[hreview-aggregate]]. See also [[h-item]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-review-aggregate&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-review-aggregate&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - name of the review&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-item&amp;lt;/code&amp;gt;''' - thing been reviewed i.e. business or person (h-card), event (h-event), place (h-adr or h-geo), product (h-product), website, url, or other item (h-item).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-rating&amp;lt;/code&amp;gt;''' - value from 1-5 indicating average rating for the item (5 best).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-best&amp;lt;/code&amp;gt;'''  - define best rating value. can be numerically lower than worst.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-worst&amp;lt;/code&amp;gt;'''  - define worst rating value. can be numerically higher than best. &lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-count&amp;lt;/code&amp;gt;'''  - number of reviews aggregated.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-votes&amp;lt;/code&amp;gt;'''  - number of reviewers who have rated the product, thus contributing to the average rating.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - freeform categories or tags applied to the item by the reviewer&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - URL of the review&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-review-aggregate&amp;quot; is found, don't look for an &amp;quot;hreview-aggregate&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hreview-aggregate&amp;quot;&amp;gt;hreview-aggregate&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt; parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''p-name''' of the item being reviewed (p-item h-item p-name)&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt; - parse as '''u-photo''' of the item being reviewed (p-item h-item u-photo)&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-url''' of the item being reviewed (p-item h-item u-url)&lt;br /&gt;
* &amp;lt;code&amp;gt;rating&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;worst&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;votes&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;tag&amp;quot;&amp;lt;/code&amp;gt; - parse as '''p-category'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;self bookmark&amp;quot;&amp;lt;/code&amp;gt; - parse as '''u-url'''. note that &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute value is treated as a space separated set, thus any presence of &amp;quot;self&amp;quot; and &amp;quot;bookmark&amp;quot; within such a set in a rel value is accepted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== v2 vocab notes ===&lt;br /&gt;
Notes: &lt;br /&gt;
* All v2 vocabularies are defined as flat lists of properties of an object/item, and thus can be used in microformats-2 syntax as shown, or in microdata items, or RDFa. The microformats-2 property parsing prefixes &amp;quot;p-&amp;quot;, &amp;quot;u-&amp;quot;, &amp;quot;dt-&amp;quot;, &amp;quot;e-&amp;quot; are omitted when using defined properties in microdata itemprop and RDFa property as those syntaxes have their own element-specific parsing rules.&lt;br /&gt;
* Profile URLs are provided for use with the HTML4 &amp;lt;code&amp;gt;profile&amp;lt;/code&amp;gt; attribute, microdata &amp;lt;code&amp;gt;itemtype&amp;lt;/code&amp;gt; attribute, and RDFa &amp;lt;code&amp;gt;vocab&amp;lt;/code&amp;gt; &amp;amp;amp; &amp;lt;code&amp;gt;typeof&amp;lt;/code&amp;gt; attributes (though the latter requires slicing off the trailing segment of the profile for the typeof attribute, and leaving the rest in vocab). &lt;br /&gt;
* microformats 2 properties may also be explicitly bound as URIs using [[rel-profile]], the [[html5-profile]] attribute proposal, or an HTML5 'vocab' attribute instead. If URI bound terms are important to you, please express interest on [[rel-profile]], [[html5-profile]], or contribute to an [[html5-vocab]] draft.&lt;br /&gt;
&lt;br /&gt;
=== v2 vocab to-do ===&lt;br /&gt;
To do: &lt;br /&gt;
* write a simple tutorial for creating/getting started with microformats-2 markup for new content&lt;br /&gt;
* examples in each h-* spec listed above of how to embed other microformats in them&lt;br /&gt;
* actual profile documents at &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-*&amp;lt;/nowiki&amp;gt; URLs mentioned above.&lt;br /&gt;
* Provide any necessary microdata-specific language as needed (e.g. to be comparably understandable to the [http://www.whatwg.org/specs/web-apps/current-work/#vcard sample vCard4/hCard1 microdata vocabulary]. Also provide any necessary RDFa-specific language as needed. Both preferably in a generic vocabulary-independent way.&lt;br /&gt;
* write a porting guide mapping v1 property -&amp;gt; v2 property&lt;br /&gt;
** use-case: simple search/replace in templates (e.g. in case web author doesn't remember existing microformats vocabs and where they used them).&lt;br /&gt;
** advise using *both* in existing templates (e.g. in case some CSS depends on the existing microformats)&lt;br /&gt;
* analyzie/document how well the microformats2 model and vocabularies satisfy the [http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-May/019681.html use-cases used to design/create microdata].&lt;br /&gt;
&lt;br /&gt;
== combining microformats ==&lt;br /&gt;
Since microformats 2 uses simple flat sets of properties for each microformat, multiple microformats are combined to indicate additional structure.&lt;br /&gt;
&lt;br /&gt;
=== h-event location h-card ===&lt;br /&gt;
Events commonly have venue information with additional structure, like address information. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-event&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot; href=&amp;quot;http://indiewebcamp.com/2012&amp;quot;&amp;gt;&lt;br /&gt;
    IndieWebCamp 2012&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
  from &amp;lt;time class=&amp;quot;dt-start&amp;quot;&amp;gt;2012-06-30&amp;lt;/time&amp;gt; &lt;br /&gt;
  to &amp;lt;time class=&amp;quot;dt-end&amp;quot;&amp;gt;2012-07-01&amp;lt;/time&amp;gt; at &lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-location h-card&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-name p-org u-url&amp;quot; href=&amp;quot;http://geoloqi.com/&amp;quot;&amp;gt;&lt;br /&gt;
      Geoloqi&lt;br /&gt;
    &amp;lt;/a&amp;gt;, &lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;920 SW 3rd Ave. Suite 400&amp;lt;/span&amp;gt;, &lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;Portland&amp;lt;/span&amp;gt;, &lt;br /&gt;
    &amp;lt;abbr class=&amp;quot;p-region&amp;quot; title=&amp;quot;Oregon&amp;quot;&amp;gt;OR&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nested h-card used to structure the p-location of the h-event is represented as a structured value for &amp;quot;location&amp;quot; in the JSON, which has an additional key, &amp;quot;value&amp;quot; that represents the plain text version parsed from the p-location.&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;IndieWebCamp 2012&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://indiewebcamp.com/2012&amp;quot;],&lt;br /&gt;
      &amp;quot;start&amp;quot;: [&amp;quot;2012-06-30&amp;quot;],&lt;br /&gt;
      &amp;quot;end&amp;quot;: [&amp;quot;2012-07-01&amp;quot;],&lt;br /&gt;
      &amp;quot;location&amp;quot;: [{&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Geoloqi, 920 SW 3rd Ave. Suite 400, Portland, OR&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;name&amp;quot;: [&amp;quot;Geoloqi&amp;quot;],&lt;br /&gt;
          &amp;quot;org&amp;quot;: [&amp;quot;Geoloqi&amp;quot;],&lt;br /&gt;
          &amp;quot;url&amp;quot;: [&amp;quot;http://geoloqi.com/&amp;quot;],&lt;br /&gt;
          &amp;quot;street-address&amp;quot;: [&amp;quot;920 SW 3rd Ave. Suite 400&amp;quot;],&lt;br /&gt;
          &amp;quot;locality&amp;quot;: [&amp;quot;Portland&amp;quot;],&lt;br /&gt;
          &amp;quot;region&amp;quot;: [&amp;quot;Oregon&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
      }]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questions:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should the nested hCard be present also as a top-level item in the JSON? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
** My current (2012-243) leaning is no. - [[User:Tantek|Tantek]] 18:53, 30 August 2012 (UTC)&lt;br /&gt;
** If so, how do we avoid expansion of the JSON geometrically proportional to the depth of microformat nesting? (Or do we not worry about it?)&lt;br /&gt;
* Should there be a canonical hierarchical JSON and a canonical flattened JSON? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
** My current (2012-243) leaning is no, we stick with one canonical JSON for uf2 which is hierarchical. - [[User:Tantek|Tantek]] 18:53, 30 August 2012 (UTC)&lt;br /&gt;
** If so, should the flattened JSON have references from properties to nested microformats that have been pushed to the top level per flattening? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
*** If so, what convention does/do JSON follow for such synthetic local reference identifiers? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* The 'location' value reflects the visible text of its element, including spaces and punctuation, as well as the state abbreviation 'OR'. The 'h-card' property values are only what is marked up, and thus include structure values without extra punctuation, and the state takes the expanded form from the &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; attribute of its &amp;lt;code&amp;gt;&amp;amp;lt;abbr&amp;amp;gt;&amp;lt;/code&amp;gt; element.&lt;br /&gt;
&lt;br /&gt;
=== h-card org h-card ===&lt;br /&gt;
People often publish information general to their company rather than specific to them, in which case, they may wish to encapsulate that in separately nested microformat. E.g. here is a simple h-card example with org property:&lt;br /&gt;
&lt;br /&gt;
[http://blog.lizardwrangler.com Mitchell Baker] (Mozilla Foundation)&lt;br /&gt;
&lt;br /&gt;
with source:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;span class=&amp;quot;p-org&amp;quot;&amp;gt;Mozilla Foundation&amp;lt;/span&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes such organization affiliations are hyperlinked to the website of the organization:&lt;br /&gt;
&lt;br /&gt;
[http://blog.lizardwrangler.com Mitchell Baker] ([http://mozilla.org/ Mozilla Foundation])&lt;br /&gt;
&lt;br /&gt;
You can mark that up with a nested h-card:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;p-org h-card&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [{&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Mozilla Foundation&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
          &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
      }]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: the nested h-card has implied 'name' and 'url' properties, just like any other root-class-name-only h-card on an &amp;lt;code&amp;gt;&amp;amp;lt;a href&amp;amp;gt;&amp;lt;/code&amp;gt; would.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FOR PARSERS ONLY:'''&lt;br /&gt;
&lt;br /&gt;
The nested 'h-card' could be marked up as an 'h-org' as well, which adds it to the nested microformat's type array, all as part of the property specified by the 'p-org'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;p-org h-card h-org&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [{&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Mozilla Foundation&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;, &amp;quot;h-org&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
          &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
      }]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FOR PARSERS ONLY:'''&lt;br /&gt;
&lt;br /&gt;
Without a property class name like 'p-org' holding all the nested objects together, we need to introduce another array for nested children (similar to the existing DOM element notion of children) of a microformat that are not attached to a specific property:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;h-org h-card&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;children&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;,&amp;quot;h-org&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
      }  &lt;br /&gt;
    }]&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since there's no property class name on the element with classes 'h-card' and 'h-org', the microformat representing that element is collected into the children array.&lt;br /&gt;
&lt;br /&gt;
Such a nested microformat implies some relationship (containment, being related), but is not as useful as if the nested microformat was a specific property of its parent.&lt;br /&gt;
&lt;br /&gt;
For this reason it's recommended that authors should not publish nested microformats without a  property class name, and instead, when nesting microformats, authors should always specify a property class name (like 'p-org') on the same element as the root class name(s) of the nested microformat(s) (like 'h-card' and/or 'h-org').&lt;br /&gt;
&lt;br /&gt;
'''FOR PARSERS ONLY:'''&lt;br /&gt;
&lt;br /&gt;
Or the nested object could be only marked up with 'h-card'. Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;h-card&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;children&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
      }  &lt;br /&gt;
    }]&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TO DO: Add h-event h-card example and JSON, per real world publishing examples like [http://www.swingtime.co.uk/List/ClSouth.html Swing Time: Classes in Southern England].'''&lt;br /&gt;
&lt;br /&gt;
== authoring ==&lt;br /&gt;
=== minimal markup ===&lt;br /&gt;
The best way to use microformats-2 is with as little additional markup as possible. This keeps your code cleaner, improves its maintainability, and thus the quality and longevity of your microformats.&lt;br /&gt;
&lt;br /&gt;
One big advantage of microformats-2 over previous microformats (and others) is the ability to add one class name to an existing element to create a structured item.&lt;br /&gt;
&lt;br /&gt;
See the [[microformats-2#simple_microformats_2_examples|simple examples at the top]] for a start, e.g.&lt;br /&gt;
&lt;br /&gt;
Simple hCards work just by adding &amp;lt;code&amp;gt;class=&amp;quot;h-card&amp;quot;&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card&amp;quot;&amp;gt;Frances Berriman&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://benward.me&amp;quot;&amp;gt;Ben Ward&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img class=&amp;quot;h-card&amp;quot; alt=&amp;quot;Sally Ride&amp;quot; &lt;br /&gt;
     src=&amp;quot;http://upload.wikimedia.org/wikipedia/commons/a/a4/Ride-s.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://tantek.com&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;img alt=&amp;quot;Tantek Çelik&amp;quot; src=&amp;quot;http://ttk.me/logo.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Tip: Inside an open tag, put the &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; attribute &amp;lt;em&amp;gt;first&amp;lt;/em&amp;gt;, then any human text content attributes (e.g. &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt;), then URL attributes (e.g. &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt;), and lastly other attributes (e.g. &amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt;). Putting the class attribute first ties it closely to the element name/tag itself, makes it more obvious, and thus more likely to be kept up to date.&lt;br /&gt;
&lt;br /&gt;
=== backward compatible ===&lt;br /&gt;
If you depend on current microformats [[implementations]], while they're being updated to support [[microformats-2]], you can include both existing microformats and microformats-2 markup.&lt;br /&gt;
&lt;br /&gt;
In short: use both sets of class names simultaneously. &lt;br /&gt;
&lt;br /&gt;
When doing so, use them on the same element, with the microformats-2 class name first, followed immediately by the existing microformats class name.&lt;br /&gt;
&lt;br /&gt;
Here are the microformats-2 hCards from above with current [[hCard]] markup as well, which may require adding a wrapping element (e.g. a &amp;lt;code&amp;gt;&amp;amp;lt;span&amp;amp;gt;&amp;lt;/code&amp;gt;) to separate the root class name element from explicit property class name elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-name fn&amp;quot;&amp;gt;Frances Berriman&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name fn u-url url&amp;quot; href=&amp;quot;http://benward.me&amp;quot;&amp;gt;Ben Ward&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img class=&amp;quot;p-name fn u-photo photo&amp;quot; alt=&amp;quot;Sally Ride&amp;quot; &lt;br /&gt;
       src=&amp;quot;http://upload.wikimedia.org/wikipedia/commons/a/a4/Ride-s.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-url url&amp;quot; href=&amp;quot;http://tantek.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img class=&amp;quot;p-name fn u-photo photo&amp;quot; alt=&amp;quot;Tantek Çelik&amp;quot; &lt;br /&gt;
         src=&amp;quot;http://ttk.me/logo.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tips:&lt;br /&gt;
* use the microformats-2 class name first, e.g.&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;h-card vcard&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;u-url url&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* and pair them when using an element for multiple properties, e.g.:&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;p-name fn u-url url&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;p-name fn u-photo photo&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* put microformats classes after classes for CSS (since page authors will likely interact more with their own classes for design than with microformats classes), e.g. as used on individual microformats [[events]] pages:&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;event-page h-event vevent&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The prefixes (h-, p-, etc.) of microformats2 class names provide easier recognition, and when followed by the similarly named existing class name, they're more easily recognized as related and thus kept together when the markup is maintained over time.&lt;br /&gt;
&lt;br /&gt;
Related FAQ: [[microformats2-faq#when_using_both_h-card_and_vcard_which_should_be_first_and_why|When using both h-card and vcard which should be first and why?]]&lt;br /&gt;
&lt;br /&gt;
== validators ==&lt;br /&gt;
microformats2 validators:&lt;br /&gt;
&lt;br /&gt;
{{new}} Test your microformatted web page with: &lt;br /&gt;
* https://pin13.net/mf2/&lt;br /&gt;
&lt;br /&gt;
Barnaby Walters has a hosted version of the open source php-mf2 [[parser]] where you can enter your markup into a textarea and see how it's parsed:&lt;br /&gt;
* http://waterpigs.co.uk/php-mf2/&lt;br /&gt;
&lt;br /&gt;
See the [[validators]] page for a longer list of validators.&lt;br /&gt;
&lt;br /&gt;
== Examples in the wild ==&lt;br /&gt;
Please add new examples in the wild of microformats-2 to the top of this list. When it gets too big we can move it to a separate page like [[microformats-2-examples-in-wild]].&lt;br /&gt;
&lt;br /&gt;
* ...&lt;br /&gt;
* David John Mead marks up his profile, blog posts and comments with h-card, h-entry and h-cite on [http://davidjohnmead.com davidjohnmead.com]&lt;br /&gt;
* [[User:Brian|Brian Suda]] marks up his blog posts up with h-entry and h-card on [http://optional.is/required/ optional.is]&lt;br /&gt;
* Ashton McAllen marks up his blog posts, reposts, comments and likes with h-entry, h-card and h-cite on [http://acegiak.net/ acegiak.net]&lt;br /&gt;
* Emma Kuo marks up her blog posts and notes with h-entry and h-card on [http://notenoughneon.com/ notenoughneon.com]&lt;br /&gt;
* Scott Jenson marks up his blog posts with h-entry and h-card on [http://jenson.org/ jenson.org]&lt;br /&gt;
* Emily McAllen marks up her blog posts with h-entry and h-card on [http://blackwoolholiday.com/ blackwoolholiday.com]&lt;br /&gt;
* Ryan Barrett marks up his blog posts, notes, replies and likes with h-entry and h-card on [https://snarfed.org/ snarfed.org]&lt;br /&gt;
* Barry Frost marks up his notes with h-entry, h-card and h-cite on [http://barryfrost.com/ barryfrost.com]&lt;br /&gt;
* Amber Case marks up her profile, blog posts, replies and notes with h-entry and h-card on [http://caseorganic.com/ caseorganic.com]&lt;br /&gt;
* Johannes Ernst marks up his blog posts with h-entry on [http://upon2020.com/blog/ upon2020.com]&lt;br /&gt;
* Michiel de Jong marks up his profile and notes with h-entry and h-card on [https://michielbdejong.com/ michielbdejong.com]&lt;br /&gt;
* Mike Taylor marks up his profile and blog posts with h-card and h-entry on [https://bear.im/bearlog/ bear.im]&lt;br /&gt;
* Erin Jo Ritchey marks up her profile, posts and comments using h-card, h-entry and h-cite with idno on [http://erinjo.is/ erinjo.is]&lt;br /&gt;
* Jeena Paradies marks up his profile, blog posts, notes and comments using h-card, h-entry and h-cite on [https://jeena.net/ jeena.net]&lt;br /&gt;
* Andy Sylvester marks up his profile, blog posts and comments using h-card and h-entry on [http://andysylvester.com/2014/03/01/howto-setting-up-the-selfoss-feed-reader-with-microformats-support/ andysylvester.com] (note: as of 2014-03-13 using h-entry for comments instead of correct h-cite --[[User:Barnabywalters|bw]] 14:44, 13 March 2014 (UTC))&lt;br /&gt;
* Hakan Demir marks up his Coupon and Voucher blog posts with h-entry and h-card on [http://www.gutscheinflagge.de/ gutscheinflagge.de]&lt;br /&gt;
* Chloe Weil marks up her blog posts with h-entry on [http://chloeweil.com/blog chloeweil.com]&lt;br /&gt;
* Christophe Ducamp marks up his blog posts and profile with h-entry and h-card on [http://christopheducamp.com/ christopheducamp.com]&lt;br /&gt;
* Glenn Jones marks up his blog posts, notes, replies, profile and comments with h-entry, h-card and h-cite on [http://glennjones.net/ glennjones.net]&lt;br /&gt;
* Marcus Povey marks up his blog posts and profile with h-entry and h-card on [http://www.marcus-povey.co.uk/ marcus-povey.co.uk]&lt;br /&gt;
* Eugen Busoiu marks up his web profile with h-card on [http://eugenbusoiu.com/#utm_source=microformats2&amp;amp;utm_medium=h-card&amp;amp;utm_campaign=Microformats eugenbusoiu.com]]&lt;br /&gt;
* Matthias Pfefferle marks up his blog posts, comments and profile with h-card, h-cite and h-entry on [http://notizblog.org/ notizblog.org]&lt;br /&gt;
* Kyle Mahan marks up his profile and notes with h-card and h-entry on [http://kylewm.com/ kylewm.com]&lt;br /&gt;
* Okinawan-lyrics marks up his blog posts with h-entry and h-card ([http://www.okinawan-lyrics.com/ example])&lt;br /&gt;
* Emil Björklund marks up his blog posts with h-entry and h-card ([http://thatemil.com/blog/2013/09/16/webmentioning-adactio/ example])&lt;br /&gt;
* App.net rolled out support for h-card and h-entry on all profile pages and permalink pages as of 2013-08-06 ([https://alpha.app.net/voidfiles example])&lt;br /&gt;
* Brett Comnes marks up his posts with h-entry and h-card ([http://bret.io/2013/06/29/getting-started-with-bower/ example])&lt;br /&gt;
* Ben Werdmuller marks up his posts with h-card and h-entry, u-in-reply-to and u-like ([http://werd.io/view/51d5097fbed7ded0633a5956 example])&lt;br /&gt;
* Sandeep Shetty marks his posts up with h-card and h-entry, as well as draft u-in-reply-to and experimental u-like properties ([http://sandeep.io/101 example])&lt;br /&gt;
* Laurent Eschenauer marks up his posts with h-entry ([http://eschnou.com/entry/first-autonomous-flight-of-my-nodecopter-62-24992.html example])&lt;br /&gt;
* Tom Morris marks up his posts using h-entry ([http://tommorris.org/posts/8417 example])&lt;br /&gt;
* Sinolandquality marks up some of their content using h-feed and h-entry on [http://www.sinolandquality.com/Blog/?page_id=3516&amp;amp;utm_content=buffere4d40&amp;amp;utm_medium=social&amp;amp;utm_source=twitter.com&amp;amp;utm_campaign=buffer sinolandquality.com]&lt;br /&gt;
* [http://www.w3.org/conf/ W3Conf 2013] uses h-event for the main event, and h-card for all the speakers and notable attendees. The h-cards make particularly good use of implied name, url, and photo properties.&lt;br /&gt;
* [http://wordpress.org/extend/themes/sempress SemPress] is a WordPress theme that supports h-card, h-feed/h-entry and h-as-*&lt;br /&gt;
* [http://the-pastry-box-project.net/ The Pastry Box Project] use h-card and h-entry markup on their homepage and individual thoughts pages&lt;br /&gt;
* Tom Morris uses h-card and [[XFN]] to markup [http://tommorris.org/pages/blogroll his blogroll].&lt;br /&gt;
* Aaron Parecki uses h-card to markup both authorship and references to people in his notes permalinks, e.g. [http://aaronparecki.com/2012/230/reply/1 2012/230/reply/1].&lt;br /&gt;
* [http://tantek.com/ Tantek Çelik] uses h-card, h-event, and h-entry on his home page, as well as h-entry on all post permalinks, e.g. [http://tantek.com/2012/243/t1/name-beats-title-modern-use-dubline-core-wrong-uf2 2012-243 post], with [[rel-prev]]/[[rel-next]] (if applicable) to indicate prev/next posts, and with [[rel-author]] to his home page with canonical hCard to indicate authorship.&lt;br /&gt;
* [http://waterpigs.co.uk/ Barnaby Walters] uses h-card on his home page, h-card, h-entry and XFN markup on his [http://waterpigs.co.uk/notes notes page].&lt;br /&gt;
** 2013-01-25 Barnaby Walters: &amp;lt;cite&amp;gt;[http://waterpigs.co.uk/articles/experimental-markup Experimental Markup]&amp;lt;/cite&amp;gt; - describes how he's using microformats2 vocabularies: &amp;lt;code&amp;gt;h-adr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, and experimental vocabularies: &amp;lt;code&amp;gt;h-feed&amp;lt;/code&amp;gt; (embedded for update histories), [[activity-streams]] objects &amp;lt;code&amp;gt;h-as-article&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-as-collection&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-as-note&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-as-update&amp;lt;/code&amp;gt;, as well as experimental properties: &amp;lt;code&amp;gt;u-alternate&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;u-as-downstream-duplicate&amp;lt;/code&amp;gt; (links to POSSE copies), and &amp;lt;code&amp;gt;u-in-reply-to&amp;lt;/code&amp;gt; (links to content that the posts are in reply to). &lt;br /&gt;
* [http://tantek.com/presentations/2012/06/microformats microformats.org at 7 years] presentation with h-event and h-card markup for people and organizations.&lt;br /&gt;
* [http://tantek.com/presentations/2012/06/pdf2012-indieweb.html Rise of the Indie Web hCards] (from Personal Democracy Forum 2012 #pdf12 #pdf2012) has [[microformats-2]] h-calendar and h-card markup&lt;br /&gt;
* WebMaker by Mozilla has [[microformats-2]] h-calendar and h-card on event search (e.g. [https://webmaker.org/en-US/events/near/?lat=45.5234515&amp;amp;lng=-122.6762071 search near Portland Oregon]) and event pages (e.g. [https://webmaker.org/en-US/events/192f56eb9/ IndieWebCamp 2012]).[https://twitter.com/microformats/status/212207925643587585]&lt;br /&gt;
* WebFWD by Mozilla has [[microformats-2]] h-card markup on [https://webfwd.org/about/experts/ experts] and [https://webfwd.org/about/team/ team] pages&lt;br /&gt;
* [http://indiewebcamp.com IndieWebCamp] has [[microformats-2]] h-event markup with nested h-cards for the organizers and the location.&lt;br /&gt;
* [https://wiki.mozilla.org/Events Mozilla Events] page has [[microformats-2]] h-event markup with attendees marked up with h-card.&lt;br /&gt;
* The [http://pdx.esri.com/blog/2013/10/17/introducing-mapattack/ Esri PDX Blog] has h-entry markup on all blog posts (as of 2013-10-19), and h-product markup on [http://pdx.esri.com/projects/terraformer/ project pages]&lt;br /&gt;
&lt;br /&gt;
=== offline ===&lt;br /&gt;
* spreadly marks up share permalink pages with h-entry, as well as minimal h-cards and experimental p-like properties ([http://my.spread.ly/share/51d570bc09e9486562000002 example])&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
{{new}} Test your microformatted web page with: &lt;br /&gt;
* https://pin13.net/mf2/ (where it says &amp;quot;Microformats Parser&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Blogging tools ===&lt;br /&gt;
* '''Storytlr''' parses the 'target' from [http://indiewebcamp.com/pingback pingbacks] for [https://github.com/storytlr/storytlr/blob/master/protected/application/public/controllers/PingbackController.php#L63 h-entry with properties and nested h-card] for information to automatically display in the [http://eschnou.com/entry/testing-indieweb-federation-with-waterpigscouk-aaronpareckicom-and--62-24908.html comments section on a post].&lt;br /&gt;
&lt;br /&gt;
=== Converters ===&lt;br /&gt;
&lt;br /&gt;
* '''[https://github.com/snarfed/activitystreams-unofficial activitystreams-unofficial]''' is a library and REST API that converts between silo APIs, [[ActivityStreams]] and [[microformats2]] (all directions). Supported silos include Facebook, Twitter, Instagram and Google+. Users include [http://brid.gy/ Bridgy], [http://reader.kylewm.com/ Woodwind], and [https://facebook-atom.appspot.com/ facebook-atom] and [https://twitter-atom.appspot.com/ twitter-atom], among others.&lt;br /&gt;
&lt;br /&gt;
* '''[http://pipes.yahoo.com/pipes/pipe.info?_id=afc5568b4e8643bfb05436b1caaf91bc microformats to RSS]''' - a Yahoo! pipe that converts a URL containing an [[h-feed]] containing h-entries, into an [[RSS]] feed ([http://waterpigs.co.uk/notes/4SeNi5/ 2013-10-21 blog post announcing])&lt;br /&gt;
&lt;br /&gt;
=== Parsers ===&lt;br /&gt;
Parsers, open source libraries:&lt;br /&gt;
==== Go ====&lt;br /&gt;
* '''andyleap/microformats''' Golang microformats2 parser&lt;br /&gt;
** github open source: https://github.com/andyleap/microformats&lt;br /&gt;
** live textarea entry: http://mf2.vendaria.net&lt;br /&gt;
==== Java ====&lt;br /&gt;
* '''mf2j''' An early-stage Java microformats2 parser&lt;br /&gt;
* github open source: https://github.com/kylewm/mf2j&lt;br /&gt;
* live: https://mf2j.herokuapp.com/?url={http://example.com}&lt;br /&gt;
&lt;br /&gt;
==== Javascript ====&lt;br /&gt;
* '''microformat-node''' Node.js microformats2 parser&lt;br /&gt;
** github open source: https://github.com/glennjones/microformat-node&lt;br /&gt;
** test suite: https://github.com/microformats/tests&lt;br /&gt;
** blog post: http://glennjones.net/2013/01/brand-new-microformats-2-parser/&lt;br /&gt;
** live: http://glennjones.net/tools/microformats/&lt;br /&gt;
* '''microformat-shiv'''  - cross browser javascript microformats 2 parser which can also be used in browser extensions.&lt;br /&gt;
** http://microformatshiv.com/&lt;br /&gt;
** github open source: https://github.com/glennjones/microformat-shiv&lt;br /&gt;
&lt;br /&gt;
==== PHP ====&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;php-mf2&amp;quot;&amp;gt;php-mf2&amp;lt;/span&amp;gt;''' - PHP microformats2 parser&lt;br /&gt;
** github open source: https://github.com/indieweb/php-mf2&lt;br /&gt;
** Packagist: https://packagist.org/packages/mf2/mf2&lt;br /&gt;
** live: &lt;br /&gt;
*** textarea entry: http://waterpigs.co.uk/php-mf2/&lt;br /&gt;
*** URL entry: https://pin13.net/mf2/&lt;br /&gt;
==== Python ====&lt;br /&gt;
* ''mf2py'' Python microformats2 parser&lt;br /&gt;
** main entry: [[mf2py]]&lt;br /&gt;
** github open source: https://github.com/tommorris/mf2py&lt;br /&gt;
** live: &lt;br /&gt;
*** URL entry: [https://mf2py.herokuapp.com/ mf2py.herokuapp.com]&lt;br /&gt;
*** textarea entry: https://kartikprabhu.com/connection/mfparser&lt;br /&gt;
*** another textarea: http://www.unmung.com/?html=&lt;br /&gt;
*** URL and/or textarea: https://kylewm.com/services/mf2&lt;br /&gt;
==== Ruby ====&lt;br /&gt;
* '''G5/microformats2''' Ruby microformats2 parser&lt;br /&gt;
** github open source: https://github.com/G5/microformats2&lt;br /&gt;
&lt;br /&gt;
== Presentations ==&lt;br /&gt;
Presentations about microformats2:&lt;br /&gt;
* 2013-01-24 &amp;lt;cite&amp;gt;[http://waterpigs.co.uk/presentations/microformats-2/ Microformats 2]&amp;lt;/cite&amp;gt; presentation by [[User:Barnabywalters|Barnaby Walters]] at the [[events/2013-01-24-exeter-web-meetup|Exeter Web Meetup]] in Devon, UK.&lt;br /&gt;
* 2012-09-21 &amp;lt;cite&amp;gt;[http://tantek.com/presentations/2012/09/microformats2/ microformats2 &amp;amp;amp; bits of HTML5: The Evolution Of Web Data]&amp;lt;/cite&amp;gt; presentation by [[User:Tantek|Tantek Çelik]] ([http://twitter.com/t @t]) at [[events/2012-09-21-refreshlx|RefreshLX]] in Lisbon, Portugal.&lt;br /&gt;
* 2012-07-21 &amp;lt;cite&amp;gt;[http://tantek.com/presentations/2012/07/html5-uf2/ HTML5 and microformats2: The Evolution Of Web Data]&amp;lt;/cite&amp;gt; presentation by [[User:Tantek|Tantek Çelik]] ([http://twitter.com/t @t]) at [[events/2012-07-21-cascadesf|Innovators of the Web conference]] in San Francisco, CA.&lt;br /&gt;
* 2012-07-14 &amp;lt;cite&amp;gt;[http://tantek.com/presentations/2012/07/html5-microformats2/ HTML5 and microformats2: The Evolution Of Web Data]&amp;lt;/cite&amp;gt; presentation by [[User:Tantek|Tantek Çelik]] ([http://twitter.com/t @t]) at [[events/2012-07-14-open-web-camp-4|Open Web Camp IV]] in San Jose, CA.&lt;br /&gt;
&lt;br /&gt;
== Testimonials ==&lt;br /&gt;
* &amp;lt;blockquote class=&amp;quot;twitter-tweet&amp;quot;&amp;gt;To prove the web standards community can come up with better standards than the SE’s, compare this: http://microformats.org/wiki/microformats-2 with schema . org &amp;amp;mdash; Joost de Valk (@yoast) [https://twitter.com/yoast/status/298907685452124160 2013-02-05 13:35]&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote class=&amp;quot;twitter-tweet&amp;quot;&amp;gt;... I’m hoping SE’s will pick up microformats2. It’s SO much cleaner. &amp;amp;mdash; Joost de Valk (@yoast) [https://twitter.com/yoast/status/298911287117758464 2013-02-05 13:49]&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote class=&amp;quot;twitter-tweet&amp;quot;&amp;gt;... But damn Microformats2 are sexy. &amp;amp;mdash; Joost de Valk (@yoast) [https://twitter.com/yoast/status/298912179292344320 2013-02-05 13:53]&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== About This Brainstorm ==&lt;br /&gt;
The rest of this page is a brainstorm currently written in narrative / exploratory format, that is, acknowledging the success that microformats have had, why so, and then a walk through of known issues with microformats in general along with iteration of ways to address said issues, ending up with the current microformats 2 design as a conclusion.&lt;br /&gt;
&lt;br /&gt;
The proposals build on each other resulting in a solution that addresses the vast majority of general issues. The proposed changes merit a major version number increment, hence microformats 2.&lt;br /&gt;
&lt;br /&gt;
This mathematical proof/derivation style is used to explicitly encourage understanding (and double-checking) of the rational steps taken in the development of microformats 2. Reasons are documented, sometimes along with alternatives considered (and reasons for rejection of those alternatives).&lt;br /&gt;
&lt;br /&gt;
When the microformats 2 brainstorm has evolved sufficiently to demonstrate some degree of stability, usability, and implementability, it will be rewritten in a more declarative specification style, and this narrative/derivation will be archived to a background development page for historical purposes.&lt;br /&gt;
&lt;br /&gt;
— [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
2004: In early February microformats were introduced as a concept at eTech, and in September [[hCard]] and [[hCalendar]] were proposed at FOO Camp.&lt;br /&gt;
&lt;br /&gt;
2010:&lt;br /&gt;
* 34% of webdevs use microformats ([http://www.webdirections.org/sotw10/markup/#semantics 2010 State of Web Development survey])&lt;br /&gt;
* 1.88 billion hCards (per [[Yahoo]] SearchMonkey)&lt;br /&gt;
* 36 million hCalendar events (ibid)&lt;br /&gt;
&lt;br /&gt;
* XFN -&amp;gt; Social Graph API -&amp;gt; Web as Social Network / Address Book&lt;br /&gt;
&lt;br /&gt;
== Addressing Issues ==&lt;br /&gt;
=== AUTHORS and PUBLISHING ===&lt;br /&gt;
Authors and publishers are perhaps the most important constituency in the microformats community. There are more of them than there are developers, programmers, parsers, etc. and they're the ones that solved the chicken-egg problem by publishing microformats even before tools were available for consuming them.&lt;br /&gt;
&lt;br /&gt;
Therefore we must first address author/publisher general issues with microformats.&lt;br /&gt;
&lt;br /&gt;
==== can we make the simplest case simpler ====&lt;br /&gt;
Issue: '''How can we make it easier for authors to publish microformats?'''&lt;br /&gt;
&lt;br /&gt;
Currently the simplest hCard:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
    Chris Messina&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
requires 2 elements (nested, with perhaps at least one being pre-existing), and 2 class names.&lt;br /&gt;
&lt;br /&gt;
Web authors/designers are used to the simplicity of most HTML tags, e.g. to mark up a heading:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
requires just 1 element.&lt;br /&gt;
&lt;br /&gt;
[http://zeldman.com/ Jeffrey Zeldman] pointed out this apparent perceived incremental complexity (2 elements vs 1) during a microformats workshop in 2009 in New York City.&lt;br /&gt;
&lt;br /&gt;
'''How can we make microformats just as easy?'''&lt;br /&gt;
&lt;br /&gt;
'''Proposal: allow root class name only.'''&lt;br /&gt;
&lt;br /&gt;
This would enable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;vcard&amp;quot;&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
requiring only 1 class name for the simplest case.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== renaming for usability ====&lt;br /&gt;
Otherwise known as, choosing one form of consistency over another.&lt;br /&gt;
&lt;br /&gt;
'''Can we do even better?'''&lt;br /&gt;
&lt;br /&gt;
One of the most common questions asked about hCard is:&lt;br /&gt;
&lt;br /&gt;
[[hcard-faq#Why_does_hCard_use_vcard_as_the_root_class_name|Why does hCard use vcard as the root class name?]]&lt;br /&gt;
&lt;br /&gt;
This slight inconsistency between the name of the format and the name of the root class name consistently causes confusion in a large percentage of newcomers to microformats.&lt;br /&gt;
* See [[issues#hcard-vs-vcard-name]] for details/links.&lt;br /&gt;
&lt;br /&gt;
Though in microformats we believe very strongly in the [[principle]] of [[reuse]], we have to admit that in this case experience/evidence has shown that this may be a case where we re-used something too far beyond it's original meaning. Thus:&lt;br /&gt;
&lt;br /&gt;
'''Proposal: use root class name &amp;quot;hcard&amp;quot; instead of &amp;quot;vcard&amp;quot; for future hCards.'''&lt;br /&gt;
&lt;br /&gt;
This would result in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;hcard&amp;quot;&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
making the simple case even simpler:&lt;br /&gt;
&lt;br /&gt;
Just 1 additional class name, named the same as the format you're adding.  Think hCard, markup class=&amp;quot;hcard&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At a minimum for compatibility we should document that parsers should accept &amp;quot;hcard&amp;quot; as an alternative to &amp;quot;vcard&amp;quot; as the root class name for hCard 1.0, and similarly for hCalendar 1.0: &amp;quot;hcalendar&amp;quot; in addition to &amp;quot;vcalendar&amp;quot;, &amp;quot;hevent&amp;quot; in addition to &amp;quot;vevent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
However, for [[microformats-2]] we are going to distinguish root class names further by using an &amp;quot;h-&amp;quot; prefix (e.g. &amp;quot;h-card&amp;quot;). Read on to understand why.&lt;br /&gt;
&lt;br /&gt;
==== simplifying to only needing one element ====&lt;br /&gt;
It's very important for the simple case to be as simple as possible, to enable the maximum number of people to get started with minimum effort. (The idea of using a single class name for a microformat was proposed by Ryan Cannon in 2006 specifically [[hcard-implied|for hCard]], and rediscovered by [[User:Tantek|Tantek]] in 2010 and subsequently generalized to all microformats.)&lt;br /&gt;
&lt;br /&gt;
From there on, it's ok to require incremental effort for incremental return.&lt;br /&gt;
&lt;br /&gt;
E.g. to add any additional information about a person, add explicit property names.&lt;br /&gt;
&lt;br /&gt;
'''How does this simple root-only case work?'''&lt;br /&gt;
&lt;br /&gt;
* root class name reflects name of the microformat&lt;br /&gt;
* every microformat must require at most 1 property (preferably 0)&lt;br /&gt;
** admit that requiring a field in an application just results in noise (the 90210 problem - apps which require zip code get lots of false 90210 entries), and specify that any application use cases which appear to &amp;quot;require&amp;quot; specific properties must instead define how to imply sensible defaults for them.&lt;br /&gt;
* when only a root class name is specified, imply the entire text contents of the element as the value of the primary property of the microformat. e.g.&lt;br /&gt;
** &amp;quot;hcard&amp;quot; implies &amp;quot;fn&amp;quot;&lt;br /&gt;
** hcalendar event - &amp;quot;hevent&amp;quot; - implies &amp;quot;summary&amp;quot;&lt;br /&gt;
** &amp;quot;hreview&amp;quot; implies &amp;quot;summary&amp;quot;&lt;br /&gt;
** &amp;quot;hentry&amp;quot; implies &amp;quot;entry-summary&amp;quot; (perhaps collapse into &amp;quot;summary&amp;quot; - in practice they're not sufficiently semantically distinct to require separate property names)&lt;br /&gt;
** '''OR''' instead of making the one implied property be vocabulary specific, introduce a new generic (applicable to all vocabularies) 'p-name' property (subsuming hCard's 'fn'). See [[microformats-2-brainstorming#further_simplifications|microformats 2 brainstorming: further simplifications]] for latest thoughts along these lines, including the following specific mark-up implied generic properties across all microformats (based on existing published markup use-cases)&lt;br /&gt;
*** 'p-name'&lt;br /&gt;
*** 'u-url'&lt;br /&gt;
*** 'u-photo'&lt;br /&gt;
&lt;br /&gt;
==== flat sets of properties ====&lt;br /&gt;
'''What more can we simplify about microformats?'''&lt;br /&gt;
&lt;br /&gt;
Numerous individuals have provided the feedback that whenever there is more than one level of hierarchy in a microformat, many (most?) developers get confused - in particular Kavi Goel of Google / Rich Snippets provided this feedback at a microformats dinner.  Thus depending on multiple levels of hierarchy is likely resulting in a loss of authorability, perhaps even accuracy as confusion undoubtedly leads to more errors. Thus:&lt;br /&gt;
&lt;br /&gt;
'''Proposal: simplify all microformats to flat sets of properties. '''&lt;br /&gt;
&lt;br /&gt;
What this means:&lt;br /&gt;
* all microformats are simply an object with a set of properties with values.&lt;br /&gt;
* no more subproperties- drop the notion of subproperties.&lt;br /&gt;
* use composition of multiple microformats for any further hierarchy, e.g. the &amp;quot;location&amp;quot; of an hCalendar event can be an hCard, or the &amp;quot;agent&amp;quot; of one hCard can be another hCard.&lt;br /&gt;
&lt;br /&gt;
For example for hCard this would mean the following specific changes to keep relevant functionality:&lt;br /&gt;
* drop &amp;quot;n&amp;quot;, promote all &amp;quot;n&amp;quot; subproperties to full properties&lt;br /&gt;
** given-name, family-name, additional-name, honorific-prefix, honorific-suffix&lt;br /&gt;
* treat &amp;quot;geo&amp;quot; as a nested microformat&lt;br /&gt;
* treat &amp;quot;adr&amp;quot; as a nested microformat (what to do about adr's &amp;quot;type&amp;quot;?)&lt;br /&gt;
* treat &amp;quot;org&amp;quot; as a flat string and drop &amp;quot;organization-name&amp;quot; and &amp;quot;organization-unit&amp;quot; (in practice rarely used, also not revealed or ignored in contact management user interfaces - e.g. Address Book)&lt;br /&gt;
&lt;br /&gt;
Example: add a middle initial to the previous example Chris Messina's name, and markup each name component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;hcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
# use of an explicit span with &amp;quot;fn&amp;quot; to markup his entire formatted name&lt;br /&gt;
# use of the abbr element to explicitly indicate the semantic that &amp;quot;R.&amp;quot; is merely an abbreviation for his additional-name.&lt;br /&gt;
&lt;br /&gt;
==== distinguishing properties from other classes ====&lt;br /&gt;
Current microformats properties re-use generic terms like &amp;quot;summary&amp;quot;, &amp;quot;photo&amp;quot;, &amp;quot;updated&amp;quot; both for ease of use and understanding.&lt;br /&gt;
&lt;br /&gt;
However, through longer term experience, we've seen sites that accidentally drop (or break) their microformats support (e.g. Upcoming.org, Facebook) because web authors sometimes rewrite all their class names, and either are unaware that microformats were in the page, or couldn't easily distinguish microformats property class names from other site-specific class names.&lt;br /&gt;
&lt;br /&gt;
This issue has been reported by a number of web authors.&lt;br /&gt;
* See: [[issues#class-collisions]]&lt;br /&gt;
&lt;br /&gt;
Thus microformats 2 uses ''prefixes'' for property class names, e.g.:&lt;br /&gt;
* '''p-summary''' instead of ''summary''&lt;br /&gt;
* '''u-photo''' instead of ''photo'' &lt;br /&gt;
* '''dt-updated''' instead of ''updated''&lt;br /&gt;
&lt;br /&gt;
Such prefixing of all microformats class names was first suggested by Scott Isaacs of Microsoft to Tantek on a visit to Microsoft sometime in 2006/2007, but specifically aimed at making microformats easier to parse. At the time the suggestion was rejected since microformats were focused on web authors rather than parsers.&lt;br /&gt;
&lt;br /&gt;
However, since experience has shown that distinguishing property class names is an issue for '''both web authors and parser developers''', this is a key change that microformats 2 is adopting. See the next section for details.&lt;br /&gt;
&lt;br /&gt;
=== COMMUNITY and TOOLS ===&lt;br /&gt;
The second most important constituency in the microformats community are the developers, programmers, tool-makers.&lt;br /&gt;
&lt;br /&gt;
A non-trivial number of them have been sufficiently frustrated with some general issues with microformats that they've done the significant extra work to support very different and less friendly alternatives (microdata, RDFa). Based on this real-world data (market behavior), it behooves us to address these general issues with microformats for this constituency.&lt;br /&gt;
&lt;br /&gt;
==== existing microformats parsing requirements ====&lt;br /&gt;
COMMUNITY and TOOLS (that) USE MICROFORMATS &lt;br /&gt;
* parser / parsing&lt;br /&gt;
* structured&lt;br /&gt;
* getting the data out&lt;br /&gt;
* json - 1:1 mapping&lt;br /&gt;
&lt;br /&gt;
[[parsing]] microformats currently requires&lt;br /&gt;
# a list of root class names of each microformat to be parsed&lt;br /&gt;
# a list of properties for each specific microformats, along with knowledge of the type of each property in order to parse their data from potentially different portions of the HTML markup&lt;br /&gt;
# some number of format-specific specific rules (markup/content optimizations)&lt;br /&gt;
&lt;br /&gt;
This has meant that whenever a new microformat is drafted/specificied/adopted, parsers need to updated to handle it correctly, at a minimum to parse them when inside other microformats and avoid errantly implying properties from one to the other (containment, [[mfo]] problem).&lt;br /&gt;
&lt;br /&gt;
==== naming conventions for generic parsing ====&lt;br /&gt;
I think there is a fairly simple solution to #1 and #2 from the above list, and we can make progress towards minimizing #3.  In short:&lt;br /&gt;
&lt;br /&gt;
'''Proposal: a set of naming conventions for microformat root class names and properties that make it obvious when:'''&lt;br /&gt;
* a class name represents a microformat root class name&lt;br /&gt;
* a class name represents a microformat property name&lt;br /&gt;
* a class name represents a microformat property that needs special parsing (specific type of property).&lt;br /&gt;
&lt;br /&gt;
In particular - derived from the real world examples of existing proven microformats (rather than any abstraction of what a schema should have)&lt;br /&gt;
* '''&amp;quot;h-*&amp;quot; for root class names''', e.g. &amp;quot;h-card&amp;quot;, &amp;quot;h-event&amp;quot;, &amp;quot;h-entry&amp;quot;&lt;br /&gt;
** The 'h-' prefix is based on the existing microformats naming pattern of starting with 'h'.&lt;br /&gt;
* '''&amp;quot;p-*&amp;quot; for simple (text) properties''', e.g. &amp;quot;p-fn&amp;quot;, &amp;quot;p-summary&amp;quot;&lt;br /&gt;
** vocabulary generic parsing, element text in general, treat certain HTML element/attribute combination as special and use those first, e.g. img/alt, abbr/title.&lt;br /&gt;
** The 'p-' prefix is based on the word &amp;quot;property&amp;quot; starting with 'p'.&lt;br /&gt;
* '''&amp;quot;u-*&amp;quot; for URL properties''', e.g. &amp;quot;u-url&amp;quot;, &amp;quot;u-photo&amp;quot;, &amp;quot;u-logo&amp;quot;&lt;br /&gt;
** special parsing required: prefer a/href, img/src, object/data etc. attributes to element contents.&lt;br /&gt;
** The 'u-' prefix is based on URL/URI starting with the letter 'u', which is the type of most of these related properties.&lt;br /&gt;
* '''&amp;quot;dt-*&amp;quot; for datetime properties''', e.g. &amp;quot;dt-start&amp;quot;, &amp;quot;dt-end&amp;quot;, &amp;quot;dt-bday&amp;quot;&lt;br /&gt;
** special parsing required: [[value-class-pattern]], in particular separate date time value parsing for better human readabillity / DRY balance.&lt;br /&gt;
** The 'dt-' prefix is based on &amp;quot;date time&amp;quot; having the initials &amp;quot;dt&amp;quot; and the preponderance of existing date time properties starting with &amp;quot;dt&amp;quot;, e.g. dtstart, dtend, dtstamp, dtreviewed.&lt;br /&gt;
* '''&amp;quot;e-*&amp;quot; for element tree properties''' where the entire contained element hierarchy is the value, e.g. &amp;quot;e-content&amp;quot; (formerly &amp;quot;entry-content&amp;quot;) for [[hAtom]]. The 'e-' prefix can also be mnemonically remembered as &amp;quot;element tree&amp;quot;, &amp;quot;embedded markup&amp;quot;, or &amp;quot;encapsulated markup&amp;quot;.&lt;br /&gt;
** special parsing required: follow the [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#serializing-html-fragments HTML spec: Serializing HTML Fragments algorithm] to create a serialization.&lt;br /&gt;
&lt;br /&gt;
This provides a simpler transition/education story for existing microformats authors/publishers: &lt;br /&gt;
* &amp;quot;h*&amp;quot; to &amp;quot;h-*&amp;quot;, &amp;quot;dt*&amp;quot; to &amp;quot;dt-*&amp;quot;, url-like properties to &amp;quot;u-*&amp;quot;, entire embedded markup to &amp;quot;e-*&amp;quot;, and &amp;quot;p-*&amp;quot; for all &amp;quot;plain text&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
See [[microformats-2-prefixes]] for further thoughts and discussions on these and other class prefixes.&lt;br /&gt;
&lt;br /&gt;
Example: taking that simple heading hCard example forward:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card&amp;quot;&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As part of microformats 2 we would immediately define root class names and property names for all existing microformats and drafts consistent with this naming convention, and require support thereof from all new implementations, as well as strongly encouraging existing implementations to adopt the simplified microformats 2 syntax and mechanism. Question: which microformats deserve explicit backward compatibility?&lt;br /&gt;
&lt;br /&gt;
As a community we would continue to use the microformats [[process]] both for researching and determining the need for new microformats, and for naming new microformat property names for maximum re-use and interoperability of a shared vocabulary.&lt;br /&gt;
&lt;br /&gt;
If it turns out we need a new property type in the future, we can use one of the remaining single-letter-prefixes to add it to microformats 2. This would require updating of parsers of course, but in practice the number of different types of properties has grown very slowly, and we know from other schema/programming languages that there's always some small limited number of scalar/atomic property types that you need, and using those you can create compound types/objects that represent richer / more complicated types of data. See [[microformats-2-prefixes]] for documentation of existing single-letter class name prefixes in practice.&lt;br /&gt;
&lt;br /&gt;
=== ADVANTAGES ===&lt;br /&gt;
This has numerous advantages:&lt;br /&gt;
* '''better maintainability''' - much more obvious to web authors/designers/publishers which class names are for/from microformats.&lt;br /&gt;
* '''no chance of collision''' - for all practical purposes with existing class names and thus avoiding any need to add more complex CSS style rules to prevent unintended styling effects.&lt;br /&gt;
* '''simpler parsing''' - parsers can now do a simple stream-parse (or in-order DOM tree walk) and parse out '''all''' microformat objects, properties, and values, without having to know anything about any specific microformats.&lt;br /&gt;
* '''separation of syntax and vocabulary''' - by abstracting microformats 2 syntax independent of any vocabulary, it allows and encourages development of shared vocabularies  that can work in alternative syntaxes.&lt;br /&gt;
&lt;br /&gt;
More examples: here is that same heading example with name components:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;p-additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with a hyperlink to Chris's URL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;a class=&amp;quot;p-fn u-url&amp;quot; href=&amp;quot;http://factoryjoe.com/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;p-additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== COMPATIBILITY ===&lt;br /&gt;
&lt;br /&gt;
microformats 2 is backwards compatible in that in permits content authors to markup with both old and new class names for compatibility with old tools.&lt;br /&gt;
&lt;br /&gt;
Here is a simple example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;Chris Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
a microformats 2 parser would see the class name &amp;quot;h-card&amp;quot; and imply the one required property from the contents, while a microformats 1.0 parser would find the class name &amp;quot;vcard&amp;quot; and then look for the class name &amp;quot;fn&amp;quot;. no data duplication is required. this is a very important continuing application of the &amp;lt;abbr title=&amp;quot;don't repeat yourself&amp;quot;&amp;gt;DRY&amp;lt;/abbr&amp;gt; [[principle]].&lt;br /&gt;
&lt;br /&gt;
And the above hyperlinked example with both sets of class names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;a class=&amp;quot;p-fn u-url n fn url&amp;quot; href=&amp;quot;http://factoryjoe.com/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-given-name given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;p-additional-name additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-family-name family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VENDOR EXTENSIONS ===&lt;br /&gt;
&lt;br /&gt;
(this section was only discussed verbally and not written up during discussions - capturing here as it is topical)&lt;br /&gt;
&lt;br /&gt;
Proprietary extensions to formats have typically been shortlived experimental failures with one big recent exception.&lt;br /&gt;
&lt;br /&gt;
Proprietary or experimental CSS3 property implementations have been very successful.&lt;br /&gt;
&lt;br /&gt;
There has been much use of border radius properties and animations/transitions which use CSS properties with vendor-specific prefixes like:&lt;br /&gt;
&lt;br /&gt;
* -moz-border-radius&lt;br /&gt;
* -webkit-border-radius&lt;br /&gt;
&lt;br /&gt;
etc.&lt;br /&gt;
&lt;br /&gt;
Note that these are merely string '''prefixes''', not bound to any URL, and thus not namespaces in any practical sense of the word.  This is quite an important distinction, as avoiding the need to bind to a URL has made them easier to support and use.&lt;br /&gt;
&lt;br /&gt;
This use of vendor specific CSS properties has in recent years allowed the larger web design/development/implementor communities to experiment and iterate on new CSS features while the features were being developed and standardized.&lt;br /&gt;
&lt;br /&gt;
The benefits have been two-fold:&lt;br /&gt;
* designers have been able to make more attractive sites sooner (at least in some browsers)&lt;br /&gt;
* features have been market / real-world tested before being fully standardized, thus resulting in better features&lt;br /&gt;
&lt;br /&gt;
Implementers have used/introduced &amp;quot;x-&amp;quot; prefixes for IETF MIME/content-types for experimental content-types, MIME parameter extensions, and HTTP header extensions, per RFC 2045 Section 6.3, RFC 3798 section 3.3, and [https://secure.wikimedia.org/wikipedia/en/wiki/List_of_HTTP_header_fields#Common_non-standard_headers Wikipedia: HTTP header fields - non-standard headers] (could use RFC reference instead) respectively, like:&lt;br /&gt;
&lt;br /&gt;
* application/x-latex (per [https://secure.wikimedia.org/wikipedia/en/wiki/Internet_media_type#Type_x Wikipedia Internet media type: Type x])&lt;br /&gt;
* x-spam-score (in email headers)&lt;br /&gt;
* X-Pingback (per [http://en.wikipedia.org/wiki/Pingback Wikipedia:Pingback])&lt;br /&gt;
&lt;br /&gt;
Some standard types started as experimental &amp;quot;x-&amp;quot; types, thus demonstrating this experiment first, standardize later approach has worked for at least some cases:&lt;br /&gt;
&lt;br /&gt;
* image/x-png (standardized as image/png, both per [http://tools.ietf.org/html/rfc2083 RFC2083])&lt;br /&gt;
&lt;br /&gt;
There have been times when specific sites have wanted to extend microformats beyond what the set of properties in the microformat, and currently lack any '''experimental''' way to do so - to try and see if a feature (or even a whole format) is interesting in the real world before bothering to pursue researching and walking it through the microformats process.  Thus:&lt;br /&gt;
&lt;br /&gt;
'''Proposal:'''&lt;br /&gt;
* '*-x-' + '-' + meaningful name for root and property class names&lt;br /&gt;
** where &amp;quot;*&amp;quot; indicates the single-character-prefix as defined above&lt;br /&gt;
** where &amp;quot;x&amp;quot; indicates a literal 'x' for an experimental extension OR&lt;br /&gt;
** OR &amp;quot;x&amp;quot; indicates a vendor prefix (more than one character, e.g. like CSS vendor extension abbreviations, or some stock symbols, avoiding first words/phrases/abbreviations of microformats properties like dt-)&lt;br /&gt;
** e.g.&lt;br /&gt;
** &amp;quot;h-bigco-one-ring&amp;quot; - a hypothetical &amp;quot;bigco&amp;quot; vendor-specific &amp;quot;one-ring&amp;quot; microformat root class name.&lt;br /&gt;
** &amp;quot;p-goog-preptime&amp;quot; - to represent [http://www.google.com/support/webmasters/bin/answer.py?answer=173379 Google's &amp;quot;preptime&amp;quot; property extension] to [[hRecipe]] (aside: &amp;quot;duration&amp;quot; may be another property type to consider separate from &amp;quot;datetime&amp;quot; as it may be subject to different parsing rules.)&lt;br /&gt;
** &amp;quot;p-x-prep-time&amp;quot; - a possible experimental property name to be added to hRecipe upon consideration/documentation of real-world usage/uptake.&lt;br /&gt;
&lt;br /&gt;
Background - this proposal is a composition of the following (at least somewhat) successful vendor extension syntaxes&lt;br /&gt;
* [http://www.w3.org/TR/CSS21/syndata.html#vendor-keywords CSS 2.1 4.1.2.1 Vendor-specific extensions]&lt;br /&gt;
* IETF MIME/content-type &amp;quot;x-*&amp;quot; extensions per RFC 2045 Section 6.3. [http://en.wikipedia.org/wiki/Internet_media_type]&lt;br /&gt;
* IETF MIME experimental fields (e.g. x-spam-score)&lt;br /&gt;
* HTTP header extensions (e.g. x-pingback)&lt;br /&gt;
* note also [http://www.mnot.net/blog/2009/02/18/x- some critical thoughts from mnot]&lt;br /&gt;
&lt;br /&gt;
=== USERS ===&lt;br /&gt;
Need more tools and interfaces that:&lt;br /&gt;
* publish&lt;br /&gt;
* copy/paste&lt;br /&gt;
* right-click on a microformat&lt;br /&gt;
* share&lt;br /&gt;
* search results&lt;br /&gt;
&lt;br /&gt;
discussed some existing like: [[H2VX]] converts hCard to vCard, hCalendar to iCalendar&lt;br /&gt;
&lt;br /&gt;
how would we re-implement Live Clipboard today, making it easier for publishers and developers?&lt;br /&gt;
&lt;br /&gt;
=== SEE ALSO ===&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-brainstorming]] - moving more experimental / undeveloped / and rejected thoughts ideas here to simplify/progress *this* page further.&lt;br /&gt;
* [[microformats2-prefixes]]&lt;br /&gt;
* [[microformats2-faq]]&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* 2010-05-02 [[events/2010-05-02-microformats-2-0|microformats 2.0 discussion session at FOO East]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2&amp;diff=65039</id>
		<title>microformats2</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2&amp;diff=65039"/>
		<updated>2015-06-03T16:04:22Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Java */ add links to first cut at a java parser&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats 2&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
Welcome to the microformats2 home page.&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Microformats2 is the simplest way to markup structured information in HTML. Microformats2 improves ease of use and implementation for &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; authors (publishers) and developers ([[microformats2-parsing|parser]] implementers).&lt;br /&gt;
&lt;br /&gt;
Microformats2 replaces and supersedes both classic microformats, as well as [[microdata]], and [[RDFa]].&lt;br /&gt;
&lt;br /&gt;
=== simple microformats 2 examples ===&lt;br /&gt;
Here are a few simple microformats2 examples along with canonical [[JSON]].&lt;br /&gt;
&lt;br /&gt;
==== person example ====&lt;br /&gt;
* Simple person reference:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card&amp;quot;&amp;gt;Frances Berriman&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Frances Berriman&amp;quot;] &lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== hyperlinked person ====&lt;br /&gt;
* Simple hyperlinked person reference&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://benward.me&amp;quot;&amp;gt;Ben Ward&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Ben Ward&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://benward.me&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== hyperlinked person image ====&lt;br /&gt;
* Simple hyperlinked person image&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://rohit.khare.org/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;img alt=&amp;quot;Rohit Khare&amp;quot;&lt;br /&gt;
      src=&amp;quot;https://s3.amazonaws.com/twitter_production/profile_images/53307499/180px-Rohit-sq_bigger.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Rohit Khare&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://rohit.khare.org&amp;quot;],&lt;br /&gt;
      &amp;quot;photo&amp;quot;: [&amp;quot;https://s3.amazonaws.com/twitter_production/profile_images/53307499/180px-Rohit-sq_bigger.jpg&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional simple cases details in [[microformats-2-implied-properties]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== detailed person example ====&lt;br /&gt;
* More detailed person&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img class=&amp;quot;u-photo&amp;quot; alt=&amp;quot;photo of Mitchell&amp;quot;&lt;br /&gt;
       src=&amp;quot;https://webfwd.org/content/about-experts/300.mitchellbaker/mentor_mbaker.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt;&lt;br /&gt;
 (&amp;lt;a class=&amp;quot;u-url&amp;quot; &lt;br /&gt;
     href=&amp;quot;https://twitter.com/MitchellBaker&amp;quot;&lt;br /&gt;
    &amp;gt;@MitchellBaker&amp;lt;/a&amp;gt;)&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-org&amp;quot;&amp;gt;Mozilla Foundation&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;p-note&amp;quot;&amp;gt;&lt;br /&gt;
    Mitchell is responsible for setting the direction and scope of the Mozilla Foundation and its activities.&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-category&amp;quot;&amp;gt;Strategy&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-category&amp;quot;&amp;gt;Leadership&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;photo&amp;quot;: [&amp;quot;https://webfwd.org/content/about-experts/300.mitchellbaker/mentor_mbaker.jpg&amp;quot;],&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&lt;br /&gt;
        &amp;quot;http://blog.lizardwrangler.com/&amp;quot;,&lt;br /&gt;
        &amp;quot;https://twitter.com/MitchellBaker&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
      &amp;quot;note&amp;quot;: [&amp;quot;Mitchell is responsible for setting the direction and scope of the Mozilla Foundation and its activities.&amp;quot;],&lt;br /&gt;
      &amp;quot;category&amp;quot;: [&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;,&lt;br /&gt;
        &amp;quot;Leadership&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Notes: &lt;br /&gt;
# The JSON &amp;lt;code&amp;gt;&amp;quot;type&amp;quot;&amp;lt;/code&amp;gt; uses the full microformat root class name (e.g. &amp;lt;code&amp;gt;&amp;quot;h-card&amp;quot;&amp;lt;/code&amp;gt;) for consistent identification.&lt;br /&gt;
# all properties are optional and syntactically plural with parsed values provided in document order; particular microformats (and applications there-of) may apply specific/singular semantics to first value of a property.&lt;br /&gt;
&lt;br /&gt;
=== microformats2 design ===&lt;br /&gt;
microformats2 has the following key design aspects:&lt;br /&gt;
# '''Prefixes for class names.'''  Class names used for microformats use prefixes that start with with &amp;lt;code&amp;gt;'h-' 'p-' 'u-' 'dt-', 'e-'&amp;lt;/code&amp;gt;. These are '''syntax independent from vocabularies''', which can then be developed separately.&lt;br /&gt;
#* 'h-*' for root class names, e.g. 'h-card'&lt;br /&gt;
#* 'p-*' for simple (text) properties, e.g. 'p-name'&lt;br /&gt;
#* 'u-*' for URL properties, e.g. 'u-photo'&lt;br /&gt;
#* 'dt-*' for date/time properties, e.g. 'dt-bday'&lt;br /&gt;
#* 'e-*' for embedded markup properties, e.g. 'e-note'. See [[microformats2#naming_conventions_for_generic_parsing|prefix naming conventions]] for more details.&lt;br /&gt;
# '''Flat sets of optional properties.''' All microformats consist of a root, and a collection of properties. Hierarchical data is represented with nested microformats, typically as property values themselves. Properties are all optional and potentially multivalued (applications needing a singular semantic may use first instance).&lt;br /&gt;
# '''Single class markup for common uses.''' Common simple markup patterns require only a single microformat root class name, which parsers use to find a few generic properties: &amp;lt;code&amp;gt;name, url, photo&amp;lt;/code&amp;gt;. The simple microformats2 examples above demonstrate these.&lt;br /&gt;
&lt;br /&gt;
Parsing details for each of these (including how to generate canonical JSON) are specified step-by-step in the:&lt;br /&gt;
* '''[[microformats2-parsing|microformats2 parsing specification]]'''&lt;br /&gt;
&lt;br /&gt;
== v2 vocabularies ==&lt;br /&gt;
Status: '''&amp;lt;span id=&amp;quot;draft_v2_vocabularies&amp;quot;&amp;gt;draft&amp;lt;/span&amp;gt;'''. Please review and provide feedback in [[IRC]].&lt;br /&gt;
* [[h-adr]]&lt;br /&gt;
* [[h-card]]&lt;br /&gt;
* [[h-entry]]&lt;br /&gt;
* [[h-event]]&lt;br /&gt;
* [[h-feed]]&lt;br /&gt;
* [[h-geo]]&lt;br /&gt;
* [[h-item]]&lt;br /&gt;
* [[h-listing]]&lt;br /&gt;
* [[h-product]]&lt;br /&gt;
* [[h-recipe]]&lt;br /&gt;
* [[h-resume]]&lt;br /&gt;
* [[h-review]]&lt;br /&gt;
* [[h-review-aggregate]]&lt;br /&gt;
&lt;br /&gt;
See below for vocabulary summaries.&lt;br /&gt;
&lt;br /&gt;
=== h-adr ===&lt;br /&gt;
{{main|h-adr}}&lt;br /&gt;
&lt;br /&gt;
The '''h-adr''' microformat is for marking up structured locations such as addresses, physical and/or postal. This is an update to [[adr]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-adr&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-adr&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-post-office-box&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-extended-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-street-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-locality&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-region&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-postal-code&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-country-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-label&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;''' (or '''&amp;lt;code&amp;gt;u-geo&amp;lt;/code&amp;gt;''' with a RFC 5870 geo: URL) - new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-altitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-adr&amp;quot; is found, don't look for an &amp;quot;adr&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;adr&amp;quot;&amp;gt;adr&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;post-office-box&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extended-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;street-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;locality&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;region&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;postal-code&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;country-name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== h-card ===&lt;br /&gt;
{{main|h-card}}&lt;br /&gt;
&lt;br /&gt;
The '''h-card''' microformat is for marking up people and organizations. This is an update to [[hCard]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-card&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-honorific-prefix&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-given-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-additional-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-family-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-sort-string&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-honorific-suffix&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-nickname&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-email&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-uid&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-adr&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-post-office-box&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-extended-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-street-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-locality&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-region&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-postal-code&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-country-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-label&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;''' or '''&amp;lt;code&amp;gt;u-geo&amp;lt;/code&amp;gt;''' with a RFC 5870 geo: URL, new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-altitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-tel&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-note&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-bday&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-key&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-org&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-job-title&amp;lt;/code&amp;gt;''' - previously 'title' in hCard, disambiguated.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-role&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-impp&amp;lt;/code&amp;gt;''' per RFC 4770, new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-sex&amp;lt;/code&amp;gt;''' new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-gender-identity&amp;lt;/code&amp;gt;''' new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-anniversary&amp;lt;/code&amp;gt;''' new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Reserved properties: (properties not used much (if at all) in practice)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-organization-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-organization-unit&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-tz&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-rev&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-card&amp;quot; is found, don't look for a &amp;quot;vcard&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;vcard&amp;quot;&amp;gt;vcard&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;honorific-prefix&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;given-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;additional-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;family-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;honorific-suffix&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nickname&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;email&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;logo&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;uid&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-adr h-adr&amp;lt;/code&amp;gt;''' including compat root class &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extended-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;street-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;locality&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;region&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;postal-code&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;country-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-geo h-geo&amp;lt;/code&amp;gt;''' including compat root class &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;note&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bday&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;organization-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;organization-unit&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; - parse as '''p-job-title'''&lt;br /&gt;
* &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Reserved: (backward compat properties that parsers {{may}} implement, if they do, they {{must}} implement in this way:&lt;br /&gt;
* &amp;lt;code&amp;gt;tz&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;rev&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Note: use of 'value' within 'tel' should be automatically handled by the support of the [[value-class-pattern]]. And for now, the 'type' subproperty of 'tel' is dropped/ignored. If there is demonstrable documented need for additional tel types (e.g. fax), we can introduce new flat properties as needed (e.g. p-tel-fax).&lt;br /&gt;
&lt;br /&gt;
=== h-entry ===&lt;br /&gt;
{{main|h-entry}}&lt;br /&gt;
&lt;br /&gt;
The '''h-entry''' microformat is for marking up syndicatable content such as blog posts, notes, articles, comments, photos and similar. This is an update to [[hAtom]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-entry&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' (was p-entry-title, see issues)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;''' (was p-entry-summary, see issues)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-content&amp;lt;/code&amp;gt;''' (was e-entry-content, see issues)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-updated&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-uid&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
This is an update to [[hAtom]]. &lt;br /&gt;
&lt;br /&gt;
Brainstorming:&lt;br /&gt;
&lt;br /&gt;
The following properties are proposed additions to h-entry above and beyond what hAtom (or Atom) provides, based on various existing link preview markup conventions:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-audio&amp;lt;/code&amp;gt;''' - consider special u- parsing rules for &amp;lt;code&amp;gt;&amp;amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-video&amp;lt;/code&amp;gt;''' - consider special u- parsing rules for &amp;lt;code&amp;gt;&amp;amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-in-reply-to&amp;lt;/code&amp;gt;''' - for links to other posts that this post is a reply to (comment regarding, etc.)&lt;br /&gt;
&lt;br /&gt;
Backward compatibility: &lt;br /&gt;
&lt;br /&gt;
(*)hAtom-specific implementations that perform custom display or translation (e.g. to Atom XML) {{should}} prefer &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt; over &amp;lt;code&amp;gt;p-entry-title&amp;lt;/code&amp;gt;, and use &amp;lt;code&amp;gt;p-entry-title&amp;lt;/code&amp;gt; value(s) as a fallback if there is no &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For hAtom backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-entry&amp;quot; is found, don't look for a &amp;quot;hentry&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hentry&amp;quot;&amp;gt;hentry&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;entry-title&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;entry-summary&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;entry-content&amp;lt;/code&amp;gt; - parse as '''e-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;published&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;updated&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-geo h-geo&amp;lt;/code&amp;gt;''' including compat root &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;h-entry-faq&amp;quot;&amp;gt;FAQ:&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* '''What is the &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt; of a [http://indiewebcamp.com/note note]?'''&lt;br /&gt;
** A few options, from simplest to most detailed.&lt;br /&gt;
*** '''same as the p-content/e-content''' property.&lt;br /&gt;
*** '''same as the &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; element''' on the note permalink post page. When publishing a note on its own permalink post page, the contents of the note are likely abbreviated for the title of the page. The same abbreviation can be used for the p-name.&lt;br /&gt;
*** '''first sentence of the p-content/e-content''' property. It may be better for [http://indiewebcamp.com/syndication syndication] and [[link-preview]] purposes to provide just the first sentence of the note as the &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. Similarly if only a portion of the content is syndicated to other sites, that portion can be marked up as the &amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resolved Issues:&lt;br /&gt;
* 2012-245 Resolved. See [http://krijnhoetmer.nl/irc-logs/microformats/20120830#l-120 2012-243 IRC discussion/consensus] for:&lt;br /&gt;
** Use '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;p-entry-summary&amp;lt;/code&amp;gt;'''. The historical semantic of &amp;quot;entry-summary&amp;quot; is not different from &amp;quot;summary&amp;quot; in any significant (or discernible way). Collapsing the two will simplify the overall microformats2 vocabularies further. In microformats2, entry-summary is no more.&lt;br /&gt;
** Use '''&amp;lt;code&amp;gt;e-content&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;e-entry-content&amp;lt;/code&amp;gt;'''. Same point and advantage. In microformats2, entry-content is no more.&lt;br /&gt;
** '''drop &amp;lt;code&amp;gt;p-entry-title&amp;lt;/code&amp;gt;'''. Unnecessary and subsumed by &amp;quot;p-name&amp;quot;. Would consider move to backward compat only if cases are presented - known publishing uses are expected to be updated shortly.&lt;br /&gt;
&lt;br /&gt;
=== h-event ===&lt;br /&gt;
{{main|h-event}}&lt;br /&gt;
&lt;br /&gt;
The '''h-event''' microformat is for marking up events. This is an update to [[hCalendar]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-event&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;'''(*)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-start&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-end&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-duration&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-description&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-location&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
This is an update to [[hCalendar]]. &lt;br /&gt;
&lt;br /&gt;
(*)hCalendar-specific implementations that perform custom display or translation (e.g. to iCalendar .ics) {{should}} prefer &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt; over &amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;, and use &amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt; value(s) as a fallback if there is no &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-event&amp;quot; is found, don't look for a &amp;quot;vevent&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;vevent&amp;quot;&amp;gt;vevent&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;dtstart&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;dt-start&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;dtend&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;dt-end&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;dt-duration&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;location&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;, and compat root &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-adr&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-geo h-geo&amp;lt;/code&amp;gt;''' including compat root &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== h-geo ===&lt;br /&gt;
{{main|h-geo}}&lt;br /&gt;
&lt;br /&gt;
The '''h-geo''' microformat is for marking up WGS84 geophysical coordinates. This is an update to [[geo]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-geo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-altitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-geo&amp;quot; is found, don't look for an &amp;quot;geo&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;geo&amp;quot;&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== h-item ===&lt;br /&gt;
{{main|h-item}}&lt;br /&gt;
&lt;br /&gt;
The '''h-item''' microformat is for marking up the item of an [[h-review]] or [[h-product]]. This is an update to part of [[hReview]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-item&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-item&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Note: in practice, due to the microformats2 implied property rules, it is expected that most uses of &amp;quot;h-item&amp;quot; won't require any explicit properties at all (since microformats2 parsers will infer name, photo, and url properties from the structure of the element with &amp;quot;h-item&amp;quot; and its contained content/elements if any).&lt;br /&gt;
&lt;br /&gt;
=== h-product ===&lt;br /&gt;
{{main|h-product}}&lt;br /&gt;
&lt;br /&gt;
The '''h-product''' microformat is for marking up products. This is an update to [[hProduct]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-product&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-product&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - name of the product&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;''' - photo of the product&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-brand&amp;lt;/code&amp;gt;''' - manufacturer, can also be a nested &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - freeform categories or tags applied to the item by the reviewer &lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-description&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - URL of the product&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-identifier&amp;lt;/code&amp;gt;''' - includes type (e.g. mpn, upc, isbn, issn, sn, vin, sku etc.) and value.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-review&amp;lt;/code&amp;gt;''' - a review of the product, can also be a nested &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-price&amp;lt;/code&amp;gt;''' - retail price of the product&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-product&amp;quot; is found, don't look for an &amp;quot;hproduct&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hproduct&amp;quot;&amp;gt;hproduct&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt;  - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;brand&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;identifier&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; - including compat root class &amp;lt;code&amp;gt;hreview&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: [[hProduct]] has at least one experimental property which has real world adoption due to [[Google]] and [[Bing]] search support of hProduct. Currently this is: '''price'''&lt;br /&gt;
&lt;br /&gt;
=== h-recipe ===&lt;br /&gt;
{{main|h-recipe}}&lt;br /&gt;
&lt;br /&gt;
The '''h-recipe''' microformat is for marking up food recipes. This is an update to [[hRecipe]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-recipe&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - the name of the recipe&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-ingredient&amp;lt;/code&amp;gt;''' - describes one or more ingredients used in the recipe.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-yield&amp;lt;/code&amp;gt;''' - Specifies the quantity produced by the recipe, like how many persons it satisfyies &lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-instructions&amp;lt;/code&amp;gt;''' - the method of the recipe.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-duration&amp;lt;/code&amp;gt;''' - the time it takes to prepare the meal described by the recipe.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;''' - an accompanying image&lt;br /&gt;
&lt;br /&gt;
Experimental properties with wide adoption&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;'''  - provides a short summary or introduction &lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt;''' - the person who wrote the recipe with &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;''' - the date the recipe was published&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-nutrition&amp;lt;/code&amp;gt;''' - nutritional information like calories, fat, dietary fiber etc.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-recipe&amp;quot; is found, don't look for an &amp;quot;hrecipe&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hrecipe&amp;quot;&amp;gt;hrecipe&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;instructions&amp;lt;/code&amp;gt; - parse as '''e-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt;  - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nutrition&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: [[hRecipe]] has a number of experimental properties which have real world adoption due to [[Google]] recipe search support of hRecipe. These are: summary, author, published and nutrition&lt;br /&gt;
&lt;br /&gt;
=== h-resume ===&lt;br /&gt;
{{main|h-resume}}&lt;br /&gt;
&lt;br /&gt;
The '''h-resume''' microformat is for marking up resumes. This is an update to [[hResume]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-resume&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-resume&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;''' - overview of qualifications and objectives&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-contact&amp;lt;/code&amp;gt;''' - current contact info in an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-education&amp;lt;/code&amp;gt;''' - an education &amp;lt;code&amp;gt;h-calendar&amp;lt;/code&amp;gt; event, years, nested &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; of the school, location.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-experience&amp;lt;/code&amp;gt;''' - a job or other professional experience &amp;lt;code&amp;gt;h-calendar&amp;lt;/code&amp;gt; event, years, nested &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; of the organization, location, job-title.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-skill&amp;lt;/code&amp;gt;''' - a skill or ability, optionally including level and/or duration of experience&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-affiliation&amp;lt;/code&amp;gt;''' - an affiliation with an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; organization&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-resume&amp;quot; is found, don't look for an &amp;quot;hresume&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hresume&amp;quot;&amp;gt;hresume&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;contact&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;education&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vevent&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;experience&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vevent&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;skill&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;affiliation&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: skill has a [[hresume-skill-brainstorm|proposed expansion into competency]] with explicit summary, rating and/or duration components. Based on existing real world adoption, we should consider an h-competency vocabulary with p-summary, p-rating, and dt-duration properties.&lt;br /&gt;
&lt;br /&gt;
=== h-review ===&lt;br /&gt;
{{main|h-review}}&lt;br /&gt;
&lt;br /&gt;
The '''h-review''' microformat is for marking up reviews. This is an update to [[hReview]]. See also [[h-item]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-review&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - name of the review&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-item&amp;lt;/code&amp;gt;''' - thing been reviewed i.e. business or person (h-card), event (h-event), place (h-adr or h-geo), product (h-product), website, url, or other item ([[h-item]]).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-reviewer&amp;lt;/code&amp;gt;''' - person who authored the review &lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-reviewed&amp;lt;/code&amp;gt;''' - date time of when the review was written&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-rating&amp;lt;/code&amp;gt;''' - value from 1-5 indicating a rating for the item (5 best).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-best&amp;lt;/code&amp;gt;'''  - define best rating value. can be numerically lower than worst.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-worst&amp;lt;/code&amp;gt;'''  - define worst rating value. can be numerically higher than best. &lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-description&amp;lt;/code&amp;gt;''' - the full text written evaluation and opinion of the reviewer&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - freeform categories or tags applied to the item by the reviewer &lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - URL of the review&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-review&amp;quot; is found, don't look for an &amp;quot;hreview&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hreview&amp;quot;&amp;gt;hreview&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt; parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''p-name''' of the item being reviewed (p-item h-item p-name)&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt; - parse as '''u-photo''' of the item being reviewed (p-item h-item u-photo)&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-url''' of the item being reviewed (p-item h-item u-url)&lt;br /&gt;
* &amp;lt;code&amp;gt;reviewer&amp;lt;/code&amp;gt;  - including compat root vcard in the absence of h-card&lt;br /&gt;
* &amp;lt;code&amp;gt;dtreviewed&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rating&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;worst&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt; - parse as '''e-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;tag&amp;quot;&amp;lt;/code&amp;gt; - parse as '''p-category'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;self bookmark&amp;quot;&amp;lt;/code&amp;gt; - parse as '''u-url'''. note that &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute value is treated as a space separated set, thus any presence of &amp;quot;self&amp;quot; and &amp;quot;bookmark&amp;quot; within such a set in a rel value is accepted.&lt;br /&gt;
&lt;br /&gt;
Note: The [[hReview]] format has three properties which make use of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute, these are &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;, permalink (via the &amp;lt;code&amp;gt;self&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt; values) and &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;. Microformats 2 parsers {{should}} map these URLs into the page scoped rel collection.&lt;br /&gt;
&lt;br /&gt;
=== h-review-aggregate ===&lt;br /&gt;
{{main|h-review-aggregate}}&lt;br /&gt;
&lt;br /&gt;
The '''h-review-aggregate''' microformat is for marking up aggregate reviews of a single item. This is an update to [[hreview-aggregate]]. See also [[h-item]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-review-aggregate&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-review-aggregate&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - name of the review&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-item&amp;lt;/code&amp;gt;''' - thing been reviewed i.e. business or person (h-card), event (h-event), place (h-adr or h-geo), product (h-product), website, url, or other item (h-item).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-rating&amp;lt;/code&amp;gt;''' - value from 1-5 indicating average rating for the item (5 best).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-best&amp;lt;/code&amp;gt;'''  - define best rating value. can be numerically lower than worst.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-worst&amp;lt;/code&amp;gt;'''  - define worst rating value. can be numerically higher than best. &lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-count&amp;lt;/code&amp;gt;'''  - number of reviews aggregated.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-votes&amp;lt;/code&amp;gt;'''  - number of reviewers who have rated the product, thus contributing to the average rating.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - freeform categories or tags applied to the item by the reviewer&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - URL of the review&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-review-aggregate&amp;quot; is found, don't look for an &amp;quot;hreview-aggregate&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hreview-aggregate&amp;quot;&amp;gt;hreview-aggregate&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt; parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''p-name''' of the item being reviewed (p-item h-item p-name)&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt; - parse as '''u-photo''' of the item being reviewed (p-item h-item u-photo)&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-url''' of the item being reviewed (p-item h-item u-url)&lt;br /&gt;
* &amp;lt;code&amp;gt;rating&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;worst&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;votes&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;tag&amp;quot;&amp;lt;/code&amp;gt; - parse as '''p-category'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;self bookmark&amp;quot;&amp;lt;/code&amp;gt; - parse as '''u-url'''. note that &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute value is treated as a space separated set, thus any presence of &amp;quot;self&amp;quot; and &amp;quot;bookmark&amp;quot; within such a set in a rel value is accepted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== v2 vocab notes ===&lt;br /&gt;
Notes: &lt;br /&gt;
* All v2 vocabularies are defined as flat lists of properties of an object/item, and thus can be used in microformats-2 syntax as shown, or in microdata items, or RDFa. The microformats-2 property parsing prefixes &amp;quot;p-&amp;quot;, &amp;quot;u-&amp;quot;, &amp;quot;dt-&amp;quot;, &amp;quot;e-&amp;quot; are omitted when using defined properties in microdata itemprop and RDFa property as those syntaxes have their own element-specific parsing rules.&lt;br /&gt;
* Profile URLs are provided for use with the HTML4 &amp;lt;code&amp;gt;profile&amp;lt;/code&amp;gt; attribute, microdata &amp;lt;code&amp;gt;itemtype&amp;lt;/code&amp;gt; attribute, and RDFa &amp;lt;code&amp;gt;vocab&amp;lt;/code&amp;gt; &amp;amp;amp; &amp;lt;code&amp;gt;typeof&amp;lt;/code&amp;gt; attributes (though the latter requires slicing off the trailing segment of the profile for the typeof attribute, and leaving the rest in vocab). &lt;br /&gt;
* microformats 2 properties may also be explicitly bound as URIs using [[rel-profile]], the [[html5-profile]] attribute proposal, or an HTML5 'vocab' attribute instead. If URI bound terms are important to you, please express interest on [[rel-profile]], [[html5-profile]], or contribute to an [[html5-vocab]] draft.&lt;br /&gt;
&lt;br /&gt;
=== v2 vocab to-do ===&lt;br /&gt;
To do: &lt;br /&gt;
* write a simple tutorial for creating/getting started with microformats-2 markup for new content&lt;br /&gt;
* examples in each h-* spec listed above of how to embed other microformats in them&lt;br /&gt;
* actual profile documents at &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-*&amp;lt;/nowiki&amp;gt; URLs mentioned above.&lt;br /&gt;
* Provide any necessary microdata-specific language as needed (e.g. to be comparably understandable to the [http://www.whatwg.org/specs/web-apps/current-work/#vcard sample vCard4/hCard1 microdata vocabulary]. Also provide any necessary RDFa-specific language as needed. Both preferably in a generic vocabulary-independent way.&lt;br /&gt;
* write a porting guide mapping v1 property -&amp;gt; v2 property&lt;br /&gt;
** use-case: simple search/replace in templates (e.g. in case web author doesn't remember existing microformats vocabs and where they used them).&lt;br /&gt;
** advise using *both* in existing templates (e.g. in case some CSS depends on the existing microformats)&lt;br /&gt;
* analyzie/document how well the microformats2 model and vocabularies satisfy the [http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-May/019681.html use-cases used to design/create microdata].&lt;br /&gt;
&lt;br /&gt;
== combining microformats ==&lt;br /&gt;
Since microformats 2 uses simple flat sets of properties for each microformat, multiple microformats are combined to indicate additional structure.&lt;br /&gt;
&lt;br /&gt;
=== h-event location h-card ===&lt;br /&gt;
Events commonly have venue information with additional structure, like address information. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-event&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot; href=&amp;quot;http://indiewebcamp.com/2012&amp;quot;&amp;gt;&lt;br /&gt;
    IndieWebCamp 2012&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
  from &amp;lt;time class=&amp;quot;dt-start&amp;quot;&amp;gt;2012-06-30&amp;lt;/time&amp;gt; &lt;br /&gt;
  to &amp;lt;time class=&amp;quot;dt-end&amp;quot;&amp;gt;2012-07-01&amp;lt;/time&amp;gt; at &lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-location h-card&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-name p-org u-url&amp;quot; href=&amp;quot;http://geoloqi.com/&amp;quot;&amp;gt;&lt;br /&gt;
      Geoloqi&lt;br /&gt;
    &amp;lt;/a&amp;gt;, &lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;920 SW 3rd Ave. Suite 400&amp;lt;/span&amp;gt;, &lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;Portland&amp;lt;/span&amp;gt;, &lt;br /&gt;
    &amp;lt;abbr class=&amp;quot;p-region&amp;quot; title=&amp;quot;Oregon&amp;quot;&amp;gt;OR&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nested h-card used to structure the p-location of the h-event is represented as a structured value for &amp;quot;location&amp;quot; in the JSON, which has an additional key, &amp;quot;value&amp;quot; that represents the plain text version parsed from the p-location.&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;IndieWebCamp 2012&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://indiewebcamp.com/2012&amp;quot;],&lt;br /&gt;
      &amp;quot;start&amp;quot;: [&amp;quot;2012-06-30&amp;quot;],&lt;br /&gt;
      &amp;quot;end&amp;quot;: [&amp;quot;2012-07-01&amp;quot;],&lt;br /&gt;
      &amp;quot;location&amp;quot;: [{&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Geoloqi, 920 SW 3rd Ave. Suite 400, Portland, OR&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;name&amp;quot;: [&amp;quot;Geoloqi&amp;quot;],&lt;br /&gt;
          &amp;quot;org&amp;quot;: [&amp;quot;Geoloqi&amp;quot;],&lt;br /&gt;
          &amp;quot;url&amp;quot;: [&amp;quot;http://geoloqi.com/&amp;quot;],&lt;br /&gt;
          &amp;quot;street-address&amp;quot;: [&amp;quot;920 SW 3rd Ave. Suite 400&amp;quot;],&lt;br /&gt;
          &amp;quot;locality&amp;quot;: [&amp;quot;Portland&amp;quot;],&lt;br /&gt;
          &amp;quot;region&amp;quot;: [&amp;quot;Oregon&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
      }]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questions:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should the nested hCard be present also as a top-level item in the JSON? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
** My current (2012-243) leaning is no. - [[User:Tantek|Tantek]] 18:53, 30 August 2012 (UTC)&lt;br /&gt;
** If so, how do we avoid expansion of the JSON geometrically proportional to the depth of microformat nesting? (Or do we not worry about it?)&lt;br /&gt;
* Should there be a canonical hierarchical JSON and a canonical flattened JSON? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
** My current (2012-243) leaning is no, we stick with one canonical JSON for uf2 which is hierarchical. - [[User:Tantek|Tantek]] 18:53, 30 August 2012 (UTC)&lt;br /&gt;
** If so, should the flattened JSON have references from properties to nested microformats that have been pushed to the top level per flattening? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
*** If so, what convention does/do JSON follow for such synthetic local reference identifiers? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* The 'location' value reflects the visible text of its element, including spaces and punctuation, as well as the state abbreviation 'OR'. The 'h-card' property values are only what is marked up, and thus include structure values without extra punctuation, and the state takes the expanded form from the &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; attribute of its &amp;lt;code&amp;gt;&amp;amp;lt;abbr&amp;amp;gt;&amp;lt;/code&amp;gt; element.&lt;br /&gt;
&lt;br /&gt;
=== h-card org h-card ===&lt;br /&gt;
People often publish information general to their company rather than specific to them, in which case, they may wish to encapsulate that in separately nested microformat. E.g. here is a simple h-card example with org property:&lt;br /&gt;
&lt;br /&gt;
[http://blog.lizardwrangler.com Mitchell Baker] (Mozilla Foundation)&lt;br /&gt;
&lt;br /&gt;
with source:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;span class=&amp;quot;p-org&amp;quot;&amp;gt;Mozilla Foundation&amp;lt;/span&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes such organization affiliations are hyperlinked to the website of the organization:&lt;br /&gt;
&lt;br /&gt;
[http://blog.lizardwrangler.com Mitchell Baker] ([http://mozilla.org/ Mozilla Foundation])&lt;br /&gt;
&lt;br /&gt;
You can mark that up with a nested h-card:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;p-org h-card&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [{&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Mozilla Foundation&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
          &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
      }]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: the nested h-card has implied 'name' and 'url' properties, just like any other root-class-name-only h-card on an &amp;lt;code&amp;gt;&amp;amp;lt;a href&amp;amp;gt;&amp;lt;/code&amp;gt; would.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FOR PARSERS ONLY:'''&lt;br /&gt;
&lt;br /&gt;
The nested 'h-card' could be marked up as an 'h-org' as well, which adds it to the nested microformat's type array, all as part of the property specified by the 'p-org'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;p-org h-card h-org&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [{&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Mozilla Foundation&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;, &amp;quot;h-org&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
          &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
      }]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FOR PARSERS ONLY:'''&lt;br /&gt;
&lt;br /&gt;
Without a property class name like 'p-org' holding all the nested objects together, we need to introduce another array for nested children (similar to the existing DOM element notion of children) of a microformat that are not attached to a specific property:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;h-org h-card&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;children&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;,&amp;quot;h-org&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
      }  &lt;br /&gt;
    }]&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since there's no property class name on the element with classes 'h-card' and 'h-org', the microformat representing that element is collected into the children array.&lt;br /&gt;
&lt;br /&gt;
Such a nested microformat implies some relationship (containment, being related), but is not as useful as if the nested microformat was a specific property of its parent.&lt;br /&gt;
&lt;br /&gt;
For this reason it's recommended that authors should not publish nested microformats without a  property class name, and instead, when nesting microformats, authors should always specify a property class name (like 'p-org') on the same element as the root class name(s) of the nested microformat(s) (like 'h-card' and/or 'h-org').&lt;br /&gt;
&lt;br /&gt;
'''FOR PARSERS ONLY:'''&lt;br /&gt;
&lt;br /&gt;
Or the nested object could be only marked up with 'h-card'. Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;h-card&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;children&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
      }  &lt;br /&gt;
    }]&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TO DO: Add h-event h-card example and JSON, per real world publishing examples like [http://www.swingtime.co.uk/List/ClSouth.html Swing Time: Classes in Southern England].'''&lt;br /&gt;
&lt;br /&gt;
== authoring ==&lt;br /&gt;
=== minimal markup ===&lt;br /&gt;
The best way to use microformats-2 is with as little additional markup as possible. This keeps your code cleaner, improves its maintainability, and thus the quality and longevity of your microformats.&lt;br /&gt;
&lt;br /&gt;
One big advantage of microformats-2 over previous microformats (and others) is the ability to add one class name to an existing element to create a structured item.&lt;br /&gt;
&lt;br /&gt;
See the [[microformats-2#simple_microformats_2_examples|simple examples at the top]] for a start, e.g.&lt;br /&gt;
&lt;br /&gt;
Simple hCards work just by adding &amp;lt;code&amp;gt;class=&amp;quot;h-card&amp;quot;&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card&amp;quot;&amp;gt;Frances Berriman&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://benward.me&amp;quot;&amp;gt;Ben Ward&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img class=&amp;quot;h-card&amp;quot; alt=&amp;quot;Sally Ride&amp;quot; &lt;br /&gt;
     src=&amp;quot;http://upload.wikimedia.org/wikipedia/commons/a/a4/Ride-s.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://tantek.com&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;img alt=&amp;quot;Tantek Çelik&amp;quot; src=&amp;quot;http://ttk.me/logo.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Tip: Inside an open tag, put the &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; attribute &amp;lt;em&amp;gt;first&amp;lt;/em&amp;gt;, then any human text content attributes (e.g. &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt;), then URL attributes (e.g. &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt;), and lastly other attributes (e.g. &amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt;). Putting the class attribute first ties it closely to the element name/tag itself, makes it more obvious, and thus more likely to be kept up to date.&lt;br /&gt;
&lt;br /&gt;
=== backward compatible ===&lt;br /&gt;
If you depend on current microformats [[implementations]], while they're being updated to support [[microformats-2]], you can include both existing microformats and microformats-2 markup.&lt;br /&gt;
&lt;br /&gt;
In short: use both sets of class names simultaneously. &lt;br /&gt;
&lt;br /&gt;
When doing so, use them on the same element, with the microformats-2 class name first, followed immediately by the existing microformats class name.&lt;br /&gt;
&lt;br /&gt;
Here are the microformats-2 hCards from above with current [[hCard]] markup as well, which may require adding a wrapping element (e.g. a &amp;lt;code&amp;gt;&amp;amp;lt;span&amp;amp;gt;&amp;lt;/code&amp;gt;) to separate the root class name element from explicit property class name elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-name fn&amp;quot;&amp;gt;Frances Berriman&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name fn u-url url&amp;quot; href=&amp;quot;http://benward.me&amp;quot;&amp;gt;Ben Ward&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img class=&amp;quot;p-name fn u-photo photo&amp;quot; alt=&amp;quot;Sally Ride&amp;quot; &lt;br /&gt;
       src=&amp;quot;http://upload.wikimedia.org/wikipedia/commons/a/a4/Ride-s.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-url url&amp;quot; href=&amp;quot;http://tantek.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img class=&amp;quot;p-name fn u-photo photo&amp;quot; alt=&amp;quot;Tantek Çelik&amp;quot; &lt;br /&gt;
         src=&amp;quot;http://ttk.me/logo.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tips:&lt;br /&gt;
* use the microformats-2 class name first, e.g.&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;h-card vcard&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;u-url url&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* and pair them when using an element for multiple properties, e.g.:&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;p-name fn u-url url&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;p-name fn u-photo photo&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* put microformats classes after classes for CSS (since page authors will likely interact more with their own classes for design than with microformats classes), e.g. as used on individual microformats [[events]] pages:&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;event-page h-event vevent&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The prefixes (h-, p-, etc.) of microformats2 class names provide easier recognition, and when followed by the similarly named existing class name, they're more easily recognized as related and thus kept together when the markup is maintained over time.&lt;br /&gt;
&lt;br /&gt;
Related FAQ: [[microformats2-faq#when_using_both_h-card_and_vcard_which_should_be_first_and_why|When using both h-card and vcard which should be first and why?]]&lt;br /&gt;
&lt;br /&gt;
== validators ==&lt;br /&gt;
microformats2 validators:&lt;br /&gt;
&lt;br /&gt;
{{new}} Test your microformatted web page with: &lt;br /&gt;
* https://pin13.net/mf2/&lt;br /&gt;
&lt;br /&gt;
Barnaby Walters has a hosted version of the open source php-mf2 [[parser]] where you can enter your markup into a textarea and see how it's parsed:&lt;br /&gt;
* http://waterpigs.co.uk/php-mf2/&lt;br /&gt;
&lt;br /&gt;
See the [[validators]] page for a longer list of validators.&lt;br /&gt;
&lt;br /&gt;
== Examples in the wild ==&lt;br /&gt;
Please add new examples in the wild of microformats-2 to the top of this list. When it gets too big we can move it to a separate page like [[microformats-2-examples-in-wild]].&lt;br /&gt;
&lt;br /&gt;
* ...&lt;br /&gt;
* David John Mead marks up his profile, blog posts and comments with h-card, h-entry and h-cite on [http://davidjohnmead.com davidjohnmead.com]&lt;br /&gt;
* [[User:Brian|Brian Suda]] marks up his blog posts up with h-entry and h-card on [http://optional.is/required/ optional.is]&lt;br /&gt;
* Ashton McAllen marks up his blog posts, reposts, comments and likes with h-entry, h-card and h-cite on [http://acegiak.net/ acegiak.net]&lt;br /&gt;
* Emma Kuo marks up her blog posts and notes with h-entry and h-card on [http://notenoughneon.com/ notenoughneon.com]&lt;br /&gt;
* Scott Jenson marks up his blog posts with h-entry and h-card on [http://jenson.org/ jenson.org]&lt;br /&gt;
* Emily McAllen marks up her blog posts with h-entry and h-card on [http://blackwoolholiday.com/ blackwoolholiday.com]&lt;br /&gt;
* Ryan Barrett marks up his blog posts, notes, replies and likes with h-entry and h-card on [https://snarfed.org/ snarfed.org]&lt;br /&gt;
* Barry Frost marks up his notes with h-entry, h-card and h-cite on [http://barryfrost.com/ barryfrost.com]&lt;br /&gt;
* Amber Case marks up her profile, blog posts, replies and notes with h-entry and h-card on [http://caseorganic.com/ caseorganic.com]&lt;br /&gt;
* Johannes Ernst marks up his blog posts with h-entry on [http://upon2020.com/blog/ upon2020.com]&lt;br /&gt;
* Michiel de Jong marks up his profile and notes with h-entry and h-card on [https://michielbdejong.com/ michielbdejong.com]&lt;br /&gt;
* Mike Taylor marks up his profile and blog posts with h-card and h-entry on [https://bear.im/bearlog/ bear.im]&lt;br /&gt;
* Erin Jo Ritchey marks up her profile, posts and comments using h-card, h-entry and h-cite with idno on [http://erinjo.is/ erinjo.is]&lt;br /&gt;
* Jeena Paradies marks up his profile, blog posts, notes and comments using h-card, h-entry and h-cite on [https://jeena.net/ jeena.net]&lt;br /&gt;
* Andy Sylvester marks up his profile, blog posts and comments using h-card and h-entry on [http://andysylvester.com/2014/03/01/howto-setting-up-the-selfoss-feed-reader-with-microformats-support/ andysylvester.com] (note: as of 2014-03-13 using h-entry for comments instead of correct h-cite --[[User:Barnabywalters|bw]] 14:44, 13 March 2014 (UTC))&lt;br /&gt;
* Hakan Demir marks up his Coupon and Voucher blog posts with h-entry and h-card on [http://www.gutscheinflagge.de/ gutscheinflagge.de]&lt;br /&gt;
* Chloe Weil marks up her blog posts with h-entry on [http://chloeweil.com/blog chloeweil.com]&lt;br /&gt;
* Christophe Ducamp marks up his blog posts and profile with h-entry and h-card on [http://christopheducamp.com/ christopheducamp.com]&lt;br /&gt;
* Glenn Jones marks up his blog posts, notes, replies, profile and comments with h-entry, h-card and h-cite on [http://glennjones.net/ glennjones.net]&lt;br /&gt;
* Marcus Povey marks up his blog posts and profile with h-entry and h-card on [http://www.marcus-povey.co.uk/ marcus-povey.co.uk]&lt;br /&gt;
* Eugen Busoiu marks up his web profile with h-card on [http://eugenbusoiu.com/#utm_source=microformats2&amp;amp;utm_medium=h-card&amp;amp;utm_campaign=Microformats eugenbusoiu.com]]&lt;br /&gt;
* Matthias Pfefferle marks up his blog posts, comments and profile with h-card, h-cite and h-entry on [http://notizblog.org/ notizblog.org]&lt;br /&gt;
* Kyle Mahan marks up his profile and notes with h-card and h-entry on [http://kylewm.com/ kylewm.com]&lt;br /&gt;
* Okinawan-lyrics marks up his blog posts with h-entry and h-card ([http://www.okinawan-lyrics.com/ example])&lt;br /&gt;
* Emil Björklund marks up his blog posts with h-entry and h-card ([http://thatemil.com/blog/2013/09/16/webmentioning-adactio/ example])&lt;br /&gt;
* App.net rolled out support for h-card and h-entry on all profile pages and permalink pages as of 2013-08-06 ([https://alpha.app.net/voidfiles example])&lt;br /&gt;
* Brett Comnes marks up his posts with h-entry and h-card ([http://bret.io/2013/06/29/getting-started-with-bower/ example])&lt;br /&gt;
* Ben Werdmuller marks up his posts with h-card and h-entry, u-in-reply-to and u-like ([http://werd.io/view/51d5097fbed7ded0633a5956 example])&lt;br /&gt;
* Sandeep Shetty marks his posts up with h-card and h-entry, as well as draft u-in-reply-to and experimental u-like properties ([http://sandeep.io/101 example])&lt;br /&gt;
* Laurent Eschenauer marks up his posts with h-entry ([http://eschnou.com/entry/first-autonomous-flight-of-my-nodecopter-62-24992.html example])&lt;br /&gt;
* Tom Morris marks up his posts using h-entry ([http://tommorris.org/posts/8417 example])&lt;br /&gt;
* Sinolandquality marks up some of their content using h-feed and h-entry on [http://www.sinolandquality.com/Blog/?page_id=3516&amp;amp;utm_content=buffere4d40&amp;amp;utm_medium=social&amp;amp;utm_source=twitter.com&amp;amp;utm_campaign=buffer sinolandquality.com]&lt;br /&gt;
* [http://www.w3.org/conf/ W3Conf 2013] uses h-event for the main event, and h-card for all the speakers and notable attendees. The h-cards make particularly good use of implied name, url, and photo properties.&lt;br /&gt;
* [http://wordpress.org/extend/themes/sempress SemPress] is a WordPress theme that supports h-card, h-feed/h-entry and h-as-*&lt;br /&gt;
* [http://the-pastry-box-project.net/ The Pastry Box Project] use h-card and h-entry markup on their homepage and individual thoughts pages&lt;br /&gt;
* Tom Morris uses h-card and [[XFN]] to markup [http://tommorris.org/pages/blogroll his blogroll].&lt;br /&gt;
* Aaron Parecki uses h-card to markup both authorship and references to people in his notes permalinks, e.g. [http://aaronparecki.com/2012/230/reply/1 2012/230/reply/1].&lt;br /&gt;
* [http://tantek.com/ Tantek Çelik] uses h-card, h-event, and h-entry on his home page, as well as h-entry on all post permalinks, e.g. [http://tantek.com/2012/243/t1/name-beats-title-modern-use-dubline-core-wrong-uf2 2012-243 post], with [[rel-prev]]/[[rel-next]] (if applicable) to indicate prev/next posts, and with [[rel-author]] to his home page with canonical hCard to indicate authorship.&lt;br /&gt;
* [http://waterpigs.co.uk/ Barnaby Walters] uses h-card on his home page, h-card, h-entry and XFN markup on his [http://waterpigs.co.uk/notes notes page].&lt;br /&gt;
** 2013-01-25 Barnaby Walters: &amp;lt;cite&amp;gt;[http://waterpigs.co.uk/articles/experimental-markup Experimental Markup]&amp;lt;/cite&amp;gt; - describes how he's using microformats2 vocabularies: &amp;lt;code&amp;gt;h-adr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, and experimental vocabularies: &amp;lt;code&amp;gt;h-feed&amp;lt;/code&amp;gt; (embedded for update histories), [[activity-streams]] objects &amp;lt;code&amp;gt;h-as-article&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-as-collection&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-as-note&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-as-update&amp;lt;/code&amp;gt;, as well as experimental properties: &amp;lt;code&amp;gt;u-alternate&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;u-as-downstream-duplicate&amp;lt;/code&amp;gt; (links to POSSE copies), and &amp;lt;code&amp;gt;u-in-reply-to&amp;lt;/code&amp;gt; (links to content that the posts are in reply to). &lt;br /&gt;
* [http://tantek.com/presentations/2012/06/microformats microformats.org at 7 years] presentation with h-event and h-card markup for people and organizations.&lt;br /&gt;
* [http://tantek.com/presentations/2012/06/pdf2012-indieweb.html Rise of the Indie Web hCards] (from Personal Democracy Forum 2012 #pdf12 #pdf2012) has [[microformats-2]] h-calendar and h-card markup&lt;br /&gt;
* WebMaker by Mozilla has [[microformats-2]] h-calendar and h-card on event search (e.g. [https://webmaker.org/en-US/events/near/?lat=45.5234515&amp;amp;lng=-122.6762071 search near Portland Oregon]) and event pages (e.g. [https://webmaker.org/en-US/events/192f56eb9/ IndieWebCamp 2012]).[https://twitter.com/microformats/status/212207925643587585]&lt;br /&gt;
* WebFWD by Mozilla has [[microformats-2]] h-card markup on [https://webfwd.org/about/experts/ experts] and [https://webfwd.org/about/team/ team] pages&lt;br /&gt;
* [http://indiewebcamp.com IndieWebCamp] has [[microformats-2]] h-event markup with nested h-cards for the organizers and the location.&lt;br /&gt;
* [https://wiki.mozilla.org/Events Mozilla Events] page has [[microformats-2]] h-event markup with attendees marked up with h-card.&lt;br /&gt;
* The [http://pdx.esri.com/blog/2013/10/17/introducing-mapattack/ Esri PDX Blog] has h-entry markup on all blog posts (as of 2013-10-19), and h-product markup on [http://pdx.esri.com/projects/terraformer/ project pages]&lt;br /&gt;
&lt;br /&gt;
=== offline ===&lt;br /&gt;
* spreadly marks up share permalink pages with h-entry, as well as minimal h-cards and experimental p-like properties ([http://my.spread.ly/share/51d570bc09e9486562000002 example])&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
{{new}} Test your microformatted web page with: &lt;br /&gt;
* https://pin13.net/mf2/ (where it says &amp;quot;Microformats Parser&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Blogging tools ===&lt;br /&gt;
* '''Storytlr''' parses the 'target' from [http://indiewebcamp.com/pingback pingbacks] for [https://github.com/storytlr/storytlr/blob/master/protected/application/public/controllers/PingbackController.php#L63 h-entry with properties and nested h-card] for information to automatically display in the [http://eschnou.com/entry/testing-indieweb-federation-with-waterpigscouk-aaronpareckicom-and--62-24908.html comments section on a post].&lt;br /&gt;
&lt;br /&gt;
=== Converters ===&lt;br /&gt;
&lt;br /&gt;
* '''[https://github.com/snarfed/activitystreams-unofficial activitystreams-unofficial]''' is a library and REST API that converts between silo APIs, [[ActivityStreams]] and [[microformats2]] (all directions). Supported silos include Facebook, Twitter, Instagram and Google+. Users include [http://brid.gy/ Bridgy], [http://reader.kylewm.com/ Woodwind], and [https://facebook-atom.appspot.com/ facebook-atom] and [https://twitter-atom.appspot.com/ twitter-atom], among others.&lt;br /&gt;
&lt;br /&gt;
* '''[http://pipes.yahoo.com/pipes/pipe.info?_id=afc5568b4e8643bfb05436b1caaf91bc microformats to RSS]''' - a Yahoo! pipe that converts a URL containing an [[h-feed]] containing h-entries, into an [[RSS]] feed ([http://waterpigs.co.uk/notes/4SeNi5/ 2013-10-21 blog post announcing])&lt;br /&gt;
&lt;br /&gt;
=== Parsers ===&lt;br /&gt;
Parsers, open source libraries:&lt;br /&gt;
==== Go ====&lt;br /&gt;
* '''andyleap/microformats''' Golang microformats2 parser&lt;br /&gt;
** github open source: https://github.com/andyleap/microformats&lt;br /&gt;
** live textarea entry: http://mf2.vendaria.net&lt;br /&gt;
==== Java ====&lt;br /&gt;
* '''mf2j''' An early-stage Java microformats2 parser&lt;br /&gt;
* github open source: https://github.com/kylewm/mf2j&lt;br /&gt;
* live: https://mf2j.herokuapp.com/?url=[http://example.com]&lt;br /&gt;
&lt;br /&gt;
==== Javascript ====&lt;br /&gt;
* '''microformat-node''' Node.js microformats2 parser&lt;br /&gt;
** github open source: https://github.com/glennjones/microformat-node&lt;br /&gt;
** test suite: https://github.com/microformats/tests&lt;br /&gt;
** blog post: http://glennjones.net/2013/01/brand-new-microformats-2-parser/&lt;br /&gt;
** live: http://glennjones.net/tools/microformats/&lt;br /&gt;
* '''microformat-shiv'''  - cross browser javascript microformats 2 parser which can also be used in browser extensions.&lt;br /&gt;
** http://microformatshiv.com/&lt;br /&gt;
** github open source: https://github.com/glennjones/microformat-shiv&lt;br /&gt;
&lt;br /&gt;
==== PHP ====&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;php-mf2&amp;quot;&amp;gt;php-mf2&amp;lt;/span&amp;gt;''' - PHP microformats2 parser&lt;br /&gt;
** github open source: https://github.com/indieweb/php-mf2&lt;br /&gt;
** Packagist: https://packagist.org/packages/mf2/mf2&lt;br /&gt;
** live: &lt;br /&gt;
*** textarea entry: http://waterpigs.co.uk/php-mf2/&lt;br /&gt;
*** URL entry: https://pin13.net/mf2/&lt;br /&gt;
==== Python ====&lt;br /&gt;
* ''mf2py'' Python microformats2 parser&lt;br /&gt;
** main entry: [[mf2py]]&lt;br /&gt;
** github open source: https://github.com/tommorris/mf2py&lt;br /&gt;
** live: &lt;br /&gt;
*** URL entry: [https://mf2py.herokuapp.com/ mf2py.herokuapp.com]&lt;br /&gt;
*** textarea entry: https://kartikprabhu.com/connection/mfparser&lt;br /&gt;
*** another textarea: http://www.unmung.com/?html=&lt;br /&gt;
*** URL and/or textarea: https://kylewm.com/services/mf2&lt;br /&gt;
==== Ruby ====&lt;br /&gt;
* '''G5/microformats2''' Ruby microformats2 parser&lt;br /&gt;
** github open source: https://github.com/G5/microformats2&lt;br /&gt;
&lt;br /&gt;
== Presentations ==&lt;br /&gt;
Presentations about microformats2:&lt;br /&gt;
* 2013-01-24 &amp;lt;cite&amp;gt;[http://waterpigs.co.uk/presentations/microformats-2/ Microformats 2]&amp;lt;/cite&amp;gt; presentation by [[User:Barnabywalters|Barnaby Walters]] at the [[events/2013-01-24-exeter-web-meetup|Exeter Web Meetup]] in Devon, UK.&lt;br /&gt;
* 2012-09-21 &amp;lt;cite&amp;gt;[http://tantek.com/presentations/2012/09/microformats2/ microformats2 &amp;amp;amp; bits of HTML5: The Evolution Of Web Data]&amp;lt;/cite&amp;gt; presentation by [[User:Tantek|Tantek Çelik]] ([http://twitter.com/t @t]) at [[events/2012-09-21-refreshlx|RefreshLX]] in Lisbon, Portugal.&lt;br /&gt;
* 2012-07-21 &amp;lt;cite&amp;gt;[http://tantek.com/presentations/2012/07/html5-uf2/ HTML5 and microformats2: The Evolution Of Web Data]&amp;lt;/cite&amp;gt; presentation by [[User:Tantek|Tantek Çelik]] ([http://twitter.com/t @t]) at [[events/2012-07-21-cascadesf|Innovators of the Web conference]] in San Francisco, CA.&lt;br /&gt;
* 2012-07-14 &amp;lt;cite&amp;gt;[http://tantek.com/presentations/2012/07/html5-microformats2/ HTML5 and microformats2: The Evolution Of Web Data]&amp;lt;/cite&amp;gt; presentation by [[User:Tantek|Tantek Çelik]] ([http://twitter.com/t @t]) at [[events/2012-07-14-open-web-camp-4|Open Web Camp IV]] in San Jose, CA.&lt;br /&gt;
&lt;br /&gt;
== Testimonials ==&lt;br /&gt;
* &amp;lt;blockquote class=&amp;quot;twitter-tweet&amp;quot;&amp;gt;To prove the web standards community can come up with better standards than the SE’s, compare this: http://microformats.org/wiki/microformats-2 with schema . org &amp;amp;mdash; Joost de Valk (@yoast) [https://twitter.com/yoast/status/298907685452124160 2013-02-05 13:35]&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote class=&amp;quot;twitter-tweet&amp;quot;&amp;gt;... I’m hoping SE’s will pick up microformats2. It’s SO much cleaner. &amp;amp;mdash; Joost de Valk (@yoast) [https://twitter.com/yoast/status/298911287117758464 2013-02-05 13:49]&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote class=&amp;quot;twitter-tweet&amp;quot;&amp;gt;... But damn Microformats2 are sexy. &amp;amp;mdash; Joost de Valk (@yoast) [https://twitter.com/yoast/status/298912179292344320 2013-02-05 13:53]&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== About This Brainstorm ==&lt;br /&gt;
The rest of this page is a brainstorm currently written in narrative / exploratory format, that is, acknowledging the success that microformats have had, why so, and then a walk through of known issues with microformats in general along with iteration of ways to address said issues, ending up with the current microformats 2 design as a conclusion.&lt;br /&gt;
&lt;br /&gt;
The proposals build on each other resulting in a solution that addresses the vast majority of general issues. The proposed changes merit a major version number increment, hence microformats 2.&lt;br /&gt;
&lt;br /&gt;
This mathematical proof/derivation style is used to explicitly encourage understanding (and double-checking) of the rational steps taken in the development of microformats 2. Reasons are documented, sometimes along with alternatives considered (and reasons for rejection of those alternatives).&lt;br /&gt;
&lt;br /&gt;
When the microformats 2 brainstorm has evolved sufficiently to demonstrate some degree of stability, usability, and implementability, it will be rewritten in a more declarative specification style, and this narrative/derivation will be archived to a background development page for historical purposes.&lt;br /&gt;
&lt;br /&gt;
— [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
2004: In early February microformats were introduced as a concept at eTech, and in September [[hCard]] and [[hCalendar]] were proposed at FOO Camp.&lt;br /&gt;
&lt;br /&gt;
2010:&lt;br /&gt;
* 34% of webdevs use microformats ([http://www.webdirections.org/sotw10/markup/#semantics 2010 State of Web Development survey])&lt;br /&gt;
* 1.88 billion hCards (per [[Yahoo]] SearchMonkey)&lt;br /&gt;
* 36 million hCalendar events (ibid)&lt;br /&gt;
&lt;br /&gt;
* XFN -&amp;gt; Social Graph API -&amp;gt; Web as Social Network / Address Book&lt;br /&gt;
&lt;br /&gt;
== Addressing Issues ==&lt;br /&gt;
=== AUTHORS and PUBLISHING ===&lt;br /&gt;
Authors and publishers are perhaps the most important constituency in the microformats community. There are more of them than there are developers, programmers, parsers, etc. and they're the ones that solved the chicken-egg problem by publishing microformats even before tools were available for consuming them.&lt;br /&gt;
&lt;br /&gt;
Therefore we must first address author/publisher general issues with microformats.&lt;br /&gt;
&lt;br /&gt;
==== can we make the simplest case simpler ====&lt;br /&gt;
Issue: '''How can we make it easier for authors to publish microformats?'''&lt;br /&gt;
&lt;br /&gt;
Currently the simplest hCard:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
    Chris Messina&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
requires 2 elements (nested, with perhaps at least one being pre-existing), and 2 class names.&lt;br /&gt;
&lt;br /&gt;
Web authors/designers are used to the simplicity of most HTML tags, e.g. to mark up a heading:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
requires just 1 element.&lt;br /&gt;
&lt;br /&gt;
[http://zeldman.com/ Jeffrey Zeldman] pointed out this apparent perceived incremental complexity (2 elements vs 1) during a microformats workshop in 2009 in New York City.&lt;br /&gt;
&lt;br /&gt;
'''How can we make microformats just as easy?'''&lt;br /&gt;
&lt;br /&gt;
'''Proposal: allow root class name only.'''&lt;br /&gt;
&lt;br /&gt;
This would enable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;vcard&amp;quot;&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
requiring only 1 class name for the simplest case.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== renaming for usability ====&lt;br /&gt;
Otherwise known as, choosing one form of consistency over another.&lt;br /&gt;
&lt;br /&gt;
'''Can we do even better?'''&lt;br /&gt;
&lt;br /&gt;
One of the most common questions asked about hCard is:&lt;br /&gt;
&lt;br /&gt;
[[hcard-faq#Why_does_hCard_use_vcard_as_the_root_class_name|Why does hCard use vcard as the root class name?]]&lt;br /&gt;
&lt;br /&gt;
This slight inconsistency between the name of the format and the name of the root class name consistently causes confusion in a large percentage of newcomers to microformats.&lt;br /&gt;
* See [[issues#hcard-vs-vcard-name]] for details/links.&lt;br /&gt;
&lt;br /&gt;
Though in microformats we believe very strongly in the [[principle]] of [[reuse]], we have to admit that in this case experience/evidence has shown that this may be a case where we re-used something too far beyond it's original meaning. Thus:&lt;br /&gt;
&lt;br /&gt;
'''Proposal: use root class name &amp;quot;hcard&amp;quot; instead of &amp;quot;vcard&amp;quot; for future hCards.'''&lt;br /&gt;
&lt;br /&gt;
This would result in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;hcard&amp;quot;&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
making the simple case even simpler:&lt;br /&gt;
&lt;br /&gt;
Just 1 additional class name, named the same as the format you're adding.  Think hCard, markup class=&amp;quot;hcard&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At a minimum for compatibility we should document that parsers should accept &amp;quot;hcard&amp;quot; as an alternative to &amp;quot;vcard&amp;quot; as the root class name for hCard 1.0, and similarly for hCalendar 1.0: &amp;quot;hcalendar&amp;quot; in addition to &amp;quot;vcalendar&amp;quot;, &amp;quot;hevent&amp;quot; in addition to &amp;quot;vevent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
However, for [[microformats-2]] we are going to distinguish root class names further by using an &amp;quot;h-&amp;quot; prefix (e.g. &amp;quot;h-card&amp;quot;). Read on to understand why.&lt;br /&gt;
&lt;br /&gt;
==== simplifying to only needing one element ====&lt;br /&gt;
It's very important for the simple case to be as simple as possible, to enable the maximum number of people to get started with minimum effort. (The idea of using a single class name for a microformat was proposed by Ryan Cannon in 2006 specifically [[hcard-implied|for hCard]], and rediscovered by [[User:Tantek|Tantek]] in 2010 and subsequently generalized to all microformats.)&lt;br /&gt;
&lt;br /&gt;
From there on, it's ok to require incremental effort for incremental return.&lt;br /&gt;
&lt;br /&gt;
E.g. to add any additional information about a person, add explicit property names.&lt;br /&gt;
&lt;br /&gt;
'''How does this simple root-only case work?'''&lt;br /&gt;
&lt;br /&gt;
* root class name reflects name of the microformat&lt;br /&gt;
* every microformat must require at most 1 property (preferably 0)&lt;br /&gt;
** admit that requiring a field in an application just results in noise (the 90210 problem - apps which require zip code get lots of false 90210 entries), and specify that any application use cases which appear to &amp;quot;require&amp;quot; specific properties must instead define how to imply sensible defaults for them.&lt;br /&gt;
* when only a root class name is specified, imply the entire text contents of the element as the value of the primary property of the microformat. e.g.&lt;br /&gt;
** &amp;quot;hcard&amp;quot; implies &amp;quot;fn&amp;quot;&lt;br /&gt;
** hcalendar event - &amp;quot;hevent&amp;quot; - implies &amp;quot;summary&amp;quot;&lt;br /&gt;
** &amp;quot;hreview&amp;quot; implies &amp;quot;summary&amp;quot;&lt;br /&gt;
** &amp;quot;hentry&amp;quot; implies &amp;quot;entry-summary&amp;quot; (perhaps collapse into &amp;quot;summary&amp;quot; - in practice they're not sufficiently semantically distinct to require separate property names)&lt;br /&gt;
** '''OR''' instead of making the one implied property be vocabulary specific, introduce a new generic (applicable to all vocabularies) 'p-name' property (subsuming hCard's 'fn'). See [[microformats-2-brainstorming#further_simplifications|microformats 2 brainstorming: further simplifications]] for latest thoughts along these lines, including the following specific mark-up implied generic properties across all microformats (based on existing published markup use-cases)&lt;br /&gt;
*** 'p-name'&lt;br /&gt;
*** 'u-url'&lt;br /&gt;
*** 'u-photo'&lt;br /&gt;
&lt;br /&gt;
==== flat sets of properties ====&lt;br /&gt;
'''What more can we simplify about microformats?'''&lt;br /&gt;
&lt;br /&gt;
Numerous individuals have provided the feedback that whenever there is more than one level of hierarchy in a microformat, many (most?) developers get confused - in particular Kavi Goel of Google / Rich Snippets provided this feedback at a microformats dinner.  Thus depending on multiple levels of hierarchy is likely resulting in a loss of authorability, perhaps even accuracy as confusion undoubtedly leads to more errors. Thus:&lt;br /&gt;
&lt;br /&gt;
'''Proposal: simplify all microformats to flat sets of properties. '''&lt;br /&gt;
&lt;br /&gt;
What this means:&lt;br /&gt;
* all microformats are simply an object with a set of properties with values.&lt;br /&gt;
* no more subproperties- drop the notion of subproperties.&lt;br /&gt;
* use composition of multiple microformats for any further hierarchy, e.g. the &amp;quot;location&amp;quot; of an hCalendar event can be an hCard, or the &amp;quot;agent&amp;quot; of one hCard can be another hCard.&lt;br /&gt;
&lt;br /&gt;
For example for hCard this would mean the following specific changes to keep relevant functionality:&lt;br /&gt;
* drop &amp;quot;n&amp;quot;, promote all &amp;quot;n&amp;quot; subproperties to full properties&lt;br /&gt;
** given-name, family-name, additional-name, honorific-prefix, honorific-suffix&lt;br /&gt;
* treat &amp;quot;geo&amp;quot; as a nested microformat&lt;br /&gt;
* treat &amp;quot;adr&amp;quot; as a nested microformat (what to do about adr's &amp;quot;type&amp;quot;?)&lt;br /&gt;
* treat &amp;quot;org&amp;quot; as a flat string and drop &amp;quot;organization-name&amp;quot; and &amp;quot;organization-unit&amp;quot; (in practice rarely used, also not revealed or ignored in contact management user interfaces - e.g. Address Book)&lt;br /&gt;
&lt;br /&gt;
Example: add a middle initial to the previous example Chris Messina's name, and markup each name component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;hcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
# use of an explicit span with &amp;quot;fn&amp;quot; to markup his entire formatted name&lt;br /&gt;
# use of the abbr element to explicitly indicate the semantic that &amp;quot;R.&amp;quot; is merely an abbreviation for his additional-name.&lt;br /&gt;
&lt;br /&gt;
==== distinguishing properties from other classes ====&lt;br /&gt;
Current microformats properties re-use generic terms like &amp;quot;summary&amp;quot;, &amp;quot;photo&amp;quot;, &amp;quot;updated&amp;quot; both for ease of use and understanding.&lt;br /&gt;
&lt;br /&gt;
However, through longer term experience, we've seen sites that accidentally drop (or break) their microformats support (e.g. Upcoming.org, Facebook) because web authors sometimes rewrite all their class names, and either are unaware that microformats were in the page, or couldn't easily distinguish microformats property class names from other site-specific class names.&lt;br /&gt;
&lt;br /&gt;
This issue has been reported by a number of web authors.&lt;br /&gt;
* See: [[issues#class-collisions]]&lt;br /&gt;
&lt;br /&gt;
Thus microformats 2 uses ''prefixes'' for property class names, e.g.:&lt;br /&gt;
* '''p-summary''' instead of ''summary''&lt;br /&gt;
* '''u-photo''' instead of ''photo'' &lt;br /&gt;
* '''dt-updated''' instead of ''updated''&lt;br /&gt;
&lt;br /&gt;
Such prefixing of all microformats class names was first suggested by Scott Isaacs of Microsoft to Tantek on a visit to Microsoft sometime in 2006/2007, but specifically aimed at making microformats easier to parse. At the time the suggestion was rejected since microformats were focused on web authors rather than parsers.&lt;br /&gt;
&lt;br /&gt;
However, since experience has shown that distinguishing property class names is an issue for '''both web authors and parser developers''', this is a key change that microformats 2 is adopting. See the next section for details.&lt;br /&gt;
&lt;br /&gt;
=== COMMUNITY and TOOLS ===&lt;br /&gt;
The second most important constituency in the microformats community are the developers, programmers, tool-makers.&lt;br /&gt;
&lt;br /&gt;
A non-trivial number of them have been sufficiently frustrated with some general issues with microformats that they've done the significant extra work to support very different and less friendly alternatives (microdata, RDFa). Based on this real-world data (market behavior), it behooves us to address these general issues with microformats for this constituency.&lt;br /&gt;
&lt;br /&gt;
==== existing microformats parsing requirements ====&lt;br /&gt;
COMMUNITY and TOOLS (that) USE MICROFORMATS &lt;br /&gt;
* parser / parsing&lt;br /&gt;
* structured&lt;br /&gt;
* getting the data out&lt;br /&gt;
* json - 1:1 mapping&lt;br /&gt;
&lt;br /&gt;
[[parsing]] microformats currently requires&lt;br /&gt;
# a list of root class names of each microformat to be parsed&lt;br /&gt;
# a list of properties for each specific microformats, along with knowledge of the type of each property in order to parse their data from potentially different portions of the HTML markup&lt;br /&gt;
# some number of format-specific specific rules (markup/content optimizations)&lt;br /&gt;
&lt;br /&gt;
This has meant that whenever a new microformat is drafted/specificied/adopted, parsers need to updated to handle it correctly, at a minimum to parse them when inside other microformats and avoid errantly implying properties from one to the other (containment, [[mfo]] problem).&lt;br /&gt;
&lt;br /&gt;
==== naming conventions for generic parsing ====&lt;br /&gt;
I think there is a fairly simple solution to #1 and #2 from the above list, and we can make progress towards minimizing #3.  In short:&lt;br /&gt;
&lt;br /&gt;
'''Proposal: a set of naming conventions for microformat root class names and properties that make it obvious when:'''&lt;br /&gt;
* a class name represents a microformat root class name&lt;br /&gt;
* a class name represents a microformat property name&lt;br /&gt;
* a class name represents a microformat property that needs special parsing (specific type of property).&lt;br /&gt;
&lt;br /&gt;
In particular - derived from the real world examples of existing proven microformats (rather than any abstraction of what a schema should have)&lt;br /&gt;
* '''&amp;quot;h-*&amp;quot; for root class names''', e.g. &amp;quot;h-card&amp;quot;, &amp;quot;h-event&amp;quot;, &amp;quot;h-entry&amp;quot;&lt;br /&gt;
** The 'h-' prefix is based on the existing microformats naming pattern of starting with 'h'.&lt;br /&gt;
* '''&amp;quot;p-*&amp;quot; for simple (text) properties''', e.g. &amp;quot;p-fn&amp;quot;, &amp;quot;p-summary&amp;quot;&lt;br /&gt;
** vocabulary generic parsing, element text in general, treat certain HTML element/attribute combination as special and use those first, e.g. img/alt, abbr/title.&lt;br /&gt;
** The 'p-' prefix is based on the word &amp;quot;property&amp;quot; starting with 'p'.&lt;br /&gt;
* '''&amp;quot;u-*&amp;quot; for URL properties''', e.g. &amp;quot;u-url&amp;quot;, &amp;quot;u-photo&amp;quot;, &amp;quot;u-logo&amp;quot;&lt;br /&gt;
** special parsing required: prefer a/href, img/src, object/data etc. attributes to element contents.&lt;br /&gt;
** The 'u-' prefix is based on URL/URI starting with the letter 'u', which is the type of most of these related properties.&lt;br /&gt;
* '''&amp;quot;dt-*&amp;quot; for datetime properties''', e.g. &amp;quot;dt-start&amp;quot;, &amp;quot;dt-end&amp;quot;, &amp;quot;dt-bday&amp;quot;&lt;br /&gt;
** special parsing required: [[value-class-pattern]], in particular separate date time value parsing for better human readabillity / DRY balance.&lt;br /&gt;
** The 'dt-' prefix is based on &amp;quot;date time&amp;quot; having the initials &amp;quot;dt&amp;quot; and the preponderance of existing date time properties starting with &amp;quot;dt&amp;quot;, e.g. dtstart, dtend, dtstamp, dtreviewed.&lt;br /&gt;
* '''&amp;quot;e-*&amp;quot; for element tree properties''' where the entire contained element hierarchy is the value, e.g. &amp;quot;e-content&amp;quot; (formerly &amp;quot;entry-content&amp;quot;) for [[hAtom]]. The 'e-' prefix can also be mnemonically remembered as &amp;quot;element tree&amp;quot;, &amp;quot;embedded markup&amp;quot;, or &amp;quot;encapsulated markup&amp;quot;.&lt;br /&gt;
** special parsing required: follow the [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#serializing-html-fragments HTML spec: Serializing HTML Fragments algorithm] to create a serialization.&lt;br /&gt;
&lt;br /&gt;
This provides a simpler transition/education story for existing microformats authors/publishers: &lt;br /&gt;
* &amp;quot;h*&amp;quot; to &amp;quot;h-*&amp;quot;, &amp;quot;dt*&amp;quot; to &amp;quot;dt-*&amp;quot;, url-like properties to &amp;quot;u-*&amp;quot;, entire embedded markup to &amp;quot;e-*&amp;quot;, and &amp;quot;p-*&amp;quot; for all &amp;quot;plain text&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
See [[microformats-2-prefixes]] for further thoughts and discussions on these and other class prefixes.&lt;br /&gt;
&lt;br /&gt;
Example: taking that simple heading hCard example forward:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card&amp;quot;&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As part of microformats 2 we would immediately define root class names and property names for all existing microformats and drafts consistent with this naming convention, and require support thereof from all new implementations, as well as strongly encouraging existing implementations to adopt the simplified microformats 2 syntax and mechanism. Question: which microformats deserve explicit backward compatibility?&lt;br /&gt;
&lt;br /&gt;
As a community we would continue to use the microformats [[process]] both for researching and determining the need for new microformats, and for naming new microformat property names for maximum re-use and interoperability of a shared vocabulary.&lt;br /&gt;
&lt;br /&gt;
If it turns out we need a new property type in the future, we can use one of the remaining single-letter-prefixes to add it to microformats 2. This would require updating of parsers of course, but in practice the number of different types of properties has grown very slowly, and we know from other schema/programming languages that there's always some small limited number of scalar/atomic property types that you need, and using those you can create compound types/objects that represent richer / more complicated types of data. See [[microformats-2-prefixes]] for documentation of existing single-letter class name prefixes in practice.&lt;br /&gt;
&lt;br /&gt;
=== ADVANTAGES ===&lt;br /&gt;
This has numerous advantages:&lt;br /&gt;
* '''better maintainability''' - much more obvious to web authors/designers/publishers which class names are for/from microformats.&lt;br /&gt;
* '''no chance of collision''' - for all practical purposes with existing class names and thus avoiding any need to add more complex CSS style rules to prevent unintended styling effects.&lt;br /&gt;
* '''simpler parsing''' - parsers can now do a simple stream-parse (or in-order DOM tree walk) and parse out '''all''' microformat objects, properties, and values, without having to know anything about any specific microformats.&lt;br /&gt;
* '''separation of syntax and vocabulary''' - by abstracting microformats 2 syntax independent of any vocabulary, it allows and encourages development of shared vocabularies  that can work in alternative syntaxes.&lt;br /&gt;
&lt;br /&gt;
More examples: here is that same heading example with name components:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;p-additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with a hyperlink to Chris's URL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;a class=&amp;quot;p-fn u-url&amp;quot; href=&amp;quot;http://factoryjoe.com/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;p-additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== COMPATIBILITY ===&lt;br /&gt;
&lt;br /&gt;
microformats 2 is backwards compatible in that in permits content authors to markup with both old and new class names for compatibility with old tools.&lt;br /&gt;
&lt;br /&gt;
Here is a simple example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;Chris Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
a microformats 2 parser would see the class name &amp;quot;h-card&amp;quot; and imply the one required property from the contents, while a microformats 1.0 parser would find the class name &amp;quot;vcard&amp;quot; and then look for the class name &amp;quot;fn&amp;quot;. no data duplication is required. this is a very important continuing application of the &amp;lt;abbr title=&amp;quot;don't repeat yourself&amp;quot;&amp;gt;DRY&amp;lt;/abbr&amp;gt; [[principle]].&lt;br /&gt;
&lt;br /&gt;
And the above hyperlinked example with both sets of class names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;a class=&amp;quot;p-fn u-url n fn url&amp;quot; href=&amp;quot;http://factoryjoe.com/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-given-name given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;p-additional-name additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-family-name family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VENDOR EXTENSIONS ===&lt;br /&gt;
&lt;br /&gt;
(this section was only discussed verbally and not written up during discussions - capturing here as it is topical)&lt;br /&gt;
&lt;br /&gt;
Proprietary extensions to formats have typically been shortlived experimental failures with one big recent exception.&lt;br /&gt;
&lt;br /&gt;
Proprietary or experimental CSS3 property implementations have been very successful.&lt;br /&gt;
&lt;br /&gt;
There has been much use of border radius properties and animations/transitions which use CSS properties with vendor-specific prefixes like:&lt;br /&gt;
&lt;br /&gt;
* -moz-border-radius&lt;br /&gt;
* -webkit-border-radius&lt;br /&gt;
&lt;br /&gt;
etc.&lt;br /&gt;
&lt;br /&gt;
Note that these are merely string '''prefixes''', not bound to any URL, and thus not namespaces in any practical sense of the word.  This is quite an important distinction, as avoiding the need to bind to a URL has made them easier to support and use.&lt;br /&gt;
&lt;br /&gt;
This use of vendor specific CSS properties has in recent years allowed the larger web design/development/implementor communities to experiment and iterate on new CSS features while the features were being developed and standardized.&lt;br /&gt;
&lt;br /&gt;
The benefits have been two-fold:&lt;br /&gt;
* designers have been able to make more attractive sites sooner (at least in some browsers)&lt;br /&gt;
* features have been market / real-world tested before being fully standardized, thus resulting in better features&lt;br /&gt;
&lt;br /&gt;
Implementers have used/introduced &amp;quot;x-&amp;quot; prefixes for IETF MIME/content-types for experimental content-types, MIME parameter extensions, and HTTP header extensions, per RFC 2045 Section 6.3, RFC 3798 section 3.3, and [https://secure.wikimedia.org/wikipedia/en/wiki/List_of_HTTP_header_fields#Common_non-standard_headers Wikipedia: HTTP header fields - non-standard headers] (could use RFC reference instead) respectively, like:&lt;br /&gt;
&lt;br /&gt;
* application/x-latex (per [https://secure.wikimedia.org/wikipedia/en/wiki/Internet_media_type#Type_x Wikipedia Internet media type: Type x])&lt;br /&gt;
* x-spam-score (in email headers)&lt;br /&gt;
* X-Pingback (per [http://en.wikipedia.org/wiki/Pingback Wikipedia:Pingback])&lt;br /&gt;
&lt;br /&gt;
Some standard types started as experimental &amp;quot;x-&amp;quot; types, thus demonstrating this experiment first, standardize later approach has worked for at least some cases:&lt;br /&gt;
&lt;br /&gt;
* image/x-png (standardized as image/png, both per [http://tools.ietf.org/html/rfc2083 RFC2083])&lt;br /&gt;
&lt;br /&gt;
There have been times when specific sites have wanted to extend microformats beyond what the set of properties in the microformat, and currently lack any '''experimental''' way to do so - to try and see if a feature (or even a whole format) is interesting in the real world before bothering to pursue researching and walking it through the microformats process.  Thus:&lt;br /&gt;
&lt;br /&gt;
'''Proposal:'''&lt;br /&gt;
* '*-x-' + '-' + meaningful name for root and property class names&lt;br /&gt;
** where &amp;quot;*&amp;quot; indicates the single-character-prefix as defined above&lt;br /&gt;
** where &amp;quot;x&amp;quot; indicates a literal 'x' for an experimental extension OR&lt;br /&gt;
** OR &amp;quot;x&amp;quot; indicates a vendor prefix (more than one character, e.g. like CSS vendor extension abbreviations, or some stock symbols, avoiding first words/phrases/abbreviations of microformats properties like dt-)&lt;br /&gt;
** e.g.&lt;br /&gt;
** &amp;quot;h-bigco-one-ring&amp;quot; - a hypothetical &amp;quot;bigco&amp;quot; vendor-specific &amp;quot;one-ring&amp;quot; microformat root class name.&lt;br /&gt;
** &amp;quot;p-goog-preptime&amp;quot; - to represent [http://www.google.com/support/webmasters/bin/answer.py?answer=173379 Google's &amp;quot;preptime&amp;quot; property extension] to [[hRecipe]] (aside: &amp;quot;duration&amp;quot; may be another property type to consider separate from &amp;quot;datetime&amp;quot; as it may be subject to different parsing rules.)&lt;br /&gt;
** &amp;quot;p-x-prep-time&amp;quot; - a possible experimental property name to be added to hRecipe upon consideration/documentation of real-world usage/uptake.&lt;br /&gt;
&lt;br /&gt;
Background - this proposal is a composition of the following (at least somewhat) successful vendor extension syntaxes&lt;br /&gt;
* [http://www.w3.org/TR/CSS21/syndata.html#vendor-keywords CSS 2.1 4.1.2.1 Vendor-specific extensions]&lt;br /&gt;
* IETF MIME/content-type &amp;quot;x-*&amp;quot; extensions per RFC 2045 Section 6.3. [http://en.wikipedia.org/wiki/Internet_media_type]&lt;br /&gt;
* IETF MIME experimental fields (e.g. x-spam-score)&lt;br /&gt;
* HTTP header extensions (e.g. x-pingback)&lt;br /&gt;
* note also [http://www.mnot.net/blog/2009/02/18/x- some critical thoughts from mnot]&lt;br /&gt;
&lt;br /&gt;
=== USERS ===&lt;br /&gt;
Need more tools and interfaces that:&lt;br /&gt;
* publish&lt;br /&gt;
* copy/paste&lt;br /&gt;
* right-click on a microformat&lt;br /&gt;
* share&lt;br /&gt;
* search results&lt;br /&gt;
&lt;br /&gt;
discussed some existing like: [[H2VX]] converts hCard to vCard, hCalendar to iCalendar&lt;br /&gt;
&lt;br /&gt;
how would we re-implement Live Clipboard today, making it easier for publishers and developers?&lt;br /&gt;
&lt;br /&gt;
=== SEE ALSO ===&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-brainstorming]] - moving more experimental / undeveloped / and rejected thoughts ideas here to simplify/progress *this* page further.&lt;br /&gt;
* [[microformats2-prefixes]]&lt;br /&gt;
* [[microformats2-faq]]&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* 2010-05-02 [[events/2010-05-02-microformats-2-0|microformats 2.0 discussion session at FOO East]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65031</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65031"/>
		<updated>2015-06-02T00:30:17Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* drop alternates collection and include them in rels */ would help if i signed it&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection and include them in rels ===&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two. [[User:Kylewm|Kylewm]] 00:30, 2 June 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform the the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behavior was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65030</id>
		<title>microformats2-parsing-issues</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65030"/>
		<updated>2015-06-02T00:29:56Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* drop alternates collection and include them in rels */ +1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting issues with the [[microformats2-parsing]] specification.&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
Open issues in various states of partial resolution from none to nearly resolved.&lt;br /&gt;
&lt;br /&gt;
=== drop alternates collection and include them in rels ===&lt;br /&gt;
2015-06-01 by [[Tantek]], per inconsistency noted by Kevin Marks.&lt;br /&gt;
&lt;br /&gt;
As fallout from the adoption and implementation of 'rel-urls' per [[microformats2-parsing-brainstorming#more_information_for_rel-based_formats]], we should:&lt;br /&gt;
* add &amp;quot;alternate&amp;quot; rels to the &amp;quot;rels&amp;quot; collection to make them easier to look-up in &amp;quot;rel-urls&amp;quot; - that is, all rel values end up in &amp;quot;rels&amp;quot; collections. No exceptions.&lt;br /&gt;
* drop &amp;quot;alternates&amp;quot; as its no longer needed, and all current consuming code clients like rel-urls better anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]] as the documenter of this issue, and attempting to represent what I think KevinMarks intended with &amp;quot;rels&amp;quot; and &amp;quot;rel-urls&amp;quot;.&lt;br /&gt;
* +1 This makes sense to me, as the &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; should match so you can lookup in rels first, then get details about urls from rel-urls. We can drop &amp;quot;alternates&amp;quot; independently from this change. [[User:Kevin Marks|Kevin Marks]] 00:23, 2 June 2015 (UTC)&lt;br /&gt;
* +1 Makes sense. And I agree with Kevin; I think parsers should deprecate &amp;quot;alternates&amp;quot; for now and drop it after a version cycle or two.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== whitespace collapsing revisited ===&lt;br /&gt;
2015-05-27: (raised by [[User:Kevin Marks|Kevin Marks]] per Glenn Jones)&lt;br /&gt;
&lt;br /&gt;
Revising the microformats tests to conform the the &amp;quot;don't collapse whitespace&amp;quot; rule below reveals some non-intuitive cases. &lt;br /&gt;
preserving whitespace in addresses is somewhat defensible, but in an implied name it is often unhelpful, as it preserves non-user visible space there for authoring reasons.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
[https://github.com/microformats/tests/commit/a325e0e9bc2089507e69b1883f7065a3316e07c2#diff-d577012c1438978a571c4049179607f0 this test] shows how extraneous whitespace ends up in the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review-aggregate&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;p-item h-event&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3 class=&amp;quot;p-name&amp;quot;&amp;gt;Fullfrontal&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;p-description&amp;quot;&amp;gt;A one day JavaScript Conference held in Brighton&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2012-11-09&amp;quot;&amp;gt;9th November 2012&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;/div&amp;gt; &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p class=&amp;quot;p-rating&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-average value&amp;quot;&amp;gt;9.9&amp;lt;/span&amp;gt; out of &lt;br /&gt;
        &amp;lt;span class=&amp;quot;p-best&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt; &lt;br /&gt;
        based on &amp;lt;span class=&amp;quot;p-count&amp;quot;&amp;gt;62&amp;lt;/span&amp;gt; reviews&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
give a parsed result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;items&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-review-aggregate&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;item&amp;quot;: [{&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
                &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal&amp;quot;],&lt;br /&gt;
                    &amp;quot;description&amp;quot;: [&amp;quot;A one day JavaScript Conference held in Brighton&amp;quot;],&lt;br /&gt;
                    &amp;quot;start&amp;quot;: [&amp;quot;2012-11-09&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
            }],&lt;br /&gt;
            &amp;quot;rating&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;average&amp;quot;: [&amp;quot;9.9&amp;quot;],&lt;br /&gt;
            &amp;quot;best&amp;quot;: [&amp;quot;10&amp;quot;],&lt;br /&gt;
            &amp;quot;count&amp;quot;: [&amp;quot;62&amp;quot;],&lt;br /&gt;
            &amp;quot;name&amp;quot;: [&amp;quot;Fullfrontal\nA one day JavaScript Conference held in Brighton\n9th November 2012\n\n\n9.9 out of \n        10 \n        based on 62 reviews&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is a reasonable textual representation of the event, but the implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is full of spurious whitespace that any consumer would have to strip. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/microformats/tests/commit/4c9690b53b0a2f40440abac8e609c51ac7dd6d56 h-review] has similar issues&lt;br /&gt;
&lt;br /&gt;
2015-05-28: (Addition by [[User:GlennJones|Glenn Jones]])&lt;br /&gt;
&lt;br /&gt;
The example below shows the type of markup most effected by the &amp;quot;implied name&amp;quot; and &amp;quot;don't collapse whitespace&amp;quot; rule working together to produce output that is hard to use without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://glennjones.net&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Glenn&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Jones&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output for the name property from the above HTML would be &amp;lt;code&amp;gt;Glenn\r\n     Jones&amp;lt;/code&amp;gt; using the (trim lead/trailing) suggested in the  parsing spec.  I could of course move the spans onto one line, but it feels fragile to consider whitespace sensitivity in HTML like this. Added to the fact that HTML templating environments often take away that level of whitespace control from authors anyway.&lt;br /&gt;
&lt;br /&gt;
There are issues with both: keeping whitespace, returns and tabs from parsed HTML or collapse that whitespace. If we return the whitespace it becomes mal-formatted for humans because it was only added to make the HTML code understandable and in most cases was not meant to be used/read outside of that context. If we collapse the whitespace we can have issues of whitespace sensitive text from &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; etc. being incorrectly formatted. &lt;br /&gt;
&lt;br /&gt;
Providing a CSS aware innerText feature would produce the most useable output, but this is too complex/time consuming to build for most parser developers. In the face of no perfect solution I have taken the 80:20 view,  whereby errant whitespace, causes me considerably more problems than mal-formatted &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; content so I collapse whitespace on all text returned. &lt;br /&gt;
&lt;br /&gt;
This feature is a non-CSS aware version of innerText. It does not cover all rendering edge cases, but enough to produce practical output.&lt;br /&gt;
&lt;br /&gt;
For now, I have started changing the node parser to flag &amp;quot;white-space collapsing&amp;quot; as an experimental feature which is off by default i.e. http://glennjones.net/tools/microformats/ but personally I will parse everything with this on as I find it the most practical solution.  &lt;br /&gt;
&lt;br /&gt;
Not sure where that leaves me on the options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
Choose from:&lt;br /&gt;
# keep as is and every parser client has to post process for common cases.&lt;br /&gt;
# keep as is but have mf2 parser trim leading/trailing whitespace (likely to provide desired result and be reasonably backcompat)&lt;br /&gt;
#* +1 my preference of the two options. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
#* +1 though this doesn't solve any of the problems discussed above, it's still worth doing [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Somewhat orthogonal:&lt;br /&gt;
* make &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; on properties with children normalise whitespace&lt;br /&gt;
** -1 Seems like a bad idea as this &amp;quot;value&amp;quot; is supposed to be the same as if there was no embedded child microformat. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
* make implied &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; normalise whitespace.&lt;br /&gt;
** +0 This is reasonable and already done somewhat in the parsing spec (trim lead/trailing). [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** +1 Given the universality of name, this would fix most of the issues we see. [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
* Put \n in textual forms if there is a &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; tag in the original.&lt;br /&gt;
** -1 that's a long path to go down with whitespace equivalents for HTML markup. [[User:Tantek|Tantek]] 20:45, 27 May 2015 (UTC)&lt;br /&gt;
** would only preserving whitespace if in &amp;amp;lt;pre&amp;amp;gt; be an 80:20 compromise? [[User:Kevin Marks|Kevin Marks]] 16:41, 28 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Because there are both code markup and specific vocabulary (label) needs for preserving whitespace, we are compelled to preserve in general, perhaps except for very specific limited generic cases (e.g. trim leading/trailing, &amp;quot;value&amp;quot; parsing, implied name). [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== uf2 children inside a classic microformats root class name ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: (raised by kylewm) What should microformats2 children inside a classic microformats root class name do?&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
1. Nothing. Any unattached uf2 children inside a classic microformats root are ignored. Problems:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* However then there's a possible surprise if/when the author upgrades the classic microformats root to uf2, then all of a sudden all the new uf2 children show-up.&lt;br /&gt;
* Another downside: author adds uf2 markup, can't figure out why nothing is happening (because somewhere up the tree in code they didn't touch is classic microformats that are hiding these unattached uf2 children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
2. Show up in the children collection of the classic microformats root&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Feels most predictable. When you add uf2 root class names anywhere, they will show up in the JSON output hierarchy.&lt;br /&gt;
* When you convert ancestor class microformats root class names to uf2 root class names, no surprise in terms of which microformats show up. Same children collection.&lt;br /&gt;
* +1 Thus I'm leaning towards this one, despite the fact that classic microformats never had a concept of generic unattached children. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
3. Show up as peers to the classic microformats root. Issue(s)&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Has ths surprise aspect of if/when you convert the classic root class name to a uf2 root class name, the former peers become unattached children.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== any h- root class name overrides and stops backcompat root ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: The presence of any h-* root class name overrides and stop any backcompat parsing of classic microformats root class names. [[User:Tantek|Tantek]] 04:55, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for restricting backcompat root class name to only seeing backcompat property class names&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backcompat classic microformats should only see backcompat properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats vocabulary that indicates a backcompat root class name (and thus an absence of the microformats2 equivalent on the same element), parsers must only look for the backcompat properties that are specified explicitly for that backcompat root class.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such behavior was never expected by authors, and crossing a classic microformats root class name with microformats2 property names were never explicitly expected nor specified to work.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Tom &amp;amp; Kyle - implementable with the same backcompat root flag as needed for &lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== microformats2 root class names should only see microformats2 properties ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
2015-020: When parsing a microformats2 root class name, only explicit microformats2 properties should be parsed. Any backcompat property names must be ignored.&lt;br /&gt;
[[User:Tantek|Tantek]] 04:04, 21 January 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Reasoning: such microformats2 authors should be expected to do all their microformats markup with microformats2 class names - this is a deliberate expectation so that their microformats aren't polluted with other (classic microformats) coincidentally named generic class names.&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* ++ Consensus at [[2015-01-20]] - option that presents the least surprises in the most cases.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied properties on backcompat parsing unlikely to be intended ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Since classic microformats had no notion of implied properties, when implied property parsing occurs on backward compat classic microformats root class names, it is unlikely that any implied property (p-name u-url u-photo) was ever intended by the author of the classic microformat. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
Examples:&lt;br /&gt;
* see https://indiewebcamp.com/h-entry#bad_hentry_properties for a growing list&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
&lt;br /&gt;
* Be explicit in implied property parsing that it must only be done for explicit 'h-*' root class name microformats, not for any (back)compat parsing of microformats. Please comment on this proposal with &amp;quot;** comment&amp;quot; on new lines below. [[User:Tantek|Tantek]] 02:43, 30 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** +1 This makes a lot of sense to me. We should strive to parse mf1 as it was intended by the author, and I think you're right that implied rules are unlikely to be what was intended [[User:Kylewm|Kylewm]] 03:22, 30 December 2014 (UTC)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. [[User:Tantek|Tantek]] 04:09, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== implied properties when an explicit class is provided ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Should &amp;quot;u-url&amp;quot; still be implied if another explicit class is already provided, as below. This is a contrived example, but it is taken from Bridgy's unit tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-like-of&amp;quot; href=&amp;quot;http://orig.domain/baz&amp;quot;&amp;gt;liked this&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, http://orig.domain/baz is almost certainly not the u-url, so IMO it would be better to leave it out —[[User:Kylewm|Kylewm]] 15:10, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''2015-01-20 consensus'''&lt;br /&gt;
* Changed my mind. Simpler to do nothing. Example provided is artificially constructed, does not reflect likely real world confusion of if we make implied properties more complicated. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
* ++ Consensus on do nothing for this case. At [[2015-01-20]]&lt;br /&gt;
&lt;br /&gt;
'''Proposed resolution:'''&lt;br /&gt;
* Changed again. Due to indiewebcamp.com/edit use-case, this now makes sense for all implied properties. That is:&lt;br /&gt;
** If an element has any explicit property class name(s) on it, then it must not be used to imply any properties. [[User:Tantek|Tantek]] 20:50, 27 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== link elements and u- parsing ===&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Raised by tantek on 2014-07-08 on [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=8+Jul+2014&amp;amp;e=9+Jul+2014#c72916 irc]: should the parsing specification for handling u- properties be modified to include the &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; element? The potential downside is that [[invisible-metadata-is-considered-harmful]], however all known real world examples of &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; are &amp;lt;em&amp;gt;semi-&amp;lt;/em&amp;gt;visible data (not fully hidden).&lt;br /&gt;
&lt;br /&gt;
There are potential cases for wanting to use link as an alternative to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;area&amp;lt;/code&amp;gt;), such as a whole page where the root &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element is an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; and the properties are included across the page: some in visible data in the &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; while others are in the &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;link&amp;lt;/code&amp;gt; elements. Example:&lt;br /&gt;
&lt;br /&gt;
One specific use-case is the semi-visible &amp;lt;code&amp;gt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;...&amp;quot;&amp;lt;/code&amp;gt; - which is visible sometimes in browser UI, and also when a user chooses &amp;quot;Add to Home Screen&amp;quot; on a mobile device. Such page level icons may be used as a &amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt; of the containing &amp;lt;code&amp;gt;h-*&amp;lt;/code&amp;gt; object on the &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; element.&lt;br /&gt;
* http://adactio.com/about/myself/ on 2014-190&lt;br /&gt;
** &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-card&amp;amp;gt;&amp;lt;/code&amp;gt; - page is all about Jeremy Keith the person&lt;br /&gt;
** &amp;lt;em&amp;gt;icon / logo is only&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; tag which &amp;lt;em&amp;gt;could&amp;lt;/em&amp;gt; use &amp;lt;code&amp;gt;class=u-logo&amp;lt;/code&amp;gt;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;shortcut icon apple-touch-icon&amp;quot; type=&amp;quot;image/png&amp;quot; href=&amp;quot;/icon.png&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another specific use-case is a post permalink page, e.g. with &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* http://waterpigs.co.uk/notes/4WjHpC/&lt;br /&gt;
** &amp;lt;em&amp;gt;has&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;html class=&amp;quot;no-js h-entry hentry h-as-note&amp;quot; lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head which is currently handled by &amp;lt;code&amp;gt;&amp;amp;lt;link rel=pgpkey&amp;amp;gt;&amp;lt;/code&amp;gt; which is already supported in existing [[microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats|microformats2 rel parsing]] of &amp;lt;code&amp;gt;link rel&amp;lt;/code&amp;gt; elements. Thus there is a (admittedly weak) argument for consistently parsing &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link rel&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-*&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. inside that aforementioned real world &amp;lt;code&amp;gt;&amp;amp;lt;html class=h-entry&amp;amp;gt;&amp;lt;/code&amp;gt; post permalink page example, &lt;br /&gt;
* why should &amp;lt;code&amp;gt;&amp;amp;lt;link rel=&amp;quot;in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; work &lt;br /&gt;
* but not &amp;lt;code&amp;gt;&amp;amp;lt;link class=&amp;quot;u-in-reply-to&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
The slightly stronger argument for consistency of link handling is that it &amp;lt;strong&amp;gt;[[simpler|simplifies]]&amp;lt;/strong&amp;gt; the publisher (and parser) model: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; work for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
* why does &amp;lt;code&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/code&amp;gt; only work for &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; ?&lt;br /&gt;
* it would be &amp;lt;em&amp;gt;simpler&amp;lt;/em&amp;gt; if all three tags just worked (in the same way) for both &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Should the parsing spec be modified to handle these cases?''' —[[User:TomMorris|Tom Morris]] 09:25, 9 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
** I'm generally in favour. It'd be good to see what other parser developers think. —[[User:TomMorris|Tom Morris]] 10:16, 9 July 2014 (UTC)&lt;br /&gt;
** adding this to the parsers won't be an issue. &amp;lt;del datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;The question is should the door be opened to hidden mf data?&amp;lt;/del&amp;gt; &amp;lt;ins datetime=&amp;quot;2014-07-09T18:45&amp;quot;&amp;gt;Up on further reflection, there seems to be no need to distinguish between &amp;lt;code&amp;gt;rel=property&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;class=u-property&amp;lt;/code&amp;gt; on link elements. So I am in favour for consistency.&amp;lt;/ins&amp;gt; [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
** RESOLVED at [[2015-01-20]] meetup. Make link consistent with a.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== e- parsing iframe srcdoc ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Proposal: addition of a new e-* parsing rule for iframe elements with srcdoc attributes. E.G.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;iframe class=&amp;quot;e-content&amp;quot; srcdoc=&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [{&lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-entry&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
   &amp;quot;content&amp;quot;: [&amp;quot;&amp;lt;p&amp;gt;A paragraph of HTML with &amp;amp;quot;quoted quotes&amp;amp;quot; &amp;amp;amp; doubly quoted ampersands&amp;lt;/p&amp;gt;&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
 }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would allow, for example, HTML comments to be sandboxed inside iframes but still parsable as microformats.&lt;br /&gt;
&lt;br /&gt;
I believe the correct processing would be to leave &amp;amp;quot; entities as they are but to unescape any doubly-escaped ampersands.&lt;br /&gt;
&lt;br /&gt;
** Is there any use case for that? —[[User:TomMorris|Tom Morris]] 12:32, 14 September 2013 (UTC)&lt;br /&gt;
** +1 we need documentation of use case and existing sites publishing iframe srcdoc like this - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
** Rejected by consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 properties on select ===&lt;br /&gt;
How should select elements with properties be treated any differently?&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then no special treatment of select elements with properties:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of select elements with microformats properties?&lt;br /&gt;
* What would the use-case be for putting a microformats property class name on a select element?&lt;br /&gt;
* Nothing special. By consensus at [[2015-01-20]] meetup due to lack of real world uses cases / existing sites. [[User:Tantek|Tantek]] 06:26, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 root name on form ===&lt;br /&gt;
See what to do about &amp;lt;em&amp;gt;root class names&amp;lt;/em&amp;gt; on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements in particular:&lt;br /&gt;
* [[hcard-input]]&lt;br /&gt;
&lt;br /&gt;
Awaiting real world examples / stronger use-cases, until then, no special treatment of root class names on &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; elements:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Are there any real world examples of a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element with a microformats root class name?&lt;br /&gt;
* [[hcard-input]] is one possible use-case, is anyone attempting to use forms for hCard input, e.g. with scripts to help make it work?&lt;br /&gt;
* Are there other use-cases for putting a microformats root class name on a &amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt; element?&lt;br /&gt;
* As of [[2015-01-20]] - no consensus - need more input as to when/why this is useful to do anything special.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing Literal Values===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats2 that all microformats be parsable from just their root element, e.g. &amp;lt;code&amp;gt;&amp;amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;Ben Ward&amp;amp;lt;/p&amp;gt;&amp;lt;/code&amp;gt; would create an hCard with the following properties after parsing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  'type': ['h-card'],&lt;br /&gt;
  'properties': {&lt;br /&gt;
     'name': ['Ben Ward']&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a four-fold change from the current [[hCard]]:&lt;br /&gt;
# type is generically identifiable as a microformat root, even in parsed form. The use of the 'h-' prefix persists into the type of the object. This is deliberately so, as a result of re-using the JSON data model of microdata which itself is re-using a common JSON convention, such that microformatted data is clearly distinguishable (as opposed to any other random schema that may be using a similar data model).&lt;br /&gt;
# root-class-only support. Per [[microformats-2-implied-properties]], the ''name'' property is implied by the entirety of the root class name element.&lt;br /&gt;
# 'name' instead of 'fn'. As also documented in [[microformats-2-implied-properties]], the continuous challenges/problems and need to repeatedly re-explain 'fn' over the years combined with the real-world market response of nearly every other party doing a person vocabulary renaming 'fn' to 'name', microformats 2 makes this change as well.&lt;br /&gt;
# There is no automatic parse-time inferring of &amp;lt;code&amp;gt;'given-name': ['Ben']&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'family-name': ['Ward']&amp;lt;/code&amp;gt;. Any such inferring *might* be made by a vCard converter, but is left up to that specific application (not all applications) built on that vocabulary, though even in that case it may not be necessary, as an empty &amp;quot;N:;;;&amp;quot; [[vCard]] property is sufficient to satisfy the N property requirement of [[vCard]], and also causes no problems when imported into various [[vcard-implementations]].&lt;br /&gt;
&lt;br /&gt;
It is required of the extractor to understand that when a microformats object specifies no explicit child properties, that it must treat &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; as having a &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. But, the parser is generic, so it also treats &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt; as having a ‘&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;’.&lt;br /&gt;
&lt;br /&gt;
As a result, specific vocabularies are evolved to drop their specific form of name (e.g. fn, summary, entry-title) and simplified to use a common 'name' property instead.&lt;br /&gt;
&lt;br /&gt;
Note: while the overwhelming majority of real world publishing/consuming uses of microformats do so with proper nouns which have names (and thus this parser-level incorporation of an implied 'name'), there are some formats that do not have a 'name' semantic. For example, [[geo]], [[adr]], and possibly if/when developed, units of measure, length, cost. The current thinking is that the benefits to the far greater proper-noun use-case of microformats outweigh the technical inelegance of having an extra/ignored 'name' property on formats that lack such a semantic.&lt;br /&gt;
&lt;br /&gt;
Some formats also may appear in theory to better imply some other property, e.g. a review might be thought to imply its ''content'', not its name, and an Atom entry its ''content'', not its title, but in practice (actual publishing patterns) this is not the case. Typically, brief unstructured reviews (or mentions thereof) provide a ''summary'' (often hyperlinked to an expanded structured form) of that review, not its content, and similarly, brief unstructured posts (e.g. RSS items) have historically most often been link blog items which include the title of an item and a link. Short status updates as well established by Twitter are newer and would seem to imply purely content with no title, at least semantically, however, even Twitter populates the RSS title and ATOM entry title of their feeds with the content. It's not clear what went into that decision, however, that's likely irrelevant, as the outcome turns out to be emergent consistency among publishing behaviors.&lt;br /&gt;
&lt;br /&gt;
To avoid overloading or undermining the semantics of a vocabulary, I propose that we handle this at the extractor level in a simpler fashion: Define a new property for literal data, that an extractor will provide if no other information was available. All ''interpreters'' may then be instructed that in the event that an object has no properties, it can attempt to interpret the literal value from the page instead.&lt;br /&gt;
&lt;br /&gt;
* This was one of the design iterations I went through which led me to the current implied 'name' design. Another iteration was the ability for a vocabulary to specify a single required property which was implied if there were no properties provided. However, the combination of the fact that in most cases such single required properties were quite name-like, and that a vocabulary-specific rule like that would then bind parsers to specific vocabularies (even so slightly) led me to collapse them into implying a 'name'. It's not perfect, but it's the best alternative so far that balances practical convenience of publishing/consuming, avoids vocabulary-specific knowledge in the parser, and technical (in)elegance. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
In existing microformats, the closest existing example we have for this is the &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property in hCard, which is used to represent the literal address label for a place. It is a corresponding piece of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in combination, but has no structure in and of itself. Possibly, every microformat could have a &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; form where structured data is unavailable.&lt;br /&gt;
&lt;br /&gt;
However in practice, the hCard &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; property is both little understood and little used. It's not even clear that it ought to be kept for microformats 2 (no known consumers, very few (if any?) real-world non-test publishers). This disuse is likely a good indicator that we should avoid basing anything on its design.&lt;br /&gt;
&lt;br /&gt;
Alternatively, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is used throughout microformats to target a generic value (e.g. in combination with &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt; in hListing.) It has been proposed that when parsing properties that are also themselves microformats, we create native objects of the form:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        'value': '1900 12th Street, San Francisco, CA 94'&lt;br /&gt;
      , 'type': ['h-adr']&lt;br /&gt;
      , 'properties': {&lt;br /&gt;
            'street-address': '1900 12th Street'&lt;br /&gt;
          , 'etc': 'etc'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
We could apply this same pattern to the root level:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        type: [h-card]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: 'Ben Ward'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In this case, an interpreter or implementation is responsible for using &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt;, or restructuring the object. It would be the responsibility of each vocabulary to define its root property. The parsing layer of microformats 2.0 would not impose semantics or naming onto that.&lt;br /&gt;
&lt;br /&gt;
For another example, h-geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [h-geo]&lt;br /&gt;
      , properties: {}&lt;br /&gt;
      , value: '1.3232;-0.543'&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
* This is an alternative I've been considering as well:  [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
** 'value' is more generic than 'name' (applies to more vocabularies) with the trade-off that it naturally has less (weaker) semantics.&lt;br /&gt;
*** +1 I think that having naturally weaker semantics would be appropriate for this parsing functionality. —[[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC)&lt;br /&gt;
** The interesting thing that this analysis has revealed is that there appear to be two distinct clusters of microformats, the much more commonly used/understood/useful proper-noun microformats which markup things with names (people, events, reviews, recipes), and the less used compound-data microformats which are often used ''inside'' other microformats and just have some sort of semi-structured value (adr, geo, measure, and perhaps even things like tel). Perhaps this is implying the possibility and some degree of utility for ''two'' microformats root class name prefixes, 'h-' for existing proper-noun microformats, and something else ('m-' for microformat/molecule?, 's-' for structured-value?, 'v-' for value (though historically &amp;quot;v-&amp;quot;/&amp;quot;v.&amp;quot; has meant &amp;quot;vendor-specific&amp;quot;)?) for unnamed structured data microformats.&lt;br /&gt;
*** This more and more feels like a good idea, and I'm leaning toward &amp;quot;s-&amp;quot; for struct / structure / structured value. &amp;quot;s-&amp;quot; works just like &amp;quot;h-&amp;quot; except that it doesn't imply any properties at parse time. We can try it and see what happens. There's also no harm if publishers just use &amp;quot;h-&amp;quot; structures, they just (possibly) get a few extra properties if they happen to omit properties.&lt;br /&gt;
** Parallels the same JSON when a property has both a string value ''and'' is a structure itself.&lt;br /&gt;
*** Changed my mind on this. The parallel is not quite there. 'name'/'url'/'photo' are only implied if there are NO properties, where as the JSON string value + structure convention *always* provides a 'value'. [[User:Tantek|Tantek]] 22:39, 4 October 2011 (UTC)&lt;br /&gt;
*** And due to this difference in behavior ('value' is there when nested properties are present, whereas 'name' is only implied when there are no properties specified), I think it's correct to keep them separate, i.e. stick with implied 'name'. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
** However, I'm still currently leaning towards the practical convenience of providing a 'name' for the vast majority of microformats uses, rather than diluting this feature for the sake of avoiding implying inapplicable semantics to the few plain structured data microformats, and even then, only when no properties are explicitly specified! I'd rather introduce a new root prefix for those than lose the simplicity and utility of implied 'name'. [[User:Tantek|Tantek]] 13:48, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== resolved ==&lt;br /&gt;
=== When to collapse whitespace in properties ===&lt;br /&gt;
&lt;br /&gt;
The spec doesn’t explicitly require whitespace to be collapsed or not. The official mf2 test suite requires it to be collapsed.&lt;br /&gt;
&lt;br /&gt;
Reasons why whitespace ''shouldn’t'' be collapsed:&lt;br /&gt;
* Plaintext property representations of syntax-highlighted code, poetry and song lyrics require whitespace to be present&lt;br /&gt;
* Whether or not whitespace is an important part of the content being parsed is determined by css white-space and CANNOT be inferred from HTML markup alone&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Agreed, whitespace should not be collapsed (other than normal HTML5 parsing rules). The spec now refers to &amp;quot;textContent&amp;quot; rather than &amp;quot;innertext&amp;quot; to make this explicit.&lt;br /&gt;
&lt;br /&gt;
=== How to interpret mf2 classnames on form inputs ===&lt;br /&gt;
E.G. how to parse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;u-url&amp;quot; value=&amp;quot;https://brennannovak.com/notes/338&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples in the wild: https://brennannovak.com/notes/338&lt;br /&gt;
&lt;br /&gt;
See proposal:&lt;br /&gt;
* [[hcard-parsing-brainstorming#input_element_handling]]&lt;br /&gt;
&lt;br /&gt;
Resolution 2013-11-12: Per that proposal, p- u- dt- properties on input[value] elements now use the value attribute.&lt;br /&gt;
&lt;br /&gt;
=== mixture of microformats2 and classic microformats classnames on different elements ===&lt;br /&gt;
Some sites in the wild have mistakenly combined classic mf and mf2 markup in ways which misrepresent the content if parsed in BC mode.&lt;br /&gt;
&lt;br /&gt;
Typically this is caused by putting classic and mf2 classnames for the same vocabulary on different elements, e.g:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;hentry&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;article class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sites where this has been observed:&lt;br /&gt;
* http://acegiak.machinespirit.net/2013/10/17/barnaby-walters-notes-another-thing-i-love-about-the-web-users-have-the-power-to-take-control-of-their-uis-and-improve-their-own-experiences-aside-drm-for-html-would-prevent-this-from-being-possibl/&lt;br /&gt;
* http://shawfactor.com/2013/08/06/thoughts-on-extending-webmentions/ (fixed)&lt;br /&gt;
* http://notizblog.org/2013/06/18/the-rise-of-the-indieweb/ (fixed)&lt;br /&gt;
&lt;br /&gt;
Discussion:&lt;br /&gt;
&lt;br /&gt;
* As far as I can tell, the problems in all of these examples were caused by mf2 markup being injected by a wordpress plugin, but classic mf classnames being present further up the DOM in the themes. When parsed in compatibility mode, the classic mf classnames are transformed into mf2 classnames, making the original mf2 classnames look like children of empty items.&lt;br /&gt;
* Turns out this isn’t theme-specific, WordPress injects hentry via PHP [http://indiewebcamp.com/irc/2013-10-22/line/1382448759]. The bug with the wordpress mf2 plugin is resolved as of [http://indiewebcamp.com/irc/2013-10-22/line/1382449035 2013-10-22] --[[User:Barnabywalters|bw]] 13:38, 22 October 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== e- and p- escaping levels ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The fact that the parsed value of any element with .e-* is at a different level of escaping to the parsed values of p-*, dt-* etc. without any indication of how the property was parsed in the output is a security problem. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;input&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;output&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;lt;tag&amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
   &amp;lt;p class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: [&lt;br /&gt;
                &amp;quot;h-card&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;name&amp;quot;: [&lt;br /&gt;
                    &amp;quot;&amp;amp;lt;tag&amp;amp;gt;&amp;quot;&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* As a parser developer, the most straightforward way I can think of solving this is to add an option (enabled by default) which encodes HTML special characters on all non e-* properties, so the developer knows that all property values are going to be at the same level of escaping. --[[User:Barnabywalters|bw]] 20:00, 15 June 2013 (UTC)&lt;br /&gt;
** Your suggestion of auto-HTML-encoding p-*/u-*/dt-* property values is the most sensible I think. I would NOT make it an option, as it makes sense write consistent microformats2 consumers. - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
** Can you think of any existing apps/consumers of microformats2 via the parser that would break? What would indieweb comments parsers do? - [[User:Tantek|Tantek]] 07:18, 5 July 2013 (UTC)&lt;br /&gt;
*** The only breakage which might occur would be over-encoding of non e-* properties, but I’ll release this update as v0.2.0 and warn people about the changes. The worst thing which could happen is that some comments look a bit weird, as opposed to the current worst possible scenario of easy XSS attacks --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** We should also decide exactly which characters get encoded — just angle brackets, or quotes/ampersands as well? --[[User:Barnabywalters|bw]] 12:55, 5 July 2013 (UTC)&lt;br /&gt;
*** I am not sure about this, it seems more like a helper function rather than a core feature of the parser. Personally I would like to store data as text and encode only when I am going to use and I known the format it is going to be use in.  --[[User:GlennJones|Glenn Jones]] 9:54, 14 July 2013 (UTC) &lt;br /&gt;
***After the discussion on the indiewebcamp IRC with Barnaby Walters I now understand the XSS issue that this change is trying to address. A rogue author could include HTML with scripts to execute a XSS attack. These could be masked by switch prefixes i.e. p-* to e-* on a well use property. As the consumer does not see the prefix in the JSON output they have no idea if a property will content HTML or text.  I will update my two parsers and the test suite --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
**So what about an author setting a property to e-* when it would normal be p-*, dt-* or u-* i.e.&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;e-name&amp;quot;&amp;gt;&amp;lt;script&amp;gt; alert('xss test') &amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** per [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]], parsers should never automatically attempt to HTML-special-characters encode - as that would provide the client of the parser a false sense of security. It's *always* up to client code to escape any text being output to HTML *at the moment it is output to HTML* and never before, because they can never trust that any text from storage/elsewhere has for sure been escaped or not. - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** Should we not encode e-* as well and the consumer can decode at their own risk --[[User:GlennJones|Glenn Jones]] 18:42, 21 July 2013 (UTC) &lt;br /&gt;
*** No, never, per above point from [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
** See [[events/2013-09-14-microformats2-parsing|microformats2 parsing discussion 2013-09-14]] etherpad: https://etherpad.mozilla.org/microformats2parsing for more details on the resolution to this issue - and incorporate here (then move to resolved section below). - [[User:Tantek|Tantek]] 18:07, 17 October 2013 (UTC)&lt;br /&gt;
* Resolved by changes to the parsing spec: all properties are plaintext (non-HTML escaped), e-* properties result in a dictionary with &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; = plaintext version, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; = raw HTML version &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== br hr empty string ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The parsing rule 'else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)' for p-* can cause any code consuming the API to become quite bloated. It means that you have test every array value to see if its an empty string. It is also unclear to me what the purpose of this mark-up pattern is for  [[User:GlennJones|Glenn Jones]]&lt;br /&gt;
** Upon reconsidering this, I agree with you, this is an unlikely use case. If a publisher wants to explicitly set an empty property &amp;quot;p-foo&amp;quot; they can simply write &amp;lt;code&amp;gt;&amp;amp;lt;span class=&amp;quot;p-foo&amp;quot;&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt; which looks explicit. Whereas BR and HR tags are often just presentational, so we should both not encourage usage of them for semantics, and anyone that did use them would be subject to likely loss of semantics upon a redesign (that got rid of those particular BR and HR tags). I'm going to remove them from the parsing spec. - [[User:Tantek|Tantek]] 15:29, 10 February 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== datetime examples without T delimiter ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* The examples in the wiki microformats-2 pages such h-entry and h-entry had datetime without the 'T' delimiter between date and time. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13 12:00:00&amp;quot;&amp;gt;13&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I have updated the pages. As far as I known this is a new pattern for dates. Was it a mistake in the examples or is it a new datetime pattern.&lt;br /&gt;
** The [[HTML5]] &amp;quot;time&amp;quot; element, and &amp;quot;datetime&amp;quot; attribute allow for space &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; as a separator between date and time as well as &amp;quot;T&amp;quot;, thus we allow it for microformats as well. The  &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;lt;/span&amp;gt; separator is preferred as the date and time are more readable when separated by a space. The examples noted in those specs deliberately use this. - [[User:Tantek|Tantek]] 18:48, 15 July 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate absent optional attributes ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* What should rel-alternate parsing do when one of the optional attributes specified (&amp;lt;kbd&amp;gt;hreflang&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;media&amp;lt;/kbd&amp;gt; or both) is not there? The options seem to be:&lt;br /&gt;
*# leave the corresponding key out of the alternate JSON object&lt;br /&gt;
*#* This one. Leave the corresponding key out.&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to the JSON null object&lt;br /&gt;
*# include the corresponding key in the alternate JSON object, but set the value to a blank string&lt;br /&gt;
*# something I haven't thought of&lt;br /&gt;
&lt;br /&gt;
I haven't checked the existing implementations, but Barnaby said he's not sure what the appropriate way to deal with it is either. —[[User:TomMorris|Tom Morris]] 15:41, 9 August 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-alternate and type attribute ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should rel-alternate parsing also pick up the &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; attribute? It’s fairly widely used, e.g. for ATOM feeds.&lt;br /&gt;
** Numerous existing sites/pages have various [[rel-alternate]] uses with a type attribute for feeds/APIs so that's good enough to add this for help with discovery in general. Rel parsing updated. - [[User:Tantek|Tantek]] 00:47, 15 September 2013 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Issue raised by: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
A microformats ‘1.0’ parser performs the following function:&lt;br /&gt;
&lt;br /&gt;
* Given a piece of HTML content, discover a known microformat, extract it, apply various extraction patterns based upon the HTML mark-up used (e.g. include pattern, &amp;lt;code&amp;gt;abbr&amp;lt;/code&amp;gt; patterns, date-time patterns, value-title pattern), apply various content optimisations where applicable, and return the result in an object native to the programming language.&lt;br /&gt;
&lt;br /&gt;
This is performing two types of function: Extraction of data from an HTML document or fragment, ''and'' interpretation and optimisation of that content to match the rules set out by a vocabulary specification.&lt;br /&gt;
&lt;br /&gt;
It is only possible to write a generic parser that covers the first half of this task: Extraction, and application of global rules based on HTML elements and patterns common to all formats.&lt;br /&gt;
&lt;br /&gt;
The purpose of a generic parser (as supported by use cases such as search engines, and other crawlers) is: &lt;br /&gt;
&lt;br /&gt;
To provide a way for tools to extract rich data from a page for native storage, such that the data may be interpreted later by applications. This allows microformats to be crawled, and indexed, and removes the need to include complex HTML parsing within every implementation of microformat data.&lt;br /&gt;
&lt;br /&gt;
Microformats will continue to define various vocabulary-specific optimisations. as part of the design to be optimised for authors. For example: The &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; pattern in [[hcard]], or the &amp;lt;code&amp;gt;lat;long&amp;lt;/code&amp;gt; pattern in [[geo]], as well as default values for properties, such as the maximum rating in an [[hreview]].&lt;br /&gt;
* Actually, no, as it is defined currently, microformats 2 ''drops'' vocabulary-specific optimizations. Such optimizations have often been too inapplicable, error prone or i18n-unsafe (e.g. fn to given-name + family-name fails for both numerous cases where middlenames/initials are used, and in general in numerous Asian languages where given/family name order is the reverse of Western English conventions, or languages with multiple family-names, e.g. Spanish - see [[hcard-issues-resolved]] for more). This is a deliberate cutting of a &amp;quot;feature&amp;quot; from microformats 1, it is a deliberate model simplification design decision. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Extraction resolution ====&lt;br /&gt;
Proposed resolution:&lt;br /&gt;
&lt;br /&gt;
Microformats2 should refer only to ''extraction'' of microformats. Vocabularies should in turn document their appropriate optimisations, which will need to be applied by implementations, or a companion to an extractor, which I'll refer to here as an ‘interpreter’.&lt;br /&gt;
* Vocabularies will no longer have optimizations, this is again deliberately, as they've been shown to be more error prone than helpful. Thus there should be no need for any vocabulary-specific 'interpreters'. However, due to design quirks in various legacy/interchange formats, ''export conversions algorithms'' to those legacy/interchange formats will require some additional legacy-format-specific rules (e.g. odd &amp;quot;required&amp;quot; rules in [[Atom]] or [[vCard]] will require specific synthesis rules, limitations in said formats will require filtering of some values, e.g. [[vcard3]] BDAY disallows vague birthdays like year-month and --month-day - subsequently allowed in [[vcard4]]). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
A microformats2 ‘extractor’, in combination with the functionality of a domain and format-aware ‘interpreter’ (either another shared component, or part of the implementation itself) would be equivalent to a microformats 1.0 ‘parser.’&lt;br /&gt;
* A microformats2 parser is both generic (no knowledge of specific vocabularies), and lacks any/all such vocabulary-specific rules as compared to a microformats 1.0 [[hcard-parsing|parser]] with the exception of a 1) a limited list of well-established/interoperable backward compat root class names (of current [[microformats]] that are or can be soon shown to be specifications/standards per the [[process]]), 2) flat sets of backward compat property names (some with prefix/name specific conversion) for each of those backward compat root class names.  This is a deliberate design decision that makes microformats 2 more &amp;quot;micro&amp;quot;, and yes this means that even with such backward compat support, this simple form of backward compat may mean that some existing microformats 1 content breaks. We'll assess those and iterate on a documented case-by-case basis rather than attempt to maintain theoretical 100% backward compatibility (since many current microformats format-specific-features are either unused, or may have caused more problems than solutions). [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
N.B. I'll rewrite some of these as [[microformats2-parsing-faq]] to help better clarify. The reasoning that led to most of these design decisions is documented in the [[microformats-2#About_This_Brainstorm|microformats 2: About This Brainstorm]] section and following sections. I'll recheck those sections to see if/where reasoning for some of the above noted design decisions may have been missed, and back-fill accordingly. This is necessary because [[microformats2]] is a evolutionary result of simultaneously addressing both numerous generic [[issues]] as well as various common [[hcard-issues-resolved|format]]-[[hcalendar-issues-resolved|specific]] [[mfo|problems]] in microformats1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats1 perspective) to see why any particular design change has been made. [[User:Tantek|Tantek]] 12:43, 4 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once the above-mentioned write-ups have occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr resolution: As of 2013, [[microformats2-parsing]] handles parsing all link and a href rel values at document scope level, and producing canonical JSON accordingly. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
Issue raised by [[User:BenWard|BenWard]] 07:24, 5 October 2011 (UTC):&lt;br /&gt;
&lt;br /&gt;
* Currently, hAtom parses `bookmark` as a permalink&lt;br /&gt;
* Various microformats parse `rel=tag` as tags&lt;br /&gt;
* The current proposal for parsing does not allow parsing properties from rel attributes.&lt;br /&gt;
&lt;br /&gt;
Microformats parsers could instead extract ''all'' link relationships from rel attributes within an microformat object, parsing them as if a u- prefixed property.&lt;br /&gt;
* Minor nit: Rather than same as a u- prefixed property, I think such &amp;quot;rel&amp;quot; properties should be parsed purely from the &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; attribute on &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; elements and nothing more. I would strongly disagree to extending rel to apply to other elements with URLs like img src, object data, or to apply to elements in general like div. That's the path that RDFa has taken and caused much confusion as a result. [[User:Tantek|Tantek]] 07:39, 5 October 2011 (UTC)&lt;br /&gt;
** Agree: That seems like a perfectly reasonable restriction. --[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
* Continuing use of the &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute in HTML, thereby building on HTML semantics rather than bypassing them or ignoring them in favour of something less meaningful.&lt;br /&gt;
* Parsing hAtom objects contain a property named &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt;, in place of &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt;.&lt;br /&gt;
* All microformats that use &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; would contain a property named… &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;. Perfect.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes are not overloaded for other functionality like class is, and other uses of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; within content are low (and non-semantic uses are nil, to the best of my knowledge) the risk of property pollution would be extremely low.&lt;br /&gt;
&lt;br /&gt;
Note, with regard to this last point, that a generic microformats parser ''will'' parse false-positive properties, and ''will'' parse objects in combined chunks, rather than individually by format. Extracted objects will often not represent a vocabulary without further processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* This sounds like it might be workable. Let's try it and see how well authors &amp;quot;get it&amp;quot;. - [[User:Tantek|Tantek]]&lt;br /&gt;
* Possible issue: do we have any collisions between class property names and rel names? (I don't think so offhand, but useful to ask the question). - [[User:Tantek|Tantek]]&lt;br /&gt;
** None that I can think of in microformats. There is the case of Google's &amp;lt;code&amp;gt;rel=author&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt; in hAtom. However, the next point, about mfo scoping, would cover it in most situations (rel-author on a hyperlink within an hcard wouldn't be applied to the hentry.) The one situation in a parse tree where it's ambiguous would be this: &lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;p-author h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** I can think of two quite reasonable solutions: &lt;br /&gt;
*** 1. Declare that class properties take precedence over rel properties of the same name, discarding rel values if a class is also found, or &lt;br /&gt;
*** 2. Since all properties are now multi-value anyway, the hAtom object could be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** —[[User:BenWard|BenWard]] 08:29, 5 October 2011 (UTC)&lt;br /&gt;
*** Option 2 makes sense and is consistent with the rest of the multi-value parsing/handling. - [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
*** What about without the 'p-author'?&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;h-card&amp;quot; &lt;br /&gt;
   rel=&amp;quot;author&amp;quot; &lt;br /&gt;
   href=&amp;quot;http://benward.me&amp;quot;&amp;gt;&lt;br /&gt;
   Ben Ward&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Should that be parsed as:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        'http://benward.me'      /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Or&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': 'http://benward.me' /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
          'type': ['h-card'],          /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*** And if the former, then we're presumably saying that the value parsed due to the presence of a rel is always its own value, and does not combine with any other structures. I am fine with this, but I wanted to make sure we are ok with that explicitly. [[User:Tantek|Tantek]] 14:56, 5 October 2011 (UTC)&lt;br /&gt;
**** +1 I think that since the rel attribute is specifically concerned with the relation to an href attribute, it should not be combined with other structures that are rightly declared uses classes.&lt;br /&gt;
***** The more I've thought about this and how consuming applications may want to treat rel semantics, the more it seems correct to keep rel semantics distinct from class semantics. Class semantics are quite general/flexible, whereas rel is quite specific, naming something else in terms of a relationship from the current page/microformat's perspective. I think we should consider putting rel values in their own 'rel' collection, separate from the 'properties' collection. E.g. the original rel-author p-author h-card markup example would be parsed into this:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from the p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from the h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': ['http://benward.me'] /* from the rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** and if a post had multiple authors:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   'type': ['h-entry'],&lt;br /&gt;
   'properties': {&lt;br /&gt;
     …&lt;br /&gt;
     'author': [&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Ben Ward'], /* from p-author     */&lt;br /&gt;
          'type': ['h-card'],    /* from h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Ben Ward'], &lt;br /&gt;
            'url': ['http://benward.me']&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          'value': ['Tantek Çelik'], /* from 2nd p-author     */&lt;br /&gt;
          'type': ['h-card'],        /* from 2nd h-card ...   */&lt;br /&gt;
          'properties': { &lt;br /&gt;
            'name': ['Tantek Çelik'], &lt;br /&gt;
            'url': ['http://tantek.com']&lt;br /&gt;
        },&lt;br /&gt;
     ],&lt;br /&gt;
     …&lt;br /&gt;
   }&lt;br /&gt;
   'rel': {&lt;br /&gt;
     'author': [&lt;br /&gt;
       'http://benward.me',      /* from rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
       'http://tantek.com'       /* from 2nd rel=&amp;quot;author&amp;quot; */&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
***** This preserves the semantic distinction between rel and properties in general, and leaves it up to a higher-level application to implement any logic around showing &amp;quot;more info&amp;quot; about a rel-author, e.g. by correlating the rel-author URL with the 'url' of an hCard it found in the same entry. However, note that even in the earlier JSON data model, the rel-author value just shows up as another property value, and any higher level application would still have to do some correlation logic. At least with this JSON data model, applications that may be looking for a rel value in particular, or a property value in particular can do so without having one unintentionally pollute the other. [[User:Tantek|Tantek]] 17:33, 6 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Presumably we'd apply all the same property scoping rules to rel scoping as well. E.g. a rel hyperlink inside a microformat won't be seen by any containing microformat. - [[User:Tantek|Tantek]]&lt;br /&gt;
** Correct, it should be parsed in the same scope as all other class properties in the object.&lt;br /&gt;
*** Update: all rel microformats are now parsed at page-scope. Per-microformat scoping of rel has been found to be too confusing in practice (and against the general semantic of rel expressed in the HTML/HTML5 specs) [[User:Tantek|Tantek]] 01:00, 10 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This issue can be moved from resolved to closed once we've verified that all the above-mentioned and implied needs to write things up have occurred.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65027</id>
		<title>microformats2-parsing-brainstorming</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65027"/>
		<updated>2015-06-02T00:06:34Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Nested h-* objects' &amp;quot;value&amp;quot; property */ today is 2015-06-01 not 2015-05-01&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing brainstorming&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is for brainstorming, discussion, and other questions and explorations about [[microformats2]] parsing.&lt;br /&gt;
&lt;br /&gt;
For the microformats2 parsing algorithm, see:&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
For filing issues / problems with microformats2-parsing, see:&lt;br /&gt;
* [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Nested h-* objects' &amp;quot;value&amp;quot; property ==&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
Raised 2015-01-06 by [[User:Kylewm]];&lt;br /&gt;
&lt;br /&gt;
If a child element has a microformat (h-*) and is a property element (p-*, u-*, dt-*, e-*), the parser will add a &amp;quot;value&amp;quot; property to the resulting object. The value should attempt to be a useful representation of the object for consumers that do not have semantic knowledge of the particular h-* type. Ref: [[microformats2-parsing#parse_an_element_for_class_microformats]].&lt;br /&gt;
&lt;br /&gt;
To determine the &amp;quot;value&amp;quot;, we parse the property element simply (as if it did not have a h-* class), which works well for simple h-* objects, e.g. &amp;lt;code&amp;gt;&amp;lt;a class=&amp;quot;u-like-of h-cite&amp;quot; href=&amp;quot;...&amp;quot;&amp;gt;...&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* To handle more complex microformats, I propose that &amp;quot;value&amp;quot; for a p-* property element take on the first explicit &amp;quot;name&amp;quot; property of the nested microformat, and for a u-* property, the first explicit &amp;quot;url&amp;quot; property. Parsing will fall back on the current rules if an explicit property does not exist.&lt;br /&gt;
** This makes sense to me, and fits with the use-cases and examples I've seen. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** A similar (possibly simpler?) formulation would use the implied name and url rules to determine the &amp;quot;value&amp;quot; for p-* and u-* properties respectively&lt;br /&gt;
*** I don't think that's needed, as there are already implied rules on a property that should handle that. I'd start with just the &amp;quot;first explicit&amp;quot; scoping to be more conservative, and then see if we find any use-cases that (and existing implied rules) don't/doesn't catch. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
**** Agreement at [[2015-01-20]] meetup.&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;u-in-reply-to h-cite&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-author h-card&amp;quot; href=&amp;quot;http://example.com&amp;quot;&amp;gt;Example Author&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-name u-url&amp;quot; href=&amp;quot;http://example.com/post&amp;quot;&amp;gt;Example Post&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nested u-in-reply-to object would parse as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;in-reply-to&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-cite&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;Example Post&amp;quot;],&lt;br /&gt;
    &amp;quot;url&amp;quot;: [&amp;quot;http://example.com/post&amp;quot;],&lt;br /&gt;
    &amp;quot;author&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;:[&amp;quot;h-card&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://example.com&amp;quot;], &lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Example Author&amp;quot;]&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;Example Author&amp;quot;&lt;br /&gt;
    }],&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;value&amp;quot;: &amp;quot;http://example.com/post&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the outer &amp;quot;value&amp;quot; gets the in-reply-to h-cite's u-url property, and the inner &amp;quot;value&amp;quot; gets the author's p-name property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Because there are no implied properties of the dt-* and e-* types, and no obvious defaults, the value rules for these types would not change.&lt;br /&gt;
** A possibility for dt-* h-*: The dt-* could take either the first dt-* of the h-*, or (perhaps if no dt-* in the h-*,) the first &amp;lt;code&amp;gt;&amp;amp;lt;time&amp;amp;gt;&amp;lt;/code&amp;gt; element inside. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** First dt-* seems reasonable, predictable, and usable. Consensus at [[2015-01-20]] meetup.&lt;br /&gt;
** Update 2015-05-29: no known use-cases for first dt-* or first e-*, and implementing that &amp;quot;would require some refactoring&amp;quot; (in mf2py at least per kylewm), thus until there's a use-case for first dt-*/e-* inside, let's treat &amp;quot;dt-* h-*&amp;quot; and &amp;quot;e-* h-*&amp;quot; as before. [[User:Tantek|Tantek]] . In particular:&lt;br /&gt;
*** p-* h-* - value from first &amp;quot;name&amp;quot; as proposed above&lt;br /&gt;
*** u-* h-* - value from first &amp;quot;url&amp;quot; as proposed above&lt;br /&gt;
*** e-* h-* - value is already defined for e-* parsing, nothing special here&lt;br /&gt;
*** dt-* h-* - value from normal dt-* parsing - nothing special.&lt;br /&gt;
*** +1 totally agree, let's wait for use cases of e-* dt-* [[User:Kylewm|Kylewm]] 19:44, 29 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implemented in mf2py 2015-06-01 https://github.com/tommorris/mf2py/commit/edc895ef5a780bcee654e6644a688688934517b0&lt;br /&gt;
* Added to microformats test suite (experimental) 2015-06-01 https://github.com/microformats/tests/commit/90c8a7d8e96c7160036a298e13f16d9ddaec218e&lt;br /&gt;
&lt;br /&gt;
== Canonicalization of datetime output ==&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
It would be useful to choose a (more) uniform output format for datetimes to make it easier for users of the parser to consume datetimes. Microformats2 parsers already do sophisticated pattern matching to recognize date vs. time vs. datetimes, so converting this to any specific format should not add overhead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Specifically: &lt;br /&gt;
* Choose either 'T' or space as the date/time separator.&lt;br /&gt;
** Prefer space as it is more human friendly/readable, which matters even for syntaxes/formats, as human still develop, debug them. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* Choose either +XXYY or +XX:YY as the timezone specification (and convert 'Z' to +0000).&lt;br /&gt;
** Would appreciate some study / input here as to which timezone offset syntax is more human friendly. I lean slightly toward +/-NNNN (without the colon) because in the context of seeing a time, leaving out the colon makes it less likely the offset will be confused for a time. E.g. &amp;quot;07:00-08:00&amp;quot; looks like 7-8am, even if it meant 07:00 in PST. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** Space is fine - consensus [[2015-01-20]] meetup.&lt;br /&gt;
* Parsers should ''not'' attempt make datetimes more exact than specified. They should not add time, seconds, or timezone if omitted in the original. [[User:Kylewm|Kylewm]] 04:02, 14 May 2014 (UTC)&lt;br /&gt;
** Agreed. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** or month, day per Tom Morris&lt;br /&gt;
** consensus [[2015-01-20]] meetup&lt;br /&gt;
&lt;br /&gt;
* Counterpoint: PHP's builtin date parsing does not require strict formatting. And the equivalent functionality for Python is provided by the widely used python-dateutil library. [[User:Kylewm|Kylewm]] 19:02, 14 May 2014 (UTC)&lt;br /&gt;
** However we cannot (must not) depend on either PHP or Python's &amp;quot;smart&amp;quot; &amp;quot;fixing&amp;quot; or Postelian &amp;quot;liberal handling&amp;quot;, or any other language/framework's for that matter, as they all differ in how &amp;quot;intelligent&amp;quot; they are. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perhaps just provide a guideline for these based on the above consensus.&lt;br /&gt;
&lt;br /&gt;
== Add meta http-equiv to microformats2 parsing model ==&lt;br /&gt;
Status: disagreement, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
Similar to document level parsing of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, it makes sense simultaneously to parse &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv&amp;amp;gt;&amp;lt;/code&amp;gt; elements, perhaps treating &amp;quot;Status&amp;quot; in a special way (only using first number (sequence of digits) for its &amp;quot;value&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Use case: IndieWeb &amp;quot;deleted&amp;quot; indication inline in content for static file services that don't support HTTP return codes.&lt;br /&gt;
* http://indiewebcamp.com/deleted#HTML_meta_http-equiv_for_status&lt;br /&gt;
&lt;br /&gt;
HTTP Header example:&lt;br /&gt;
* &amp;lt;samp&amp;gt;Content-Type: text/html; charset=utf-8&amp;lt;/samp&amp;gt;&lt;br /&gt;
HTML equivalent: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Related:&lt;br /&gt;
* https://www.w3.org/International/O-HTTP-charset&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Interesting thought. Are you suggesting a top level &amp;quot;http-equivs:&amp;quot; collection similar to &amp;quot;rels:&amp;quot; in the parsed output? Should we consider &amp;quot;metas:&amp;quot; instead or in addition? [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* What's the use case for this? Also, http-equiv on its own is useless. http-equiv is only a supplement to the data stored in headers. And headers aren't always there: what happens in the context of someone debugging a page who pastes the source into the textarea of an mf2 parser? Without a compelling use case for including headers (and then over-riding some of them with http-equivs), I'm not sure why an implementor want to do this. —[[User:TomMorris|Tom Morris]] 00:25, 8 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g. from https://gist.github.com/aaronpk/10297489&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Status&amp;quot; content=&amp;quot;410 GONE&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [],&lt;br /&gt;
 &amp;quot;rels&amp;quot;: {},&lt;br /&gt;
 &amp;quot;http&amp;quot;: {&lt;br /&gt;
 &amp;quot;status&amp;quot;: 410&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Maybe make this an optional pass in the parser? - Tom Morris [[2015-01-20]]&lt;br /&gt;
* For now, don't bother with metas until someone provides a use-case. Tom Morris&lt;br /&gt;
* Agreed on both counts. [[User:Tantek|Tantek]] 06:56, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MIME type==&lt;br /&gt;
See [[microformats2-mime-type]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Other Interpretation Parsing Notes==&lt;br /&gt;
Note: most of these need to be written up as separate [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
Author: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
[[microformats-2|Microformats 2]] proposes a new, all encompassing syntax modification of [[microformats-2-prefixes|prefixes]] that will allow microformats to be parsed from pages by processors without prior knowledge of a vocabulary. The core components of this model are quite simple, are quite simple to implement, but there are a number of conflicts that emerge with the functionality of existing microformats parsers that need to be handled. This page documents a proposed model to separate these concerns clearly in a way that can be applied to the documentation of generic microformats parsing rules, and the documentation of individual vocabularies.&lt;br /&gt;
&lt;br /&gt;
Collection of other unresolved parsing issues in a generic model:&lt;br /&gt;
&lt;br /&gt;
This is good material for documenting as [[microformats-2-issues]], [[microformats-2-faq]], and perhaps some of the more technical details in [[microformats-2-parsing-faq]].&lt;br /&gt;
&lt;br /&gt;
* The include pattern references other elements from elsewhere in a document. A generic parser needs to track IDs and fill them in after walking the DOM. (also, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; if adopted.)&lt;br /&gt;
** The current thinking per [[microformats-2-brainstorming]] is to adopt &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; and drop the [[include-pattern]]. [[User:Tantek|Tantek]]&lt;br /&gt;
* Will &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; always map to an &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; property name?&lt;br /&gt;
** No, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; maps to one or more elements by ids, and their children. Those referenced elements may have property class names themselves, or they may contain elements that do. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] implies &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; from an hCard in a page that uses an &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt; element. This requires format knowledge, but a generic parser does not currently track the element type of a property node. Should it?&lt;br /&gt;
** It should not. element-specific handling (e.g. using &amp;quot;alt&amp;quot; from img, and &amp;quot;title&amp;quot; from abbr) is completely done at parse time. The JSON data model does not reflect which element type or attribute the value came from. Additionally, [[hAtom]] is an example where we created far too many vocabulary-specific rules, in practice they're not necessary, and only complicate the microformat for both publisher understanding and parser implementation. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that the highest level heading within an entry implies &amp;lt;code&amp;gt;entry-title&amp;lt;/code&amp;gt;. This particular optimisation might be better off dead.&lt;br /&gt;
** Agreed, this is gone in microformats 2. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that permalinks be parsed from &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, not &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
** In practice this has been one of the more problematic/error prone aspects of hAtom implementations, and it's also inconsistent with other microformats (although [[hReview]] tried to use both rel permalinks and &amp;quot;url&amp;quot;). The dependence upon [[rel-bookmark]] for permalinks is dropped in h-atom in preference to re-using &amp;quot;u-url&amp;quot; and &amp;quot;u-uid&amp;quot;. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[XFN]] is entirely built on &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; (although, has various other differences from structural microformats, as do vote-links, so perhaps are excluded from this discussion and will always be handled by dedicated parsers/queries regardless?)&lt;br /&gt;
** The best (easiest and most reliable) use of 'rel' microformats in practice is when they are orthogonal to 'class' microformats. This is true both with [[XFN]] and some newer [[existing-rel-values|rel values]] like [[rel-author]]. In addition, it was very clear at the recent [[schema.org]] workshop's syntax session that RDFa's decision to apparently arbitrarily mix use of 'rel' and 'property' attributes for specifying different types of properties (it wasn't clear to people in the room when you use which for what) has caused a high degree of confusion among publishers and thus high error-rates. Thus if anything we should learn from both the mistakes of RDFa and our own experiences with even very deliberate/specific mixing of rel microformats in class microformats, and keep them defined as separate orthogonal building blocks that work together, but don't depend on each other. [[User:Tantek|Tantek]]&lt;br /&gt;
*** Relatedly to this: &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; in hAtom. --[[User:BenWard|BenWard]] 06:50, 5 October 2011 (UTC)&lt;br /&gt;
**** Yes, and two related things here. First, despite my (and others') objection and (past) interoperable post/entry-specific treatment by Technorati and Ice Rocket, Hixie has redefined rel-tag in [[HTML5]] to mean applying to the whole page, not a single post. Second, I've explicitly added 'p-category' to the draft 'h-atom' vocabulary in [[microformats-2]]. [[User:Tantek|Tantek]] 07:12, 5 October 2011 (UTC)&lt;br /&gt;
* HTML's &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; element includes an optional &amp;lt;code&amp;gt;pubdate&amp;lt;/code&amp;gt; attribute. Simply: We should parse this as &amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;. --[[User:BenWard|BenWard]] 06:12, 10 October 2011 (UTC)&lt;br /&gt;
** *If* there is even some reasonable data on actual use of the &amp;quot;pubdate&amp;quot; attribute (I don't think there is, frankly, especially with the removal of the algorithm to produce Atom from HTML5), then we could consider parsing &amp;quot;pubdate&amp;quot; as backwards compatible option for &amp;quot;dt-published&amp;quot;. As a general rule, however, it is bad (demonstrably/experienced) design to depend on additional attributes (c.f. RDFa confusion over &amp;quot;property&amp;quot; vs. &amp;quot;rel&amp;quot;), especially for an instance where no additional attribute is necessary. I would leave this out for now until there is non-trivial (more than just test pages or folks who've written HTML5 books, ahem) use in the wild. When there is such use in the wild, it should be documented on a wiki page. We don't want to encourage more complex (additional attribute) publishing as a result of supporting it. [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
* [[value-class-pattern]]: In microformats-2, since there are no sub-properties, there will presumably no-longer be a 'value' property in any parsed model. Properties such as 'tel &amp;gt; type' in hCard are, as I recall, deprecated due to underuse anyway, so 'tel &amp;gt; value' becomes redundant. (There's also potentially some clarification around 'price &amp;gt; value' in hListing, whereby value was used in a pattern. So, what does this mean for value class parsing, with regard to value-title patterns and date separation patterns. Are we looking for a 'p-value' and 'p-value-title' classname, but treating them specially (excluding them from regular property parsing.) Or, are we giving them a special prefix (v-text, v-title? That seems confusing, but could be a concept.) I'm fine with p- for both, and just having the parser ignore them since they're special, but need clarification and naming confirmation. --[[User:BenWard|BenWard]] 09:35, 10 October 2011 (UTC)&lt;br /&gt;
** A few things:&lt;br /&gt;
*** 1. Yes, no more subproperties. 'tel' becomes just 'p-tel'. If there is demand for a structured 'tel' value, then we can use that demand (and research into publishing in practice) to brainstorm and create an 'h-tel' structured telephone number (with perhaps fields like 'type', 'extension', some indication of it being local dialing (an extra 0 in some countries) or international dialing, etc.) Or, we address the different 'tel' types as their own flat properties (again as justified by research), e.g. perhaps 'p-tel-fax', or 'p-tel-mobile'. Something for hcard-2-brainstorming.&lt;br /&gt;
*** 2. For prices, e.g. hListing, either we're going to need to encode how to parse monetary amounts including monetary symbols, or consider creating an 'h-price' structured price. Not sure what the right answer is here, again, will need to be informed by analysis of documented actual price publication practices.&lt;br /&gt;
*** 3. We should avoid introducing a new prefix 'v-' just for value-class-pattern. As we've noted elsewhere, each new prefix adds complexity and should be avoided without substantial advantage.&lt;br /&gt;
*** 4. Using 'p-value-title' is strange, as it would be an exception to 'p-' parsing, since it would get the value from the 'title' attribute whereas 'p-' properties don't normally do that (exception: abbr).&lt;br /&gt;
*** 5. Using 'p-value' is also strange, as it wouldn't generate a 'value' property in the JSON data model.&lt;br /&gt;
*** 6. Class name 'value-title' is already sufficiently prefixed - we've found or even heard of no collisions in practice.&lt;br /&gt;
*** 7. Class name 'value' can, by its simpler naming nature, be expected to potentially collide with other web designer class name usage though we have no documentation/mention thereof. We could consider a renaming, or providing of alternative, such as 'value-string', or 'value-content', etc. However, let's keep that as a backup plan to use only if/when evidence is presented that we need to.&lt;br /&gt;
** Conclusions: for now, in microformats-2, keep using 'value' and 'value-title' as defined in the [[value-class-pattern]], and add the additional (obvious) interpretation that [[value-class-pattern#Date_and_time_parsing|value class pattern: date and time parsing]] applies to all 'dt-' properties. - [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== incorporated 2015-05-28 ==&lt;br /&gt;
The following brainstorms were incorporated 2015-05-28.&lt;br /&gt;
&lt;br /&gt;
== more information for alternates ==&lt;br /&gt;
Raised 2015-04-24 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
The existing &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; parsing is omitting &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; - that should be added.  The &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; would make sense to add here too.&lt;br /&gt;
&lt;br /&gt;
Use-case: labels for presenting alternates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 Makes sense. [[User:Tantek|Tantek]] 03:41, 25 April 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== more information for rel-based formats ==&lt;br /&gt;
Raised 2015-04-18 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
Related github test suite issue: https://github.com/microformats/tests/issues/16&lt;br /&gt;
&lt;br /&gt;
Several rel-based formats have additional information that is useful beyond the link itself, which is all we capture at the moment. As I am trying to update the Universal feedparser to support mf2 based I will show examples from the [https://github.com/kevinmarks/feedparser/tree/365623a9470e99246f393a8c1f49a0db567826b8/feedparser/tests/microformats testcases] there.&lt;br /&gt;
&lt;br /&gt;
The main change is to add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; entry for more information about the attributes and text of the urls pointed to by rel's in the document&lt;br /&gt;
&lt;br /&gt;
A fork of mf2py that implements these changes is at https://github.com/kevinmarks/mf2py&lt;br /&gt;
=== rel-tag ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;tag&amp;quot; href=&amp;quot;http://del.icio.us/tag/tech&amp;quot;&amp;gt;Technology&amp;lt;/a&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;tag&amp;quot;: [&amp;quot;http://del.icio.us/tag/tech&amp;quot;]}, &amp;quot;items&amp;quot;: []} &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is useful as a label. &lt;br /&gt;
&lt;br /&gt;
We add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; element to the parsed output with this extra data that can be looked up from the rels, which doesn't break backward compatibility and works better with xfn (see below)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://del.icio.us/tag/tech&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://del.icio.us/tag/tech&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Technology&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== xfn ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;coworker&amp;quot;: [&amp;quot;http://example.com/johndoe&amp;quot;]}, &amp;quot;items&amp;quot;: []}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is the person's name. Suggested output using the urls object:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with multiple xfn values &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker friend&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
we get this: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;friend&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;, &lt;br /&gt;
                &amp;quot;friend&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-enclosure ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;enclosure&amp;quot; href=&amp;quot;http://example.com/movie.mp4&amp;quot; type=&amp;quot;video/mpeg&amp;quot; title=&amp;quot;real title&amp;quot;&amp;gt;my movie&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;'{&amp;quot;rels&amp;quot;: {&amp;quot;enclosure&amp;quot;: [&amp;quot;http://example.com/movie.mp4&amp;quot;]}, &amp;quot;items&amp;quot;: []}'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text,  which is the title and the attributes which give type. Suggested output:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;enclosure&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/movie.mp4&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/movie.mp4&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;enclosure&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot;, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;video/mpeg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;real title&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This generalises to other rel's too, such as [[rel-feed]] and [[rel-alternate]] that have type, lang etc attributes.&lt;br /&gt;
&lt;br /&gt;
(updated to include changes from feedback below) [[User:Kevin Marks|Kevin Marks]] 22:13, 26 April 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== attributes parsed ===&lt;br /&gt;
Attributes currently parsed are:&lt;br /&gt;
* &amp;lt;code&amp;gt;hreflang&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
&lt;br /&gt;
Attributes we may consider parsing if we have a use case are &lt;br /&gt;
* &amp;lt;code&amp;gt;sizes&amp;lt;/code&amp;gt; for icon - need use-case documentation&lt;br /&gt;
* &amp;lt;code&amp;gt;coords&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
* &amp;lt;code&amp;gt;shape&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
&lt;br /&gt;
In addition there is a special attribute &amp;lt;s&amp;gt;&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; &amp;lt;/s&amp;gt;&amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; which is the text contents of the link, which is useful in rel-tag rel-enclosure and xfn, and in alternate when used for feeds. It's also clarifying for rel-me links. &lt;br /&gt;
&lt;br /&gt;
Tantek [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79057 suggests] we use &amp;lt;code&amp;gt;textContent&amp;lt;/code&amp;gt; for this instead, and make it a single string, not a list as &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is elsewhere in mf2 parsing&lt;br /&gt;
* Update: &amp;quot;text&amp;quot; is good enough, and &amp;quot;textContent&amp;quot; is ugly camelCase. [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== feedback on more rel info ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;name&amp;quot; is bad because it misleadingly conflates with use of &amp;quot;name&amp;quot; elsewhere in microformats2.&lt;br /&gt;
#* Suggested alternative: [https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent textContent] - since that's literally what is being returned there. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** as all other mf2 keys are lowercase-with-hyphens, [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79101 Tantek suggests] 'text' as that isn't going to be an html [[User:Kevin Marks|Kevin Marks]] 07:28, 25 April 2015 (UTC)&lt;br /&gt;
# no need for array for &amp;quot;name&amp;quot;/textContent - since there is always only one at most&lt;br /&gt;
#* E.g. should be &amp;quot;textContent&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#* Update: &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
# &amp;quot;urls&amp;quot; key is misleading - implies all URLs in the document, which is neither true, nor desired (takes much more parsing time and work and code)&lt;br /&gt;
#* Suggested alternative: &amp;quot;rel-urls&amp;quot;. And open to better alternatives too. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** If we are trying to extend the number of properties retuned from a rel without breaking the old structure why don't we call the new structure something like &amp;quot;rels-extended&amp;quot; [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#*** Extension is not the point, but rather to use them complementary. One structure for look-up of any rel value, hence &amp;quot;rels&amp;quot;, which returns you a list of URLs. Then you can lookup those URLs in the new mapping, by URL, hence it is called &amp;quot;rel-urls&amp;quot; - that's the point to use them in conjunction and that's why rel-urls is named what it is. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
# Why is the structure of  &amp;quot;rel-urls&amp;quot; different to the &amp;quot;alternates&amp;quot; structure. Should the &amp;quot;url&amp;quot; not just be added as a property and not as a key. Creating two data structures for one type of object seems inconsistent. It adds cognitive load to anyone trying to understand the JSON structure [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#* I was trying to avoid breaking the existing &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; structure and use of it - I did implement a variant that put the structure inside rels, and it became cumbersome and repetitive where there were multiple rels on a url (xfn cases). Denormalising as properties of the URL made more sense. It also dedupes if there is repetitive linking to the same URL, eg a series of posts with rel-author on each. [[User:Kevin Marks|Kevin Marks]] 20:05, 1 June 2015 (UTC)&lt;br /&gt;
# If the rel is a &amp;quot;tag&amp;quot; then the main value we need to return should be the last path component of the URL, not the link text? Should we add another output property ie &amp;quot;tag&amp;quot; [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#* No need to return last path segment of the URL, because the URL is already there - and that's just a library/framework utility function to get the last path segment of a URL. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
# As currently described, the URL from &amp;lt;code&amp;gt;alternates&amp;lt;/code&amp;gt; is repeated in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; structure. If we are doing this, surely &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; should be in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; too? I assumed a mapping between them. [[User:Kevin Marks|Kevin Marks]] 20:05, 1 June 2015 (UTC)&lt;br /&gt;
## edit showing this variant: http://microformats.org/wiki/index.php?title=microformats2-parsing&amp;amp;oldid=65021#parse_a_hyperlink_element_for_rel_microformats&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
#* Yes it makes sense to drop &amp;quot;alternates&amp;quot; assuming the backcompat impact is low, put alternates in &amp;quot;rels&amp;quot; along with everything else, and direct people to use rels and rel-urls for alternates functionality. Evidence this is an acceptable even preferable approach.[http://indiewebcamp.com/irc/2015-06-01/line/1433195247005] Will add an issue accordingly. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-brainstorming]]&lt;br /&gt;
* [[microformats2-prefixes]]&lt;br /&gt;
* [[microformats2-faq]]&lt;br /&gt;
* [[microformats2-issues]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65026</id>
		<title>microformats2-parsing-brainstorming</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65026"/>
		<updated>2015-06-01T23:38:36Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Nested h-* objects' &amp;quot;value&amp;quot; property */ note implementation in mf2py and addition to test suite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing brainstorming&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is for brainstorming, discussion, and other questions and explorations about [[microformats2]] parsing.&lt;br /&gt;
&lt;br /&gt;
For the microformats2 parsing algorithm, see:&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
For filing issues / problems with microformats2-parsing, see:&lt;br /&gt;
* [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Nested h-* objects' &amp;quot;value&amp;quot; property ==&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
Raised 2015-01-06 by [[User:Kylewm]];&lt;br /&gt;
&lt;br /&gt;
If a child element has a microformat (h-*) and is a property element (p-*, u-*, dt-*, e-*), the parser will add a &amp;quot;value&amp;quot; property to the resulting object. The value should attempt to be a useful representation of the object for consumers that do not have semantic knowledge of the particular h-* type. Ref: [[microformats2-parsing#parse_an_element_for_class_microformats]].&lt;br /&gt;
&lt;br /&gt;
To determine the &amp;quot;value&amp;quot;, we parse the property element simply (as if it did not have a h-* class), which works well for simple h-* objects, e.g. &amp;lt;code&amp;gt;&amp;lt;a class=&amp;quot;u-like-of h-cite&amp;quot; href=&amp;quot;...&amp;quot;&amp;gt;...&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* To handle more complex microformats, I propose that &amp;quot;value&amp;quot; for a p-* property element take on the first explicit &amp;quot;name&amp;quot; property of the nested microformat, and for a u-* property, the first explicit &amp;quot;url&amp;quot; property. Parsing will fall back on the current rules if an explicit property does not exist.&lt;br /&gt;
** This makes sense to me, and fits with the use-cases and examples I've seen. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** A similar (possibly simpler?) formulation would use the implied name and url rules to determine the &amp;quot;value&amp;quot; for p-* and u-* properties respectively&lt;br /&gt;
*** I don't think that's needed, as there are already implied rules on a property that should handle that. I'd start with just the &amp;quot;first explicit&amp;quot; scoping to be more conservative, and then see if we find any use-cases that (and existing implied rules) don't/doesn't catch. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
**** Agreement at [[2015-01-20]] meetup.&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;u-in-reply-to h-cite&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-author h-card&amp;quot; href=&amp;quot;http://example.com&amp;quot;&amp;gt;Example Author&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-name u-url&amp;quot; href=&amp;quot;http://example.com/post&amp;quot;&amp;gt;Example Post&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nested u-in-reply-to object would parse as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;in-reply-to&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-cite&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;Example Post&amp;quot;],&lt;br /&gt;
    &amp;quot;url&amp;quot;: [&amp;quot;http://example.com/post&amp;quot;],&lt;br /&gt;
    &amp;quot;author&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;:[&amp;quot;h-card&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://example.com&amp;quot;], &lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Example Author&amp;quot;]&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;Example Author&amp;quot;&lt;br /&gt;
    }],&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;value&amp;quot;: &amp;quot;http://example.com/post&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the outer &amp;quot;value&amp;quot; gets the in-reply-to h-cite's u-url property, and the inner &amp;quot;value&amp;quot; gets the author's p-name property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Because there are no implied properties of the dt-* and e-* types, and no obvious defaults, the value rules for these types would not change.&lt;br /&gt;
** A possibility for dt-* h-*: The dt-* could take either the first dt-* of the h-*, or (perhaps if no dt-* in the h-*,) the first &amp;lt;code&amp;gt;&amp;amp;lt;time&amp;amp;gt;&amp;lt;/code&amp;gt; element inside. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** First dt-* seems reasonable, predictable, and usable. Consensus at [[2015-01-20]] meetup.&lt;br /&gt;
** Update 2015-05-29: no known use-cases for first dt-* or first e-*, and implementing that &amp;quot;would require some refactoring&amp;quot; (in mf2py at least per kylewm), thus until there's a use-case for first dt-*/e-* inside, let's treat &amp;quot;dt-* h-*&amp;quot; and &amp;quot;e-* h-*&amp;quot; as before. [[User:Tantek|Tantek]] . In particular:&lt;br /&gt;
*** p-* h-* - value from first &amp;quot;name&amp;quot; as proposed above&lt;br /&gt;
*** u-* h-* - value from first &amp;quot;url&amp;quot; as proposed above&lt;br /&gt;
*** e-* h-* - value is already defined for e-* parsing, nothing special here&lt;br /&gt;
*** dt-* h-* - value from normal dt-* parsing - nothing special.&lt;br /&gt;
*** +1 totally agree, let's wait for use cases of e-* dt-* [[User:Kylewm|Kylewm]] 19:44, 29 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implemented in mf2py 2015-05-01 https://github.com/tommorris/mf2py/commit/edc895ef5a780bcee654e6644a688688934517b0&lt;br /&gt;
* Added to microformats test suite (experimental): https://github.com/microformats/tests/commit/90c8a7d8e96c7160036a298e13f16d9ddaec218e&lt;br /&gt;
&lt;br /&gt;
== Canonicalization of datetime output ==&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
It would be useful to choose a (more) uniform output format for datetimes to make it easier for users of the parser to consume datetimes. Microformats2 parsers already do sophisticated pattern matching to recognize date vs. time vs. datetimes, so converting this to any specific format should not add overhead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Specifically: &lt;br /&gt;
* Choose either 'T' or space as the date/time separator.&lt;br /&gt;
** Prefer space as it is more human friendly/readable, which matters even for syntaxes/formats, as human still develop, debug them. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* Choose either +XXYY or +XX:YY as the timezone specification (and convert 'Z' to +0000).&lt;br /&gt;
** Would appreciate some study / input here as to which timezone offset syntax is more human friendly. I lean slightly toward +/-NNNN (without the colon) because in the context of seeing a time, leaving out the colon makes it less likely the offset will be confused for a time. E.g. &amp;quot;07:00-08:00&amp;quot; looks like 7-8am, even if it meant 07:00 in PST. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** Space is fine - consensus [[2015-01-20]] meetup.&lt;br /&gt;
* Parsers should ''not'' attempt make datetimes more exact than specified. They should not add time, seconds, or timezone if omitted in the original. [[User:Kylewm|Kylewm]] 04:02, 14 May 2014 (UTC)&lt;br /&gt;
** Agreed. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** or month, day per Tom Morris&lt;br /&gt;
** consensus [[2015-01-20]] meetup&lt;br /&gt;
&lt;br /&gt;
* Counterpoint: PHP's builtin date parsing does not require strict formatting. And the equivalent functionality for Python is provided by the widely used python-dateutil library. [[User:Kylewm|Kylewm]] 19:02, 14 May 2014 (UTC)&lt;br /&gt;
** However we cannot (must not) depend on either PHP or Python's &amp;quot;smart&amp;quot; &amp;quot;fixing&amp;quot; or Postelian &amp;quot;liberal handling&amp;quot;, or any other language/framework's for that matter, as they all differ in how &amp;quot;intelligent&amp;quot; they are. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perhaps just provide a guideline for these based on the above consensus.&lt;br /&gt;
&lt;br /&gt;
== Add meta http-equiv to microformats2 parsing model ==&lt;br /&gt;
Status: disagreement, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
Similar to document level parsing of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, it makes sense simultaneously to parse &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv&amp;amp;gt;&amp;lt;/code&amp;gt; elements, perhaps treating &amp;quot;Status&amp;quot; in a special way (only using first number (sequence of digits) for its &amp;quot;value&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Use case: IndieWeb &amp;quot;deleted&amp;quot; indication inline in content for static file services that don't support HTTP return codes.&lt;br /&gt;
* http://indiewebcamp.com/deleted#HTML_meta_http-equiv_for_status&lt;br /&gt;
&lt;br /&gt;
HTTP Header example:&lt;br /&gt;
* &amp;lt;samp&amp;gt;Content-Type: text/html; charset=utf-8&amp;lt;/samp&amp;gt;&lt;br /&gt;
HTML equivalent: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Related:&lt;br /&gt;
* https://www.w3.org/International/O-HTTP-charset&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Interesting thought. Are you suggesting a top level &amp;quot;http-equivs:&amp;quot; collection similar to &amp;quot;rels:&amp;quot; in the parsed output? Should we consider &amp;quot;metas:&amp;quot; instead or in addition? [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* What's the use case for this? Also, http-equiv on its own is useless. http-equiv is only a supplement to the data stored in headers. And headers aren't always there: what happens in the context of someone debugging a page who pastes the source into the textarea of an mf2 parser? Without a compelling use case for including headers (and then over-riding some of them with http-equivs), I'm not sure why an implementor want to do this. —[[User:TomMorris|Tom Morris]] 00:25, 8 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g. from https://gist.github.com/aaronpk/10297489&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Status&amp;quot; content=&amp;quot;410 GONE&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [],&lt;br /&gt;
 &amp;quot;rels&amp;quot;: {},&lt;br /&gt;
 &amp;quot;http&amp;quot;: {&lt;br /&gt;
 &amp;quot;status&amp;quot;: 410&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Maybe make this an optional pass in the parser? - Tom Morris [[2015-01-20]]&lt;br /&gt;
* For now, don't bother with metas until someone provides a use-case. Tom Morris&lt;br /&gt;
* Agreed on both counts. [[User:Tantek|Tantek]] 06:56, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MIME type==&lt;br /&gt;
See [[microformats2-mime-type]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Other Interpretation Parsing Notes==&lt;br /&gt;
Note: most of these need to be written up as separate [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
Author: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
[[microformats-2|Microformats 2]] proposes a new, all encompassing syntax modification of [[microformats-2-prefixes|prefixes]] that will allow microformats to be parsed from pages by processors without prior knowledge of a vocabulary. The core components of this model are quite simple, are quite simple to implement, but there are a number of conflicts that emerge with the functionality of existing microformats parsers that need to be handled. This page documents a proposed model to separate these concerns clearly in a way that can be applied to the documentation of generic microformats parsing rules, and the documentation of individual vocabularies.&lt;br /&gt;
&lt;br /&gt;
Collection of other unresolved parsing issues in a generic model:&lt;br /&gt;
&lt;br /&gt;
This is good material for documenting as [[microformats-2-issues]], [[microformats-2-faq]], and perhaps some of the more technical details in [[microformats-2-parsing-faq]].&lt;br /&gt;
&lt;br /&gt;
* The include pattern references other elements from elsewhere in a document. A generic parser needs to track IDs and fill them in after walking the DOM. (also, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; if adopted.)&lt;br /&gt;
** The current thinking per [[microformats-2-brainstorming]] is to adopt &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; and drop the [[include-pattern]]. [[User:Tantek|Tantek]]&lt;br /&gt;
* Will &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; always map to an &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; property name?&lt;br /&gt;
** No, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; maps to one or more elements by ids, and their children. Those referenced elements may have property class names themselves, or they may contain elements that do. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] implies &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; from an hCard in a page that uses an &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt; element. This requires format knowledge, but a generic parser does not currently track the element type of a property node. Should it?&lt;br /&gt;
** It should not. element-specific handling (e.g. using &amp;quot;alt&amp;quot; from img, and &amp;quot;title&amp;quot; from abbr) is completely done at parse time. The JSON data model does not reflect which element type or attribute the value came from. Additionally, [[hAtom]] is an example where we created far too many vocabulary-specific rules, in practice they're not necessary, and only complicate the microformat for both publisher understanding and parser implementation. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that the highest level heading within an entry implies &amp;lt;code&amp;gt;entry-title&amp;lt;/code&amp;gt;. This particular optimisation might be better off dead.&lt;br /&gt;
** Agreed, this is gone in microformats 2. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that permalinks be parsed from &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, not &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
** In practice this has been one of the more problematic/error prone aspects of hAtom implementations, and it's also inconsistent with other microformats (although [[hReview]] tried to use both rel permalinks and &amp;quot;url&amp;quot;). The dependence upon [[rel-bookmark]] for permalinks is dropped in h-atom in preference to re-using &amp;quot;u-url&amp;quot; and &amp;quot;u-uid&amp;quot;. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[XFN]] is entirely built on &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; (although, has various other differences from structural microformats, as do vote-links, so perhaps are excluded from this discussion and will always be handled by dedicated parsers/queries regardless?)&lt;br /&gt;
** The best (easiest and most reliable) use of 'rel' microformats in practice is when they are orthogonal to 'class' microformats. This is true both with [[XFN]] and some newer [[existing-rel-values|rel values]] like [[rel-author]]. In addition, it was very clear at the recent [[schema.org]] workshop's syntax session that RDFa's decision to apparently arbitrarily mix use of 'rel' and 'property' attributes for specifying different types of properties (it wasn't clear to people in the room when you use which for what) has caused a high degree of confusion among publishers and thus high error-rates. Thus if anything we should learn from both the mistakes of RDFa and our own experiences with even very deliberate/specific mixing of rel microformats in class microformats, and keep them defined as separate orthogonal building blocks that work together, but don't depend on each other. [[User:Tantek|Tantek]]&lt;br /&gt;
*** Relatedly to this: &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; in hAtom. --[[User:BenWard|BenWard]] 06:50, 5 October 2011 (UTC)&lt;br /&gt;
**** Yes, and two related things here. First, despite my (and others') objection and (past) interoperable post/entry-specific treatment by Technorati and Ice Rocket, Hixie has redefined rel-tag in [[HTML5]] to mean applying to the whole page, not a single post. Second, I've explicitly added 'p-category' to the draft 'h-atom' vocabulary in [[microformats-2]]. [[User:Tantek|Tantek]] 07:12, 5 October 2011 (UTC)&lt;br /&gt;
* HTML's &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; element includes an optional &amp;lt;code&amp;gt;pubdate&amp;lt;/code&amp;gt; attribute. Simply: We should parse this as &amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;. --[[User:BenWard|BenWard]] 06:12, 10 October 2011 (UTC)&lt;br /&gt;
** *If* there is even some reasonable data on actual use of the &amp;quot;pubdate&amp;quot; attribute (I don't think there is, frankly, especially with the removal of the algorithm to produce Atom from HTML5), then we could consider parsing &amp;quot;pubdate&amp;quot; as backwards compatible option for &amp;quot;dt-published&amp;quot;. As a general rule, however, it is bad (demonstrably/experienced) design to depend on additional attributes (c.f. RDFa confusion over &amp;quot;property&amp;quot; vs. &amp;quot;rel&amp;quot;), especially for an instance where no additional attribute is necessary. I would leave this out for now until there is non-trivial (more than just test pages or folks who've written HTML5 books, ahem) use in the wild. When there is such use in the wild, it should be documented on a wiki page. We don't want to encourage more complex (additional attribute) publishing as a result of supporting it. [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
* [[value-class-pattern]]: In microformats-2, since there are no sub-properties, there will presumably no-longer be a 'value' property in any parsed model. Properties such as 'tel &amp;gt; type' in hCard are, as I recall, deprecated due to underuse anyway, so 'tel &amp;gt; value' becomes redundant. (There's also potentially some clarification around 'price &amp;gt; value' in hListing, whereby value was used in a pattern. So, what does this mean for value class parsing, with regard to value-title patterns and date separation patterns. Are we looking for a 'p-value' and 'p-value-title' classname, but treating them specially (excluding them from regular property parsing.) Or, are we giving them a special prefix (v-text, v-title? That seems confusing, but could be a concept.) I'm fine with p- for both, and just having the parser ignore them since they're special, but need clarification and naming confirmation. --[[User:BenWard|BenWard]] 09:35, 10 October 2011 (UTC)&lt;br /&gt;
** A few things:&lt;br /&gt;
*** 1. Yes, no more subproperties. 'tel' becomes just 'p-tel'. If there is demand for a structured 'tel' value, then we can use that demand (and research into publishing in practice) to brainstorm and create an 'h-tel' structured telephone number (with perhaps fields like 'type', 'extension', some indication of it being local dialing (an extra 0 in some countries) or international dialing, etc.) Or, we address the different 'tel' types as their own flat properties (again as justified by research), e.g. perhaps 'p-tel-fax', or 'p-tel-mobile'. Something for hcard-2-brainstorming.&lt;br /&gt;
*** 2. For prices, e.g. hListing, either we're going to need to encode how to parse monetary amounts including monetary symbols, or consider creating an 'h-price' structured price. Not sure what the right answer is here, again, will need to be informed by analysis of documented actual price publication practices.&lt;br /&gt;
*** 3. We should avoid introducing a new prefix 'v-' just for value-class-pattern. As we've noted elsewhere, each new prefix adds complexity and should be avoided without substantial advantage.&lt;br /&gt;
*** 4. Using 'p-value-title' is strange, as it would be an exception to 'p-' parsing, since it would get the value from the 'title' attribute whereas 'p-' properties don't normally do that (exception: abbr).&lt;br /&gt;
*** 5. Using 'p-value' is also strange, as it wouldn't generate a 'value' property in the JSON data model.&lt;br /&gt;
*** 6. Class name 'value-title' is already sufficiently prefixed - we've found or even heard of no collisions in practice.&lt;br /&gt;
*** 7. Class name 'value' can, by its simpler naming nature, be expected to potentially collide with other web designer class name usage though we have no documentation/mention thereof. We could consider a renaming, or providing of alternative, such as 'value-string', or 'value-content', etc. However, let's keep that as a backup plan to use only if/when evidence is presented that we need to.&lt;br /&gt;
** Conclusions: for now, in microformats-2, keep using 'value' and 'value-title' as defined in the [[value-class-pattern]], and add the additional (obvious) interpretation that [[value-class-pattern#Date_and_time_parsing|value class pattern: date and time parsing]] applies to all 'dt-' properties. - [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== incorporated 2015-05-28 ==&lt;br /&gt;
The following brainstorms were incorporated 2015-05-28.&lt;br /&gt;
&lt;br /&gt;
== more information for alternates ==&lt;br /&gt;
Raised 2015-04-24 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
The existing &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; parsing is omitting &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; - that should be added.  The &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; would make sense to add here too.&lt;br /&gt;
&lt;br /&gt;
Use-case: labels for presenting alternates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 Makes sense. [[User:Tantek|Tantek]] 03:41, 25 April 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== more information for rel-based formats ==&lt;br /&gt;
Raised 2015-04-18 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
Related github test suite issue: https://github.com/microformats/tests/issues/16&lt;br /&gt;
&lt;br /&gt;
Several rel-based formats have additional information that is useful beyond the link itself, which is all we capture at the moment. As I am trying to update the Universal feedparser to support mf2 based I will show examples from the [https://github.com/kevinmarks/feedparser/tree/365623a9470e99246f393a8c1f49a0db567826b8/feedparser/tests/microformats testcases] there.&lt;br /&gt;
&lt;br /&gt;
The main change is to add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; entry for more information about the attributes and text of the urls pointed to by rel's in the document&lt;br /&gt;
&lt;br /&gt;
A fork of mf2py that implements these changes is at https://github.com/kevinmarks/mf2py&lt;br /&gt;
=== rel-tag ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;tag&amp;quot; href=&amp;quot;http://del.icio.us/tag/tech&amp;quot;&amp;gt;Technology&amp;lt;/a&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;tag&amp;quot;: [&amp;quot;http://del.icio.us/tag/tech&amp;quot;]}, &amp;quot;items&amp;quot;: []} &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is useful as a label. &lt;br /&gt;
&lt;br /&gt;
We add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; element to the parsed output with this extra data that can be looked up from the rels, which doesn't break backward compatibility and works better with xfn (see below)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://del.icio.us/tag/tech&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://del.icio.us/tag/tech&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Technology&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== xfn ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;coworker&amp;quot;: [&amp;quot;http://example.com/johndoe&amp;quot;]}, &amp;quot;items&amp;quot;: []}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is the person's name. Suggested output using the urls object:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with multiple xfn values &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker friend&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
we get this: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;friend&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;, &lt;br /&gt;
                &amp;quot;friend&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-enclosure ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;enclosure&amp;quot; href=&amp;quot;http://example.com/movie.mp4&amp;quot; type=&amp;quot;video/mpeg&amp;quot; title=&amp;quot;real title&amp;quot;&amp;gt;my movie&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;'{&amp;quot;rels&amp;quot;: {&amp;quot;enclosure&amp;quot;: [&amp;quot;http://example.com/movie.mp4&amp;quot;]}, &amp;quot;items&amp;quot;: []}'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text,  which is the title and the attributes which give type. Suggested output:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;enclosure&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/movie.mp4&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/movie.mp4&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;enclosure&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot;, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;video/mpeg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;real title&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This generalises to other rel's too, such as [[rel-feed]] and [[rel-alternate]] that have type, lang etc attributes.&lt;br /&gt;
&lt;br /&gt;
(updated to include changes from feedback below) [[User:Kevin Marks|Kevin Marks]] 22:13, 26 April 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== attributes parsed ===&lt;br /&gt;
Attributes currently parsed are:&lt;br /&gt;
* &amp;lt;code&amp;gt;hreflang&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
&lt;br /&gt;
Attributes we may consider parsing if we have a use case are &lt;br /&gt;
* &amp;lt;code&amp;gt;sizes&amp;lt;/code&amp;gt; for icon - need use-case documentation&lt;br /&gt;
* &amp;lt;code&amp;gt;coords&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
* &amp;lt;code&amp;gt;shape&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
&lt;br /&gt;
In addition there is a special attribute &amp;lt;s&amp;gt;&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; &amp;lt;/s&amp;gt;&amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; which is the text contents of the link, which is useful in rel-tag rel-enclosure and xfn, and in alternate when used for feeds. It's also clarifying for rel-me links. &lt;br /&gt;
&lt;br /&gt;
Tantek [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79057 suggests] we use &amp;lt;code&amp;gt;textContent&amp;lt;/code&amp;gt; for this instead, and make it a single string, not a list as &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is elsewhere in mf2 parsing&lt;br /&gt;
* Update: &amp;quot;text&amp;quot; is good enough, and &amp;quot;textContent&amp;quot; is ugly camelCase. [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== feedback on more rel info ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;name&amp;quot; is bad because it misleadingly conflates with use of &amp;quot;name&amp;quot; elsewhere in microformats2.&lt;br /&gt;
#* Suggested alternative: [https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent textContent] - since that's literally what is being returned there. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** as all other mf2 keys are lowercase-with-hyphens, [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79101 Tantek suggests] 'text' as that isn't going to be an html [[User:Kevin Marks|Kevin Marks]] 07:28, 25 April 2015 (UTC)&lt;br /&gt;
# no need for array for &amp;quot;name&amp;quot;/textContent - since there is always only one at most&lt;br /&gt;
#* E.g. should be &amp;quot;textContent&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#* Update: &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
# &amp;quot;urls&amp;quot; key is misleading - implies all URLs in the document, which is neither true, nor desired (takes much more parsing time and work and code)&lt;br /&gt;
#* Suggested alternative: &amp;quot;rel-urls&amp;quot;. And open to better alternatives too. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** If we are trying to extend the number of properties retuned from a rel without breaking the old structure why don't we call the new structure something like &amp;quot;rels-extended&amp;quot; [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#*** Extension is not the point, but rather to use them complementary. One structure for look-up of any rel value, hence &amp;quot;rels&amp;quot;, which returns you a list of URLs. Then you can lookup those URLs in the new mapping, by URL, hence it is called &amp;quot;rel-urls&amp;quot; - that's the point to use them in conjunction and that's why rel-urls is named what it is. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
# Why is the structure of  &amp;quot;rel-urls&amp;quot; different to the &amp;quot;alternates&amp;quot; structure. Should the &amp;quot;url&amp;quot; not just be added as a property and not as a key. Creating two data structures for one type of object seems inconsistent. It adds cognitive load to anyone trying to understand the JSON structure [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#* I was trying to avoid breaking the existing &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; structure and use of it - I did implement a variant that put the structure inside rels, and it became cumbersome and repetitive where there were multiple rels on a url (xfn cases). Denormalising as properties of the URL made more sense. It also dedupes if there is repetitive linking to the same URL, eg a series of posts with rel-author on each. [[User:Kevin Marks|Kevin Marks]] 20:05, 1 June 2015 (UTC)&lt;br /&gt;
# If the rel is a &amp;quot;tag&amp;quot; then the main value we need to return should be the last path component of the URL, not the link text? Should we add another output property ie &amp;quot;tag&amp;quot; [[User:GlennJones|Glenn Jones]] 12:29, 1 June 2015 (UTC)&lt;br /&gt;
#* No need to return last path segment of the URL, because the URL is already there - and that's just a library/framework utility function to get the last path segment of a URL. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
# As currently described, the URL from &amp;lt;code&amp;gt;alternates&amp;lt;/code&amp;gt; is repeated in the &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; structure. If we are doing this, surely &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; should be in &amp;lt;code&amp;gt;rels&amp;lt;/code&amp;gt; too? I assumed a mapping between them. [[User:Kevin Marks|Kevin Marks]] 20:05, 1 June 2015 (UTC)&lt;br /&gt;
## edit showing this variant: http://microformats.org/wiki/index.php?title=microformats2-parsing&amp;amp;oldid=65021#parse_a_hyperlink_element_for_rel_microformats&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
#* Yes it makes sense to drop &amp;quot;alternates&amp;quot; assuming the backcompat impact is low, put alternates in &amp;quot;rels&amp;quot; along with everything else, and direct people to use rels and rel-urls for alternates functionality. Evidence this is an acceptable even preferable approach.[http://indiewebcamp.com/irc/2015-06-01/line/1433195247005] Will add an issue accordingly. [[User:Tantek|Tantek]] 22:03, 1 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-brainstorming]]&lt;br /&gt;
* [[microformats2-prefixes]]&lt;br /&gt;
* [[microformats2-faq]]&lt;br /&gt;
* [[microformats2-issues]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65001</id>
		<title>microformats2-parsing-brainstorming</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65001"/>
		<updated>2015-05-29T19:44:04Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Nested h-* objects' &amp;quot;value&amp;quot; property */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing brainstorming&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is for brainstorming, discussion, and other questions and explorations about [[microformats2]] parsing.&lt;br /&gt;
&lt;br /&gt;
For the microformats2 parsing algorithm, see:&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Nested h-* objects' &amp;quot;value&amp;quot; property ==&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
Raised 2015-01-06 by [[User:Kylewm]];&lt;br /&gt;
&lt;br /&gt;
If a child element has a microformat (h-*) and is a property element (p-*, u-*, dt-*, e-*), the parser will add a &amp;quot;value&amp;quot; property to the resulting object. The value should attempt to be a useful representation of the object for consumers that do not have semantic knowledge of the particular h-* type. Ref: [[microformats2-parsing#parse_an_element_for_class_microformats]].&lt;br /&gt;
&lt;br /&gt;
To determine the &amp;quot;value&amp;quot;, we parse the property element simply (as if it did not have a h-* class), which works well for simple h-* objects, e.g. &amp;lt;code&amp;gt;&amp;lt;a class=&amp;quot;u-like-of h-cite&amp;quot; href=&amp;quot;...&amp;quot;&amp;gt;...&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* To handle more complex microformats, I propose that &amp;quot;value&amp;quot; for a p-* property element take on the first explicit &amp;quot;name&amp;quot; property of the nested microformat, and for a u-* property, the first explicit &amp;quot;url&amp;quot; property. Parsing will fall back on the current rules if an explicit property does not exist.&lt;br /&gt;
** This makes sense to me, and fits with the use-cases and examples I've seen. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** A similar (possibly simpler?) formulation would use the implied name and url rules to determine the &amp;quot;value&amp;quot; for p-* and u-* properties respectively&lt;br /&gt;
*** I don't think that's needed, as there are already implied rules on a property that should handle that. I'd start with just the &amp;quot;first explicit&amp;quot; scoping to be more conservative, and then see if we find any use-cases that (and existing implied rules) don't/doesn't catch. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
**** Agreement at [[2015-01-20]] meetup.&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;u-in-reply-to h-cite&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-author h-card&amp;quot; href=&amp;quot;http://example.com&amp;quot;&amp;gt;Example Author&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-name u-url&amp;quot; href=&amp;quot;http://example.com/post&amp;quot;&amp;gt;Example Post&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nested u-in-reply-to object would parse as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;in-reply-to&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-cite&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;Example Post&amp;quot;],&lt;br /&gt;
    &amp;quot;url&amp;quot;: [&amp;quot;http://example.com/post&amp;quot;],&lt;br /&gt;
    &amp;quot;author&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;:[&amp;quot;h-card&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://example.com&amp;quot;], &lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Example Author&amp;quot;]&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;Example Author&amp;quot;&lt;br /&gt;
    }],&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;value&amp;quot;: &amp;quot;http://example.com/post&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the outer &amp;quot;value&amp;quot; gets the in-reply-to h-cite's u-url property, and the inner &amp;quot;value&amp;quot; gets the author's p-name property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Because there are no implied properties of the dt-* and e-* types, and no obvious defaults, the value rules for these types would not change.&lt;br /&gt;
** A possibility for dt-* h-*: The dt-* could take either the first dt-* of the h-*, or (perhaps if no dt-* in the h-*,) the first &amp;lt;code&amp;gt;&amp;amp;lt;time&amp;amp;gt;&amp;lt;/code&amp;gt; element inside. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** First dt-* seems reasonable, predictable, and usable. Consensus at [[2015-01-20]] meetup.&lt;br /&gt;
** Update 2015-05-29: no known use-cases for first dt-* or first e-*, and implementing that &amp;quot;would require some refactoring&amp;quot; (in mf2py at least per kylewm), thus until there's a use-case for first dt-*/e-* inside, let's treat &amp;quot;dt-* h-*&amp;quot; and &amp;quot;e-* h-*&amp;quot; as before. [[User:Tantek|Tantek]] . In particular:&lt;br /&gt;
*** p-* h-* - value from first &amp;quot;name&amp;quot; as proposed above&lt;br /&gt;
*** u-* h-* - value from first &amp;quot;url&amp;quot; as proposed above&lt;br /&gt;
*** e-* h-* - value is already defined for e-* parsing, nothing special here&lt;br /&gt;
*** dt-* h-* - value from normal dt-* parsing - nothing special.&lt;br /&gt;
*** +1 totally agree, let's wait for use cases of e-* dt-* [[User:Kylewm|Kylewm]] 19:44, 29 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Canonicalization of datetime output ==&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
It would be useful to choose a (more) uniform output format for datetimes to make it easier for users of the parser to consume datetimes. Microformats2 parsers already do sophisticated pattern matching to recognize date vs. time vs. datetimes, so converting this to any specific format should not add overhead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Specifically: &lt;br /&gt;
* Choose either 'T' or space as the date/time separator.&lt;br /&gt;
** Prefer space as it is more human friendly/readable, which matters even for syntaxes/formats, as human still develop, debug them. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* Choose either +XXYY or +XX:YY as the timezone specification (and convert 'Z' to +0000).&lt;br /&gt;
** Would appreciate some study / input here as to which timezone offset syntax is more human friendly. I lean slightly toward +/-NNNN (without the colon) because in the context of seeing a time, leaving out the colon makes it less likely the offset will be confused for a time. E.g. &amp;quot;07:00-08:00&amp;quot; looks like 7-8am, even if it meant 07:00 in PST. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** Space is fine - consensus [[2015-01-20]] meetup.&lt;br /&gt;
* Parsers should ''not'' attempt make datetimes more exact than specified. They should not add time, seconds, or timezone if omitted in the original. [[User:Kylewm|Kylewm]] 04:02, 14 May 2014 (UTC)&lt;br /&gt;
** Agreed. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** or month, day per Tom Morris&lt;br /&gt;
** consensus [[2015-01-20]] meetup&lt;br /&gt;
&lt;br /&gt;
* Counterpoint: PHP's builtin date parsing does not require strict formatting. And the equivalent functionality for Python is provided by the widely used python-dateutil library. [[User:Kylewm|Kylewm]] 19:02, 14 May 2014 (UTC)&lt;br /&gt;
** However we cannot (must not) depend on either PHP or Python's &amp;quot;smart&amp;quot; &amp;quot;fixing&amp;quot; or Postelian &amp;quot;liberal handling&amp;quot;, or any other language/framework's for that matter, as they all differ in how &amp;quot;intelligent&amp;quot; they are. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perhaps just provide a guideline for these based on the above consensus.&lt;br /&gt;
&lt;br /&gt;
== Add meta http-equiv to microformats2 parsing model ==&lt;br /&gt;
Status: disagreement, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
Similar to document level parsing of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, it makes sense simultaneously to parse &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv&amp;amp;gt;&amp;lt;/code&amp;gt; elements, perhaps treating &amp;quot;Status&amp;quot; in a special way (only using first number (sequence of digits) for its &amp;quot;value&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Use case: IndieWeb &amp;quot;deleted&amp;quot; indication inline in content for static file services that don't support HTTP return codes.&lt;br /&gt;
* http://indiewebcamp.com/deleted#HTML_meta_http-equiv_for_status&lt;br /&gt;
&lt;br /&gt;
HTTP Header example:&lt;br /&gt;
* &amp;lt;samp&amp;gt;Content-Type: text/html; charset=utf-8&amp;lt;/samp&amp;gt;&lt;br /&gt;
HTML equivalent: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Related:&lt;br /&gt;
* https://www.w3.org/International/O-HTTP-charset&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Interesting thought. Are you suggesting a top level &amp;quot;http-equivs:&amp;quot; collection similar to &amp;quot;rels:&amp;quot; in the parsed output? Should we consider &amp;quot;metas:&amp;quot; instead or in addition? [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* What's the use case for this? Also, http-equiv on its own is useless. http-equiv is only a supplement to the data stored in headers. And headers aren't always there: what happens in the context of someone debugging a page who pastes the source into the textarea of an mf2 parser? Without a compelling use case for including headers (and then over-riding some of them with http-equivs), I'm not sure why an implementor want to do this. —[[User:TomMorris|Tom Morris]] 00:25, 8 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g. from https://gist.github.com/aaronpk/10297489&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Status&amp;quot; content=&amp;quot;410 GONE&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [],&lt;br /&gt;
 &amp;quot;rels&amp;quot;: {},&lt;br /&gt;
 &amp;quot;http&amp;quot;: {&lt;br /&gt;
 &amp;quot;status&amp;quot;: 410&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Maybe make this an optional pass in the parser? - Tom Morris [[2015-01-20]]&lt;br /&gt;
* For now, don't bother with metas until someone provides a use-case. Tom Morris&lt;br /&gt;
* Agreed on both counts. [[User:Tantek|Tantek]] 06:56, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MIME type==&lt;br /&gt;
See [[microformats2-mime-type]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Other Interpretation Parsing Notes==&lt;br /&gt;
Note: most of these need to be written up as separate [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
Author: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
[[microformats-2|Microformats 2]] proposes a new, all encompassing syntax modification of [[microformats-2-prefixes|prefixes]] that will allow microformats to be parsed from pages by processors without prior knowledge of a vocabulary. The core components of this model are quite simple, are quite simple to implement, but there are a number of conflicts that emerge with the functionality of existing microformats parsers that need to be handled. This page documents a proposed model to separate these concerns clearly in a way that can be applied to the documentation of generic microformats parsing rules, and the documentation of individual vocabularies.&lt;br /&gt;
&lt;br /&gt;
Collection of other unresolved parsing issues in a generic model:&lt;br /&gt;
&lt;br /&gt;
This is good material for documenting as [[microformats-2-issues]], [[microformats-2-faq]], and perhaps some of the more technical details in [[microformats-2-parsing-faq]].&lt;br /&gt;
&lt;br /&gt;
* The include pattern references other elements from elsewhere in a document. A generic parser needs to track IDs and fill them in after walking the DOM. (also, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; if adopted.)&lt;br /&gt;
** The current thinking per [[microformats-2-brainstorming]] is to adopt &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; and drop the [[include-pattern]]. [[User:Tantek|Tantek]]&lt;br /&gt;
* Will &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; always map to an &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; property name?&lt;br /&gt;
** No, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; maps to one or more elements by ids, and their children. Those referenced elements may have property class names themselves, or they may contain elements that do. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] implies &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; from an hCard in a page that uses an &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt; element. This requires format knowledge, but a generic parser does not currently track the element type of a property node. Should it?&lt;br /&gt;
** It should not. element-specific handling (e.g. using &amp;quot;alt&amp;quot; from img, and &amp;quot;title&amp;quot; from abbr) is completely done at parse time. The JSON data model does not reflect which element type or attribute the value came from. Additionally, [[hAtom]] is an example where we created far too many vocabulary-specific rules, in practice they're not necessary, and only complicate the microformat for both publisher understanding and parser implementation. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that the highest level heading within an entry implies &amp;lt;code&amp;gt;entry-title&amp;lt;/code&amp;gt;. This particular optimisation might be better off dead.&lt;br /&gt;
** Agreed, this is gone in microformats 2. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that permalinks be parsed from &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, not &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
** In practice this has been one of the more problematic/error prone aspects of hAtom implementations, and it's also inconsistent with other microformats (although [[hReview]] tried to use both rel permalinks and &amp;quot;url&amp;quot;). The dependence upon [[rel-bookmark]] for permalinks is dropped in h-atom in preference to re-using &amp;quot;u-url&amp;quot; and &amp;quot;u-uid&amp;quot;. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[XFN]] is entirely built on &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; (although, has various other differences from structural microformats, as do vote-links, so perhaps are excluded from this discussion and will always be handled by dedicated parsers/queries regardless?)&lt;br /&gt;
** The best (easiest and most reliable) use of 'rel' microformats in practice is when they are orthogonal to 'class' microformats. This is true both with [[XFN]] and some newer [[existing-rel-values|rel values]] like [[rel-author]]. In addition, it was very clear at the recent [[schema.org]] workshop's syntax session that RDFa's decision to apparently arbitrarily mix use of 'rel' and 'property' attributes for specifying different types of properties (it wasn't clear to people in the room when you use which for what) has caused a high degree of confusion among publishers and thus high error-rates. Thus if anything we should learn from both the mistakes of RDFa and our own experiences with even very deliberate/specific mixing of rel microformats in class microformats, and keep them defined as separate orthogonal building blocks that work together, but don't depend on each other. [[User:Tantek|Tantek]]&lt;br /&gt;
*** Relatedly to this: &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; in hAtom. --[[User:BenWard|BenWard]] 06:50, 5 October 2011 (UTC)&lt;br /&gt;
**** Yes, and two related things here. First, despite my (and others') objection and (past) interoperable post/entry-specific treatment by Technorati and Ice Rocket, Hixie has redefined rel-tag in [[HTML5]] to mean applying to the whole page, not a single post. Second, I've explicitly added 'p-category' to the draft 'h-atom' vocabulary in [[microformats-2]]. [[User:Tantek|Tantek]] 07:12, 5 October 2011 (UTC)&lt;br /&gt;
* HTML's &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; element includes an optional &amp;lt;code&amp;gt;pubdate&amp;lt;/code&amp;gt; attribute. Simply: We should parse this as &amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;. --[[User:BenWard|BenWard]] 06:12, 10 October 2011 (UTC)&lt;br /&gt;
** *If* there is even some reasonable data on actual use of the &amp;quot;pubdate&amp;quot; attribute (I don't think there is, frankly, especially with the removal of the algorithm to produce Atom from HTML5), then we could consider parsing &amp;quot;pubdate&amp;quot; as backwards compatible option for &amp;quot;dt-published&amp;quot;. As a general rule, however, it is bad (demonstrably/experienced) design to depend on additional attributes (c.f. RDFa confusion over &amp;quot;property&amp;quot; vs. &amp;quot;rel&amp;quot;), especially for an instance where no additional attribute is necessary. I would leave this out for now until there is non-trivial (more than just test pages or folks who've written HTML5 books, ahem) use in the wild. When there is such use in the wild, it should be documented on a wiki page. We don't want to encourage more complex (additional attribute) publishing as a result of supporting it. [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
* [[value-class-pattern]]: In microformats-2, since there are no sub-properties, there will presumably no-longer be a 'value' property in any parsed model. Properties such as 'tel &amp;gt; type' in hCard are, as I recall, deprecated due to underuse anyway, so 'tel &amp;gt; value' becomes redundant. (There's also potentially some clarification around 'price &amp;gt; value' in hListing, whereby value was used in a pattern. So, what does this mean for value class parsing, with regard to value-title patterns and date separation patterns. Are we looking for a 'p-value' and 'p-value-title' classname, but treating them specially (excluding them from regular property parsing.) Or, are we giving them a special prefix (v-text, v-title? That seems confusing, but could be a concept.) I'm fine with p- for both, and just having the parser ignore them since they're special, but need clarification and naming confirmation. --[[User:BenWard|BenWard]] 09:35, 10 October 2011 (UTC)&lt;br /&gt;
** A few things:&lt;br /&gt;
*** 1. Yes, no more subproperties. 'tel' becomes just 'p-tel'. If there is demand for a structured 'tel' value, then we can use that demand (and research into publishing in practice) to brainstorm and create an 'h-tel' structured telephone number (with perhaps fields like 'type', 'extension', some indication of it being local dialing (an extra 0 in some countries) or international dialing, etc.) Or, we address the different 'tel' types as their own flat properties (again as justified by research), e.g. perhaps 'p-tel-fax', or 'p-tel-mobile'. Something for hcard-2-brainstorming.&lt;br /&gt;
*** 2. For prices, e.g. hListing, either we're going to need to encode how to parse monetary amounts including monetary symbols, or consider creating an 'h-price' structured price. Not sure what the right answer is here, again, will need to be informed by analysis of documented actual price publication practices.&lt;br /&gt;
*** 3. We should avoid introducing a new prefix 'v-' just for value-class-pattern. As we've noted elsewhere, each new prefix adds complexity and should be avoided without substantial advantage.&lt;br /&gt;
*** 4. Using 'p-value-title' is strange, as it would be an exception to 'p-' parsing, since it would get the value from the 'title' attribute whereas 'p-' properties don't normally do that (exception: abbr).&lt;br /&gt;
*** 5. Using 'p-value' is also strange, as it wouldn't generate a 'value' property in the JSON data model.&lt;br /&gt;
*** 6. Class name 'value-title' is already sufficiently prefixed - we've found or even heard of no collisions in practice.&lt;br /&gt;
*** 7. Class name 'value' can, by its simpler naming nature, be expected to potentially collide with other web designer class name usage though we have no documentation/mention thereof. We could consider a renaming, or providing of alternative, such as 'value-string', or 'value-content', etc. However, let's keep that as a backup plan to use only if/when evidence is presented that we need to.&lt;br /&gt;
** Conclusions: for now, in microformats-2, keep using 'value' and 'value-title' as defined in the [[value-class-pattern]], and add the additional (obvious) interpretation that [[value-class-pattern#Date_and_time_parsing|value class pattern: date and time parsing]] applies to all 'dt-' properties. - [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== incorporated 2015-05-28 ==&lt;br /&gt;
The following brainstorms were incorporated 2015-05-28.&lt;br /&gt;
&lt;br /&gt;
== more information for alternates ==&lt;br /&gt;
Raised 2015-04-24 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
The existing &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; parsing is omitting &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; - that should be added.  The &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; would make sense to add here too.&lt;br /&gt;
&lt;br /&gt;
Use-case: labels for presenting alternates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 Makes sense. [[User:Tantek|Tantek]] 03:41, 25 April 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== more information for rel-based formats ==&lt;br /&gt;
Raised 2015-04-18 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
Related github test suite issue: https://github.com/microformats/tests/issues/16&lt;br /&gt;
&lt;br /&gt;
Several rel-based formats have additional information that is useful beyond the link itself, which is all we capture at the moment. As I am trying to update the Universal feedparser to support mf2 based I will show examples from the [https://github.com/kevinmarks/feedparser/tree/365623a9470e99246f393a8c1f49a0db567826b8/feedparser/tests/microformats testcases] there.&lt;br /&gt;
&lt;br /&gt;
The main change is to add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; entry for more information about the attributes and text of the urls pointed to by rel's in the document&lt;br /&gt;
&lt;br /&gt;
A fork of mf2py that implements these changes is at https://github.com/kevinmarks/mf2py&lt;br /&gt;
=== rel-tag ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;tag&amp;quot; href=&amp;quot;http://del.icio.us/tag/tech&amp;quot;&amp;gt;Technology&amp;lt;/a&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;tag&amp;quot;: [&amp;quot;http://del.icio.us/tag/tech&amp;quot;]}, &amp;quot;items&amp;quot;: []} &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is useful as a label. &lt;br /&gt;
&lt;br /&gt;
We add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; element to the parsed output with this extra data that can be looked up from the rels, which doesn't break backward compatibility and works better with xfn (see below)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://del.icio.us/tag/tech&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://del.icio.us/tag/tech&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Technology&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== xfn ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;coworker&amp;quot;: [&amp;quot;http://example.com/johndoe&amp;quot;]}, &amp;quot;items&amp;quot;: []}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is the person's name. Suggested output using the urls object:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with multiple xfn values &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker friend&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
we get this: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;friend&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;, &lt;br /&gt;
                &amp;quot;friend&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-enclosure ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;enclosure&amp;quot; href=&amp;quot;http://example.com/movie.mp4&amp;quot; type=&amp;quot;video/mpeg&amp;quot; title=&amp;quot;real title&amp;quot;&amp;gt;my movie&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;'{&amp;quot;rels&amp;quot;: {&amp;quot;enclosure&amp;quot;: [&amp;quot;http://example.com/movie.mp4&amp;quot;]}, &amp;quot;items&amp;quot;: []}'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text,  which is the title and the attributes which give type. Suggested output:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;enclosure&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/movie.mp4&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/movie.mp4&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;enclosure&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot;, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;video/mpeg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;real title&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This generalises to other rel's too, such as [[rel-feed]] and [[rel-alternate]] that have type, lang etc attributes.&lt;br /&gt;
&lt;br /&gt;
(updated to include changes from feedback below) [[User:Kevin Marks|Kevin Marks]] 22:13, 26 April 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== attributes parsed ===&lt;br /&gt;
Attributes currently parsed are:&lt;br /&gt;
* &amp;lt;code&amp;gt;hreflang&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
&lt;br /&gt;
Attributes we may consider parsing if we have a use case are &lt;br /&gt;
* &amp;lt;code&amp;gt;sizes&amp;lt;/code&amp;gt; for icon - need use-case documentation&lt;br /&gt;
* &amp;lt;code&amp;gt;coords&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
* &amp;lt;code&amp;gt;shape&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
&lt;br /&gt;
In addition there is a special attribute &amp;lt;s&amp;gt;&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; &amp;lt;/s&amp;gt;&amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; which is the text contents of the link, which is useful in rel-tag rel-enclosure and xfn, and in alternate when used for feeds. It's also clarifying for rel-me links. &lt;br /&gt;
&lt;br /&gt;
Tantek [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79057 suggests] we use &amp;lt;code&amp;gt;textContent&amp;lt;/code&amp;gt; for this instead, and make it a single string, not a list as &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is elsewhere in mf2 parsing&lt;br /&gt;
* Update: &amp;quot;text&amp;quot; is good enough, and &amp;quot;textContent&amp;quot; is ugly camelCase. [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== feedback on more rel info ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;name&amp;quot; is bad because it misleadingly conflates with use of &amp;quot;name&amp;quot; elsewhere in microformats2.&lt;br /&gt;
#* Suggested alternative: [https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent textContent] - since that's literally what is being returned there. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** as all other mf2 keys are lowercase-with-hyphens, [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79101 Tantek suggests] 'text' as that isn't going to be an html [[User:Kevin Marks|Kevin Marks]] 07:28, 25 April 2015 (UTC)&lt;br /&gt;
# no need for array for &amp;quot;name&amp;quot;/textContent - since there is always only one at most&lt;br /&gt;
#* E.g. should be &amp;quot;textContent&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#* Update: &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
# &amp;quot;urls&amp;quot; key is misleading - implies all URLs in the document, which is neither true, nor desired (takes much more parsing time and work and code)&lt;br /&gt;
#* Suggested alternative: &amp;quot;rel-urls&amp;quot;. And open to better alternatives too. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-brainstorming]]&lt;br /&gt;
* [[microformats2-prefixes]]&lt;br /&gt;
* [[microformats2-faq]]&lt;br /&gt;
* [[microformats2-issues]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=64998</id>
		<title>microformats2-parsing-brainstorming</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=64998"/>
		<updated>2015-05-29T05:57:24Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Nested h-* objects' &amp;quot;value&amp;quot; property */ fix example parsing output to move &amp;quot;value&amp;quot; outside of &amp;quot;properties&amp;quot; hash&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing brainstorming&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is for brainstorming, discussion, and other questions and explorations about [[microformats2]] parsing.&lt;br /&gt;
&lt;br /&gt;
For the microformats2 parsing algorithm, see:&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Nested h-* objects' &amp;quot;value&amp;quot; property ==&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
Raised 2015-01-06 by [[User:Kylewm]];&lt;br /&gt;
&lt;br /&gt;
If a child element has a microformat (h-*) and is a property element (p-*, u-*, dt-*, e-*), the parser will add a &amp;quot;value&amp;quot; property to the resulting object. The value should attempt to be a useful representation of the object for consumers that do not have semantic knowledge of the particular h-* type. Ref: [[microformats2-parsing#parse_an_element_for_class_microformats]].&lt;br /&gt;
&lt;br /&gt;
To determine the &amp;quot;value&amp;quot;, we parse the property element simply (as if it did not have a h-* class), which works well for simple h-* objects, e.g. &amp;lt;code&amp;gt;&amp;lt;a class=&amp;quot;u-like-of h-cite&amp;quot; href=&amp;quot;...&amp;quot;&amp;gt;...&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* To handle more complex microformats, I propose that &amp;quot;value&amp;quot; for a p-* property element take on the first explicit &amp;quot;name&amp;quot; property of the nested microformat, and for a u-* property, the first explicit &amp;quot;url&amp;quot; property. Parsing will fall back on the current rules if an explicit property does not exist.&lt;br /&gt;
** This makes sense to me, and fits with the use-cases and examples I've seen. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** A similar (possibly simpler?) formulation would use the implied name and url rules to determine the &amp;quot;value&amp;quot; for p-* and u-* properties respectively&lt;br /&gt;
*** I don't think that's needed, as there are already implied rules on a property that should handle that. I'd start with just the &amp;quot;first explicit&amp;quot; scoping to be more conservative, and then see if we find any use-cases that (and existing implied rules) don't/doesn't catch. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
**** Agreement at [[2015-01-20]] meetup.&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;u-in-reply-to h-cite&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-author h-card&amp;quot; href=&amp;quot;http://example.com&amp;quot;&amp;gt;Example Author&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-name u-url&amp;quot; href=&amp;quot;http://example.com/post&amp;quot;&amp;gt;Example Post&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nested u-in-reply-to object would parse as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;in-reply-to&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-cite&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;Example Post&amp;quot;],&lt;br /&gt;
    &amp;quot;url&amp;quot;: [&amp;quot;http://example.com/post&amp;quot;],&lt;br /&gt;
    &amp;quot;author&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;:[&amp;quot;h-card&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://example.com&amp;quot;], &lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Example Author&amp;quot;]&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;value&amp;quot;: &amp;quot;Example Author&amp;quot;&lt;br /&gt;
    }],&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;value&amp;quot;: &amp;quot;http://example.com/post&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the outer &amp;quot;value&amp;quot; gets the in-reply-to h-cite's u-url property, and the inner &amp;quot;value&amp;quot; gets the author's p-name property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Because there are no implied properties of the dt-* and e-* types, and no obvious defaults, the value rules for these types would not change.&lt;br /&gt;
** A possibility for dt-* h-*: The dt-* could take either the first dt-* of the h-*, or (perhaps if no dt-* in the h-*,) the first &amp;lt;code&amp;gt;&amp;amp;lt;time&amp;amp;gt;&amp;lt;/code&amp;gt; element inside. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** First dt-* seems reasonable, predictable, and usable. Consensus at [[2015-01-20]] meetup.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Canonicalization of datetime output ==&lt;br /&gt;
Status: resolved, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
It would be useful to choose a (more) uniform output format for datetimes to make it easier for users of the parser to consume datetimes. Microformats2 parsers already do sophisticated pattern matching to recognize date vs. time vs. datetimes, so converting this to any specific format should not add overhead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
Specifically: &lt;br /&gt;
* Choose either 'T' or space as the date/time separator.&lt;br /&gt;
** Prefer space as it is more human friendly/readable, which matters even for syntaxes/formats, as human still develop, debug them. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* Choose either +XXYY or +XX:YY as the timezone specification (and convert 'Z' to +0000).&lt;br /&gt;
** Would appreciate some study / input here as to which timezone offset syntax is more human friendly. I lean slightly toward +/-NNNN (without the colon) because in the context of seeing a time, leaving out the colon makes it less likely the offset will be confused for a time. E.g. &amp;quot;07:00-08:00&amp;quot; looks like 7-8am, even if it meant 07:00 in PST. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** Space is fine - consensus [[2015-01-20]] meetup.&lt;br /&gt;
* Parsers should ''not'' attempt make datetimes more exact than specified. They should not add time, seconds, or timezone if omitted in the original. [[User:Kylewm|Kylewm]] 04:02, 14 May 2014 (UTC)&lt;br /&gt;
** Agreed. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
** or month, day per Tom Morris&lt;br /&gt;
** consensus [[2015-01-20]] meetup&lt;br /&gt;
&lt;br /&gt;
* Counterpoint: PHP's builtin date parsing does not require strict formatting. And the equivalent functionality for Python is provided by the widely used python-dateutil library. [[User:Kylewm|Kylewm]] 19:02, 14 May 2014 (UTC)&lt;br /&gt;
** However we cannot (must not) depend on either PHP or Python's &amp;quot;smart&amp;quot; &amp;quot;fixing&amp;quot; or Postelian &amp;quot;liberal handling&amp;quot;, or any other language/framework's for that matter, as they all differ in how &amp;quot;intelligent&amp;quot; they are. [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perhaps just provide a guideline for these based on the above consensus.&lt;br /&gt;
&lt;br /&gt;
== Add meta http-equiv to microformats2 parsing model ==&lt;br /&gt;
Status: disagreement, awaiting implementation attempt/experience.&lt;br /&gt;
&lt;br /&gt;
Similar to document level parsing of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, it makes sense simultaneously to parse &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv&amp;amp;gt;&amp;lt;/code&amp;gt; elements, perhaps treating &amp;quot;Status&amp;quot; in a special way (only using first number (sequence of digits) for its &amp;quot;value&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Use case: IndieWeb &amp;quot;deleted&amp;quot; indication inline in content for static file services that don't support HTTP return codes.&lt;br /&gt;
* http://indiewebcamp.com/deleted#HTML_meta_http-equiv_for_status&lt;br /&gt;
&lt;br /&gt;
HTTP Header example:&lt;br /&gt;
* &amp;lt;samp&amp;gt;Content-Type: text/html; charset=utf-8&amp;lt;/samp&amp;gt;&lt;br /&gt;
HTML equivalent: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Related:&lt;br /&gt;
* https://www.w3.org/International/O-HTTP-charset&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Interesting thought. Are you suggesting a top level &amp;quot;http-equivs:&amp;quot; collection similar to &amp;quot;rels:&amp;quot; in the parsed output? Should we consider &amp;quot;metas:&amp;quot; instead or in addition? [[User:Tantek|Tantek]] 19:31, 6 January 2015 (UTC)&lt;br /&gt;
* What's the use case for this? Also, http-equiv on its own is useless. http-equiv is only a supplement to the data stored in headers. And headers aren't always there: what happens in the context of someone debugging a page who pastes the source into the textarea of an mf2 parser? Without a compelling use case for including headers (and then over-riding some of them with http-equivs), I'm not sure why an implementor want to do this. —[[User:TomMorris|Tom Morris]] 00:25, 8 May 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g. from https://gist.github.com/aaronpk/10297489&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Status&amp;quot; content=&amp;quot;410 GONE&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;items&amp;quot;: [],&lt;br /&gt;
 &amp;quot;rels&amp;quot;: {},&lt;br /&gt;
 &amp;quot;http&amp;quot;: {&lt;br /&gt;
 &amp;quot;status&amp;quot;: 410&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Maybe make this an optional pass in the parser? - Tom Morris [[2015-01-20]]&lt;br /&gt;
* For now, don't bother with metas until someone provides a use-case. Tom Morris&lt;br /&gt;
* Agreed on both counts. [[User:Tantek|Tantek]] 06:56, 21 January 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MIME type==&lt;br /&gt;
See [[microformats2-mime-type]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Other Interpretation Parsing Notes==&lt;br /&gt;
Note: most of these need to be written up as separate [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
Author: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
[[microformats-2|Microformats 2]] proposes a new, all encompassing syntax modification of [[microformats-2-prefixes|prefixes]] that will allow microformats to be parsed from pages by processors without prior knowledge of a vocabulary. The core components of this model are quite simple, are quite simple to implement, but there are a number of conflicts that emerge with the functionality of existing microformats parsers that need to be handled. This page documents a proposed model to separate these concerns clearly in a way that can be applied to the documentation of generic microformats parsing rules, and the documentation of individual vocabularies.&lt;br /&gt;
&lt;br /&gt;
Collection of other unresolved parsing issues in a generic model:&lt;br /&gt;
&lt;br /&gt;
This is good material for documenting as [[microformats-2-issues]], [[microformats-2-faq]], and perhaps some of the more technical details in [[microformats-2-parsing-faq]].&lt;br /&gt;
&lt;br /&gt;
* The include pattern references other elements from elsewhere in a document. A generic parser needs to track IDs and fill them in after walking the DOM. (also, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; if adopted.)&lt;br /&gt;
** The current thinking per [[microformats-2-brainstorming]] is to adopt &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; and drop the [[include-pattern]]. [[User:Tantek|Tantek]]&lt;br /&gt;
* Will &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; always map to an &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; property name?&lt;br /&gt;
** No, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; maps to one or more elements by ids, and their children. Those referenced elements may have property class names themselves, or they may contain elements that do. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] implies &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; from an hCard in a page that uses an &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt; element. This requires format knowledge, but a generic parser does not currently track the element type of a property node. Should it?&lt;br /&gt;
** It should not. element-specific handling (e.g. using &amp;quot;alt&amp;quot; from img, and &amp;quot;title&amp;quot; from abbr) is completely done at parse time. The JSON data model does not reflect which element type or attribute the value came from. Additionally, [[hAtom]] is an example where we created far too many vocabulary-specific rules, in practice they're not necessary, and only complicate the microformat for both publisher understanding and parser implementation. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that the highest level heading within an entry implies &amp;lt;code&amp;gt;entry-title&amp;lt;/code&amp;gt;. This particular optimisation might be better off dead.&lt;br /&gt;
** Agreed, this is gone in microformats 2. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that permalinks be parsed from &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, not &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
** In practice this has been one of the more problematic/error prone aspects of hAtom implementations, and it's also inconsistent with other microformats (although [[hReview]] tried to use both rel permalinks and &amp;quot;url&amp;quot;). The dependence upon [[rel-bookmark]] for permalinks is dropped in h-atom in preference to re-using &amp;quot;u-url&amp;quot; and &amp;quot;u-uid&amp;quot;. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[XFN]] is entirely built on &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; (although, has various other differences from structural microformats, as do vote-links, so perhaps are excluded from this discussion and will always be handled by dedicated parsers/queries regardless?)&lt;br /&gt;
** The best (easiest and most reliable) use of 'rel' microformats in practice is when they are orthogonal to 'class' microformats. This is true both with [[XFN]] and some newer [[existing-rel-values|rel values]] like [[rel-author]]. In addition, it was very clear at the recent [[schema.org]] workshop's syntax session that RDFa's decision to apparently arbitrarily mix use of 'rel' and 'property' attributes for specifying different types of properties (it wasn't clear to people in the room when you use which for what) has caused a high degree of confusion among publishers and thus high error-rates. Thus if anything we should learn from both the mistakes of RDFa and our own experiences with even very deliberate/specific mixing of rel microformats in class microformats, and keep them defined as separate orthogonal building blocks that work together, but don't depend on each other. [[User:Tantek|Tantek]]&lt;br /&gt;
*** Relatedly to this: &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; in hAtom. --[[User:BenWard|BenWard]] 06:50, 5 October 2011 (UTC)&lt;br /&gt;
**** Yes, and two related things here. First, despite my (and others') objection and (past) interoperable post/entry-specific treatment by Technorati and Ice Rocket, Hixie has redefined rel-tag in [[HTML5]] to mean applying to the whole page, not a single post. Second, I've explicitly added 'p-category' to the draft 'h-atom' vocabulary in [[microformats-2]]. [[User:Tantek|Tantek]] 07:12, 5 October 2011 (UTC)&lt;br /&gt;
* HTML's &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; element includes an optional &amp;lt;code&amp;gt;pubdate&amp;lt;/code&amp;gt; attribute. Simply: We should parse this as &amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;. --[[User:BenWard|BenWard]] 06:12, 10 October 2011 (UTC)&lt;br /&gt;
** *If* there is even some reasonable data on actual use of the &amp;quot;pubdate&amp;quot; attribute (I don't think there is, frankly, especially with the removal of the algorithm to produce Atom from HTML5), then we could consider parsing &amp;quot;pubdate&amp;quot; as backwards compatible option for &amp;quot;dt-published&amp;quot;. As a general rule, however, it is bad (demonstrably/experienced) design to depend on additional attributes (c.f. RDFa confusion over &amp;quot;property&amp;quot; vs. &amp;quot;rel&amp;quot;), especially for an instance where no additional attribute is necessary. I would leave this out for now until there is non-trivial (more than just test pages or folks who've written HTML5 books, ahem) use in the wild. When there is such use in the wild, it should be documented on a wiki page. We don't want to encourage more complex (additional attribute) publishing as a result of supporting it. [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
* [[value-class-pattern]]: In microformats-2, since there are no sub-properties, there will presumably no-longer be a 'value' property in any parsed model. Properties such as 'tel &amp;gt; type' in hCard are, as I recall, deprecated due to underuse anyway, so 'tel &amp;gt; value' becomes redundant. (There's also potentially some clarification around 'price &amp;gt; value' in hListing, whereby value was used in a pattern. So, what does this mean for value class parsing, with regard to value-title patterns and date separation patterns. Are we looking for a 'p-value' and 'p-value-title' classname, but treating them specially (excluding them from regular property parsing.) Or, are we giving them a special prefix (v-text, v-title? That seems confusing, but could be a concept.) I'm fine with p- for both, and just having the parser ignore them since they're special, but need clarification and naming confirmation. --[[User:BenWard|BenWard]] 09:35, 10 October 2011 (UTC)&lt;br /&gt;
** A few things:&lt;br /&gt;
*** 1. Yes, no more subproperties. 'tel' becomes just 'p-tel'. If there is demand for a structured 'tel' value, then we can use that demand (and research into publishing in practice) to brainstorm and create an 'h-tel' structured telephone number (with perhaps fields like 'type', 'extension', some indication of it being local dialing (an extra 0 in some countries) or international dialing, etc.) Or, we address the different 'tel' types as their own flat properties (again as justified by research), e.g. perhaps 'p-tel-fax', or 'p-tel-mobile'. Something for hcard-2-brainstorming.&lt;br /&gt;
*** 2. For prices, e.g. hListing, either we're going to need to encode how to parse monetary amounts including monetary symbols, or consider creating an 'h-price' structured price. Not sure what the right answer is here, again, will need to be informed by analysis of documented actual price publication practices.&lt;br /&gt;
*** 3. We should avoid introducing a new prefix 'v-' just for value-class-pattern. As we've noted elsewhere, each new prefix adds complexity and should be avoided without substantial advantage.&lt;br /&gt;
*** 4. Using 'p-value-title' is strange, as it would be an exception to 'p-' parsing, since it would get the value from the 'title' attribute whereas 'p-' properties don't normally do that (exception: abbr).&lt;br /&gt;
*** 5. Using 'p-value' is also strange, as it wouldn't generate a 'value' property in the JSON data model.&lt;br /&gt;
*** 6. Class name 'value-title' is already sufficiently prefixed - we've found or even heard of no collisions in practice.&lt;br /&gt;
*** 7. Class name 'value' can, by its simpler naming nature, be expected to potentially collide with other web designer class name usage though we have no documentation/mention thereof. We could consider a renaming, or providing of alternative, such as 'value-string', or 'value-content', etc. However, let's keep that as a backup plan to use only if/when evidence is presented that we need to.&lt;br /&gt;
** Conclusions: for now, in microformats-2, keep using 'value' and 'value-title' as defined in the [[value-class-pattern]], and add the additional (obvious) interpretation that [[value-class-pattern#Date_and_time_parsing|value class pattern: date and time parsing]] applies to all 'dt-' properties. - [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== incorporated 2015-05-28 ==&lt;br /&gt;
The following brainstorms were incorporated 2015-05-28.&lt;br /&gt;
&lt;br /&gt;
== more information for alternates ==&lt;br /&gt;
Raised 2015-04-24 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
The existing &amp;lt;code&amp;gt;alternate&amp;lt;/code&amp;gt; parsing is omitting &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; - that should be added.  The &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; would make sense to add here too.&lt;br /&gt;
&lt;br /&gt;
Use-case: labels for presenting alternates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 Makes sense. [[User:Tantek|Tantek]] 03:41, 25 April 2015 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== more information for rel-based formats ==&lt;br /&gt;
Raised 2015-04-18 by [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
&lt;br /&gt;
Related github test suite issue: https://github.com/microformats/tests/issues/16&lt;br /&gt;
&lt;br /&gt;
Several rel-based formats have additional information that is useful beyond the link itself, which is all we capture at the moment. As I am trying to update the Universal feedparser to support mf2 based I will show examples from the [https://github.com/kevinmarks/feedparser/tree/365623a9470e99246f393a8c1f49a0db567826b8/feedparser/tests/microformats testcases] there.&lt;br /&gt;
&lt;br /&gt;
The main change is to add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; entry for more information about the attributes and text of the urls pointed to by rel's in the document&lt;br /&gt;
&lt;br /&gt;
A fork of mf2py that implements these changes is at https://github.com/kevinmarks/mf2py&lt;br /&gt;
=== rel-tag ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;tag&amp;quot; href=&amp;quot;http://del.icio.us/tag/tech&amp;quot;&amp;gt;Technology&amp;lt;/a&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;tag&amp;quot;: [&amp;quot;http://del.icio.us/tag/tech&amp;quot;]}, &amp;quot;items&amp;quot;: []} &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is useful as a label. &lt;br /&gt;
&lt;br /&gt;
We add a &amp;lt;code&amp;gt;rel-urls&amp;lt;/code&amp;gt; element to the parsed output with this extra data that can be looked up from the rels, which doesn't break backward compatibility and works better with xfn (see below)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;tag&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://del.icio.us/tag/tech&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://del.icio.us/tag/tech&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;tag&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;Technology&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== xfn ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;{&amp;quot;rels&amp;quot;: {&amp;quot;coworker&amp;quot;: [&amp;quot;http://example.com/johndoe&amp;quot;]}, &amp;quot;items&amp;quot;: []}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text, which is the person's name. Suggested output using the urls object:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with multiple xfn values &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;coworker friend&amp;quot; href=&amp;quot;http://example.com/johndoe&amp;quot;&amp;gt;John Doe&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
we get this: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;coworker&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;friend&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/johndoe&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/johndoe&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;coworker&amp;quot;, &lt;br /&gt;
                &amp;quot;friend&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;John Doe&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rel-enclosure ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;a rel=&amp;quot;enclosure&amp;quot; href=&amp;quot;http://example.com/movie.mp4&amp;quot; type=&amp;quot;video/mpeg&amp;quot; title=&amp;quot;real title&amp;quot;&amp;gt;my movie&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
currently parses to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;'{&amp;quot;rels&amp;quot;: {&amp;quot;enclosure&amp;quot;: [&amp;quot;http://example.com/movie.mp4&amp;quot;]}, &amp;quot;items&amp;quot;: []}'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This loses the link text,  which is the title and the attributes which give type. Suggested output:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;rels&amp;quot;: {&lt;br /&gt;
        &amp;quot;enclosure&amp;quot;: [&lt;br /&gt;
            &amp;quot;http://example.com/movie.mp4&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;items&amp;quot;: [], &lt;br /&gt;
    &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
        &amp;quot;http://example.com/movie.mp4&amp;quot;: {&lt;br /&gt;
            &amp;quot;rels&amp;quot;: [&lt;br /&gt;
                &amp;quot;enclosure&amp;quot;&lt;br /&gt;
            ], &lt;br /&gt;
            &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot;, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;video/mpeg&amp;quot;, &lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;real title&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This generalises to other rel's too, such as [[rel-feed]] and [[rel-alternate]] that have type, lang etc attributes.&lt;br /&gt;
&lt;br /&gt;
(updated to include changes from feedback below) [[User:Kevin Marks|Kevin Marks]] 22:13, 26 April 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== attributes parsed ===&lt;br /&gt;
Attributes currently parsed are:&lt;br /&gt;
* &amp;lt;code&amp;gt;hreflang&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
* &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; for alternate and enclosure&lt;br /&gt;
&lt;br /&gt;
Attributes we may consider parsing if we have a use case are &lt;br /&gt;
* &amp;lt;code&amp;gt;sizes&amp;lt;/code&amp;gt; for icon - need use-case documentation&lt;br /&gt;
* &amp;lt;code&amp;gt;coords&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
* &amp;lt;code&amp;gt;shape&amp;lt;/code&amp;gt; for area - possibly for people tagging - no examples yet, and unnecessary as people-tagging requires using h-* microformats&lt;br /&gt;
&lt;br /&gt;
In addition there is a special attribute &amp;lt;s&amp;gt;&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; &amp;lt;/s&amp;gt;&amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; which is the text contents of the link, which is useful in rel-tag rel-enclosure and xfn, and in alternate when used for feeds. It's also clarifying for rel-me links. &lt;br /&gt;
&lt;br /&gt;
Tantek [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79057 suggests] we use &amp;lt;code&amp;gt;textContent&amp;lt;/code&amp;gt; for this instead, and make it a single string, not a list as &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is elsewhere in mf2 parsing&lt;br /&gt;
* Update: &amp;quot;text&amp;quot; is good enough, and &amp;quot;textContent&amp;quot; is ugly camelCase. [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== feedback on more rel info ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;name&amp;quot; is bad because it misleadingly conflates with use of &amp;quot;name&amp;quot; elsewhere in microformats2.&lt;br /&gt;
#* Suggested alternative: [https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent textContent] - since that's literally what is being returned there. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#** as all other mf2 keys are lowercase-with-hyphens, [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=today#c79101 Tantek suggests] 'text' as that isn't going to be an html [[User:Kevin Marks|Kevin Marks]] 07:28, 25 April 2015 (UTC)&lt;br /&gt;
# no need for array for &amp;quot;name&amp;quot;/textContent - since there is always only one at most&lt;br /&gt;
#* E.g. should be &amp;quot;textContent&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
#* Update: &amp;quot;text&amp;quot;: &amp;quot;my movie&amp;quot; [[User:Tantek|Tantek]] 04:39, 29 May 2015 (UTC)&lt;br /&gt;
# &amp;quot;urls&amp;quot; key is misleading - implies all URLs in the document, which is neither true, nor desired (takes much more parsing time and work and code)&lt;br /&gt;
#* Suggested alternative: &amp;quot;rel-urls&amp;quot;. And open to better alternatives too. [[User:Tantek|Tantek]] 02:35, 25 April 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-brainstorming]]&lt;br /&gt;
* [[microformats2-prefixes]]&lt;br /&gt;
* [[microformats2-faq]]&lt;br /&gt;
* [[microformats2-issues]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2&amp;diff=64966</id>
		<title>microformats2</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2&amp;diff=64966"/>
		<updated>2015-05-17T03:35:25Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Parsers */ alpha sort&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats 2&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
Welcome to the microformats2 home page.&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Microformats2 is the simplest way to markup structured information in HTML. Microformats2 improves ease of use and implementation for &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; authors (publishers) and developers ([[microformats2-parsing|parser]] implementers).&lt;br /&gt;
&lt;br /&gt;
Microformats2 replaces and supersedes both classic microformats, as well as [[microdata]], and [[RDFa]].&lt;br /&gt;
&lt;br /&gt;
=== simple microformats 2 examples ===&lt;br /&gt;
Here are a few simple microformats2 examples along with canonical [[JSON]].&lt;br /&gt;
&lt;br /&gt;
==== person example ====&lt;br /&gt;
* Simple person reference:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card&amp;quot;&amp;gt;Frances Berriman&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Frances Berriman&amp;quot;] &lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== hyperlinked person ====&lt;br /&gt;
* Simple hyperlinked person reference&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://benward.me&amp;quot;&amp;gt;Ben Ward&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Ben Ward&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://benward.me&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== hyperlinked person image ====&lt;br /&gt;
* Simple hyperlinked person image&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://rohit.khare.org/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;img alt=&amp;quot;Rohit Khare&amp;quot;&lt;br /&gt;
      src=&amp;quot;https://s3.amazonaws.com/twitter_production/profile_images/53307499/180px-Rohit-sq_bigger.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Rohit Khare&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://rohit.khare.org&amp;quot;],&lt;br /&gt;
      &amp;quot;photo&amp;quot;: [&amp;quot;https://s3.amazonaws.com/twitter_production/profile_images/53307499/180px-Rohit-sq_bigger.jpg&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional simple cases details in [[microformats-2-implied-properties]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== detailed person example ====&lt;br /&gt;
* More detailed person&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img class=&amp;quot;u-photo&amp;quot; alt=&amp;quot;photo of Mitchell&amp;quot;&lt;br /&gt;
       src=&amp;quot;https://webfwd.org/content/about-experts/300.mitchellbaker/mentor_mbaker.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt;&lt;br /&gt;
 (&amp;lt;a class=&amp;quot;u-url&amp;quot; &lt;br /&gt;
     href=&amp;quot;https://twitter.com/MitchellBaker&amp;quot;&lt;br /&gt;
    &amp;gt;@MitchellBaker&amp;lt;/a&amp;gt;)&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-org&amp;quot;&amp;gt;Mozilla Foundation&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;p-note&amp;quot;&amp;gt;&lt;br /&gt;
    Mitchell is responsible for setting the direction and scope of the Mozilla Foundation and its activities.&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-category&amp;quot;&amp;gt;Strategy&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-category&amp;quot;&amp;gt;Leadership&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;photo&amp;quot;: [&amp;quot;https://webfwd.org/content/about-experts/300.mitchellbaker/mentor_mbaker.jpg&amp;quot;],&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&lt;br /&gt;
        &amp;quot;http://blog.lizardwrangler.com/&amp;quot;,&lt;br /&gt;
        &amp;quot;https://twitter.com/MitchellBaker&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
      &amp;quot;note&amp;quot;: [&amp;quot;Mitchell is responsible for setting the direction and scope of the Mozilla Foundation and its activities.&amp;quot;],&lt;br /&gt;
      &amp;quot;category&amp;quot;: [&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;,&lt;br /&gt;
        &amp;quot;Leadership&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Notes: &lt;br /&gt;
# The JSON &amp;lt;code&amp;gt;&amp;quot;type&amp;quot;&amp;lt;/code&amp;gt; uses the full microformat root class name (e.g. &amp;lt;code&amp;gt;&amp;quot;h-card&amp;quot;&amp;lt;/code&amp;gt;) for consistent identification.&lt;br /&gt;
# all properties are optional and syntactically plural with parsed values provided in document order; particular microformats (and applications there-of) may apply specific/singular semantics to first value of a property.&lt;br /&gt;
&lt;br /&gt;
=== microformats2 design ===&lt;br /&gt;
microformats2 has the following key design aspects:&lt;br /&gt;
# '''Prefixes for class names.'''  Class names used for microformats use prefixes that start with with &amp;lt;code&amp;gt;'h-' 'p-' 'u-' 'dt-', 'e-'&amp;lt;/code&amp;gt;. These are '''syntax independent from vocabularies''', which can then be developed separately.&lt;br /&gt;
#* 'h-*' for root class names, e.g. 'h-card'&lt;br /&gt;
#* 'p-*' for simple (text) properties, e.g. 'p-name'&lt;br /&gt;
#* 'u-*' for URL properties, e.g. 'u-photo'&lt;br /&gt;
#* 'dt-*' for date/time properties, e.g. 'dt-bday'&lt;br /&gt;
#* 'e-*' for embedded markup properties, e.g. 'e-note'. See [[microformats2#naming_conventions_for_generic_parsing|prefix naming conventions]] for more details.&lt;br /&gt;
# '''Flat sets of optional properties.''' All microformats consist of a root, and a collection of properties. Hierarchical data is represented with nested microformats, typically as property values themselves. Properties are all optional and potentially multivalued (applications needing a singular semantic may use first instance).&lt;br /&gt;
# '''Single class markup for common uses.''' Common simple markup patterns require only a single microformat root class name, which parsers use to find a few generic properties: &amp;lt;code&amp;gt;name, url, photo&amp;lt;/code&amp;gt;. The simple microformats2 examples above demonstrate these.&lt;br /&gt;
&lt;br /&gt;
Parsing details for each of these (including how to generate canonical JSON) are specified step-by-step in the:&lt;br /&gt;
* '''[[microformats2-parsing|microformats2 parsing specification]]'''&lt;br /&gt;
&lt;br /&gt;
== v2 vocabularies ==&lt;br /&gt;
Status: '''&amp;lt;span id=&amp;quot;draft_v2_vocabularies&amp;quot;&amp;gt;draft&amp;lt;/span&amp;gt;'''. Please review and provide feedback in [[IRC]].&lt;br /&gt;
* [[h-adr]]&lt;br /&gt;
* [[h-card]]&lt;br /&gt;
* [[h-entry]]&lt;br /&gt;
* [[h-event]]&lt;br /&gt;
* [[h-feed]]&lt;br /&gt;
* [[h-geo]]&lt;br /&gt;
* [[h-item]]&lt;br /&gt;
* [[h-listing]]&lt;br /&gt;
* [[h-product]]&lt;br /&gt;
* [[h-recipe]]&lt;br /&gt;
* [[h-resume]]&lt;br /&gt;
* [[h-review]]&lt;br /&gt;
* [[h-review-aggregate]]&lt;br /&gt;
&lt;br /&gt;
See below for vocabulary summaries.&lt;br /&gt;
&lt;br /&gt;
=== h-adr ===&lt;br /&gt;
{{main|h-adr}}&lt;br /&gt;
&lt;br /&gt;
The '''h-adr''' microformat is for marking up structured locations such as addresses, physical and/or postal. This is an update to [[adr]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-adr&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-adr&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-post-office-box&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-extended-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-street-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-locality&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-region&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-postal-code&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-country-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-label&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;''' (or '''&amp;lt;code&amp;gt;u-geo&amp;lt;/code&amp;gt;''' with a RFC 5870 geo: URL) - new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-altitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-adr&amp;quot; is found, don't look for an &amp;quot;adr&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;adr&amp;quot;&amp;gt;adr&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;post-office-box&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extended-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;street-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;locality&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;region&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;postal-code&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;country-name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== h-card ===&lt;br /&gt;
{{main|h-card}}&lt;br /&gt;
&lt;br /&gt;
The '''h-card''' microformat is for marking up people and organizations. This is an update to [[hCard]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-card&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-honorific-prefix&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-given-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-additional-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-family-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-sort-string&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-honorific-suffix&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-nickname&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-email&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-uid&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-adr&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-post-office-box&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-extended-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-street-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-locality&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-region&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-postal-code&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-country-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-label&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;''' or '''&amp;lt;code&amp;gt;u-geo&amp;lt;/code&amp;gt;''' with a RFC 5870 geo: URL, new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-altitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-tel&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-note&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-bday&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-key&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-org&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-job-title&amp;lt;/code&amp;gt;''' - previously 'title' in hCard, disambiguated.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-role&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-impp&amp;lt;/code&amp;gt;''' per RFC 4770, new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-sex&amp;lt;/code&amp;gt;''' new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-gender-identity&amp;lt;/code&amp;gt;''' new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-anniversary&amp;lt;/code&amp;gt;''' new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Reserved properties: (properties not used much (if at all) in practice)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-organization-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-organization-unit&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-tz&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-rev&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-card&amp;quot; is found, don't look for a &amp;quot;vcard&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;vcard&amp;quot;&amp;gt;vcard&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;honorific-prefix&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;given-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;additional-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;family-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;honorific-suffix&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nickname&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;email&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;logo&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;uid&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-adr h-adr&amp;lt;/code&amp;gt;''' including compat root class &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extended-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;street-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;locality&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;region&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;postal-code&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;country-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-geo h-geo&amp;lt;/code&amp;gt;''' including compat root class &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;note&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bday&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;organization-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;organization-unit&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; - parse as '''p-job-title'''&lt;br /&gt;
* &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Reserved: (backward compat properties that parsers {{may}} implement, if they do, they {{must}} implement in this way:&lt;br /&gt;
* &amp;lt;code&amp;gt;tz&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;rev&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Note: use of 'value' within 'tel' should be automatically handled by the support of the [[value-class-pattern]]. And for now, the 'type' subproperty of 'tel' is dropped/ignored. If there is demonstrable documented need for additional tel types (e.g. fax), we can introduce new flat properties as needed (e.g. p-tel-fax).&lt;br /&gt;
&lt;br /&gt;
=== h-entry ===&lt;br /&gt;
{{main|h-entry}}&lt;br /&gt;
&lt;br /&gt;
The '''h-entry''' microformat is for marking up syndicatable content such as blog posts, notes, articles, comments, photos and similar. This is an update to [[hAtom]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-entry&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' (was p-entry-title, see issues)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;''' (was p-entry-summary, see issues)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-content&amp;lt;/code&amp;gt;''' (was e-entry-content, see issues)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-updated&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-uid&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
This is an update to [[hAtom]]. &lt;br /&gt;
&lt;br /&gt;
Brainstorming:&lt;br /&gt;
&lt;br /&gt;
The following properties are proposed additions to h-entry above and beyond what hAtom (or Atom) provides, based on various existing link preview markup conventions:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-audio&amp;lt;/code&amp;gt;''' - consider special u- parsing rules for &amp;lt;code&amp;gt;&amp;amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-video&amp;lt;/code&amp;gt;''' - consider special u- parsing rules for &amp;lt;code&amp;gt;&amp;amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-in-reply-to&amp;lt;/code&amp;gt;''' - for links to other posts that this post is a reply to (comment regarding, etc.)&lt;br /&gt;
&lt;br /&gt;
Backward compatibility: &lt;br /&gt;
&lt;br /&gt;
(*)hAtom-specific implementations that perform custom display or translation (e.g. to Atom XML) {{should}} prefer &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt; over &amp;lt;code&amp;gt;p-entry-title&amp;lt;/code&amp;gt;, and use &amp;lt;code&amp;gt;p-entry-title&amp;lt;/code&amp;gt; value(s) as a fallback if there is no &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For hAtom backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-entry&amp;quot; is found, don't look for a &amp;quot;hentry&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hentry&amp;quot;&amp;gt;hentry&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;entry-title&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;entry-summary&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;entry-content&amp;lt;/code&amp;gt; - parse as '''e-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;published&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;updated&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-geo h-geo&amp;lt;/code&amp;gt;''' including compat root &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;h-entry-faq&amp;quot;&amp;gt;FAQ:&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* '''What is the &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt; of a [http://indiewebcamp.com/note note]?'''&lt;br /&gt;
** A few options, from simplest to most detailed.&lt;br /&gt;
*** '''same as the p-content/e-content''' property.&lt;br /&gt;
*** '''same as the &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; element''' on the note permalink post page. When publishing a note on its own permalink post page, the contents of the note are likely abbreviated for the title of the page. The same abbreviation can be used for the p-name.&lt;br /&gt;
*** '''first sentence of the p-content/e-content''' property. It may be better for [http://indiewebcamp.com/syndication syndication] and [[link-preview]] purposes to provide just the first sentence of the note as the &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. Similarly if only a portion of the content is syndicated to other sites, that portion can be marked up as the &amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resolved Issues:&lt;br /&gt;
* 2012-245 Resolved. See [http://krijnhoetmer.nl/irc-logs/microformats/20120830#l-120 2012-243 IRC discussion/consensus] for:&lt;br /&gt;
** Use '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;p-entry-summary&amp;lt;/code&amp;gt;'''. The historical semantic of &amp;quot;entry-summary&amp;quot; is not different from &amp;quot;summary&amp;quot; in any significant (or discernible way). Collapsing the two will simplify the overall microformats2 vocabularies further. In microformats2, entry-summary is no more.&lt;br /&gt;
** Use '''&amp;lt;code&amp;gt;e-content&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;e-entry-content&amp;lt;/code&amp;gt;'''. Same point and advantage. In microformats2, entry-content is no more.&lt;br /&gt;
** '''drop &amp;lt;code&amp;gt;p-entry-title&amp;lt;/code&amp;gt;'''. Unnecessary and subsumed by &amp;quot;p-name&amp;quot;. Would consider move to backward compat only if cases are presented - known publishing uses are expected to be updated shortly.&lt;br /&gt;
&lt;br /&gt;
=== h-event ===&lt;br /&gt;
{{main|h-event}}&lt;br /&gt;
&lt;br /&gt;
The '''h-event''' microformat is for marking up events. This is an update to [[hCalendar]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-event&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;'''(*)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-start&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-end&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-duration&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-description&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-location&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
This is an update to [[hCalendar]]. &lt;br /&gt;
&lt;br /&gt;
(*)hCalendar-specific implementations that perform custom display or translation (e.g. to iCalendar .ics) {{should}} prefer &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt; over &amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;, and use &amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt; value(s) as a fallback if there is no &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-event&amp;quot; is found, don't look for a &amp;quot;vevent&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;vevent&amp;quot;&amp;gt;vevent&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;dtstart&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;dt-start&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;dtend&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;dt-end&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;dt-duration&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;location&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;, and compat root &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-adr&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-geo h-geo&amp;lt;/code&amp;gt;''' including compat root &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== h-geo ===&lt;br /&gt;
{{main|h-geo}}&lt;br /&gt;
&lt;br /&gt;
The '''h-geo''' microformat is for marking up WGS84 geophysical coordinates. This is an update to [[geo]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-geo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-altitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-geo&amp;quot; is found, don't look for an &amp;quot;geo&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;geo&amp;quot;&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== h-item ===&lt;br /&gt;
{{main|h-item}}&lt;br /&gt;
&lt;br /&gt;
The '''h-item''' microformat is for marking up the item of an [[h-review]] or [[h-product]]. This is an update to part of [[hReview]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-item&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-item&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Note: in practice, due to the microformats2 implied property rules, it is expected that most uses of &amp;quot;h-item&amp;quot; won't require any explicit properties at all (since microformats2 parsers will infer name, photo, and url properties from the structure of the element with &amp;quot;h-item&amp;quot; and its contained content/elements if any).&lt;br /&gt;
&lt;br /&gt;
=== h-product ===&lt;br /&gt;
{{main|h-product}}&lt;br /&gt;
&lt;br /&gt;
The '''h-product''' microformat is for marking up products. This is an update to [[hProduct]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-product&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-product&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - name of the product&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;''' - photo of the product&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-brand&amp;lt;/code&amp;gt;''' - manufacturer, can also be a nested &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - freeform categories or tags applied to the item by the reviewer &lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-description&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - URL of the product&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-identifier&amp;lt;/code&amp;gt;''' - includes type (e.g. mpn, upc, isbn, issn, sn, vin, sku etc.) and value.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-review&amp;lt;/code&amp;gt;''' - a review of the product, can also be a nested &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-price&amp;lt;/code&amp;gt;''' - retail price of the product&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-product&amp;quot; is found, don't look for an &amp;quot;hproduct&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hproduct&amp;quot;&amp;gt;hproduct&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt;  - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;brand&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;identifier&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; - including compat root class &amp;lt;code&amp;gt;hreview&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: [[hProduct]] has at least one experimental property which has real world adoption due to [[Google]] and [[Bing]] search support of hProduct. Currently this is: '''price'''&lt;br /&gt;
&lt;br /&gt;
=== h-recipe ===&lt;br /&gt;
{{main|h-recipe}}&lt;br /&gt;
&lt;br /&gt;
The '''h-recipe''' microformat is for marking up food recipes. This is an update to [[hRecipe]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-recipe&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - the name of the recipe&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-ingredient&amp;lt;/code&amp;gt;''' - describes one or more ingredients used in the recipe.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-yield&amp;lt;/code&amp;gt;''' - Specifies the quantity produced by the recipe, like how many persons it satisfyies &lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-instructions&amp;lt;/code&amp;gt;''' - the method of the recipe.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-duration&amp;lt;/code&amp;gt;''' - the time it takes to prepare the meal described by the recipe.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;''' - an accompanying image&lt;br /&gt;
&lt;br /&gt;
Experimental properties with wide adoption&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;'''  - provides a short summary or introduction &lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt;''' - the person who wrote the recipe with &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;''' - the date the recipe was published&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-nutrition&amp;lt;/code&amp;gt;''' - nutritional information like calories, fat, dietary fiber etc.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-recipe&amp;quot; is found, don't look for an &amp;quot;hrecipe&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hrecipe&amp;quot;&amp;gt;hrecipe&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;instructions&amp;lt;/code&amp;gt; - parse as '''e-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt;  - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nutrition&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: [[hRecipe]] has a number of experimental properties which have real world adoption due to [[Google]] recipe search support of hRecipe. These are: summary, author, published and nutrition&lt;br /&gt;
&lt;br /&gt;
=== h-resume ===&lt;br /&gt;
{{main|h-resume}}&lt;br /&gt;
&lt;br /&gt;
The '''h-resume''' microformat is for marking up resumes. This is an update to [[hResume]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-resume&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-resume&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;''' - overview of qualifications and objectives&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-contact&amp;lt;/code&amp;gt;''' - current contact info in an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-education&amp;lt;/code&amp;gt;''' - an education &amp;lt;code&amp;gt;h-calendar&amp;lt;/code&amp;gt; event, years, nested &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; of the school, location.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-experience&amp;lt;/code&amp;gt;''' - a job or other professional experience &amp;lt;code&amp;gt;h-calendar&amp;lt;/code&amp;gt; event, years, nested &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; of the organization, location, job-title.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-skill&amp;lt;/code&amp;gt;''' - a skill or ability, optionally including level and/or duration of experience&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-affiliation&amp;lt;/code&amp;gt;''' - an affiliation with an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; organization&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-resume&amp;quot; is found, don't look for an &amp;quot;hresume&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hresume&amp;quot;&amp;gt;hresume&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;contact&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;education&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vevent&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;experience&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vevent&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;skill&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;affiliation&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: skill has a [[hresume-skill-brainstorm|proposed expansion into competency]] with explicit summary, rating and/or duration components. Based on existing real world adoption, we should consider an h-competency vocabulary with p-summary, p-rating, and dt-duration properties.&lt;br /&gt;
&lt;br /&gt;
=== h-review ===&lt;br /&gt;
{{main|h-review}}&lt;br /&gt;
&lt;br /&gt;
The '''h-review''' microformat is for marking up reviews. This is an update to [[hReview]]. See also [[h-item]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-review&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - name of the review&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-item&amp;lt;/code&amp;gt;''' - thing been reviewed i.e. business or person (h-card), event (h-event), place (h-adr or h-geo), product (h-product), website, url, or other item ([[h-item]]).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-reviewer&amp;lt;/code&amp;gt;''' - person who authored the review &lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-reviewed&amp;lt;/code&amp;gt;''' - date time of when the review was written&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-rating&amp;lt;/code&amp;gt;''' - value from 1-5 indicating a rating for the item (5 best).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-best&amp;lt;/code&amp;gt;'''  - define best rating value. can be numerically lower than worst.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-worst&amp;lt;/code&amp;gt;'''  - define worst rating value. can be numerically higher than best. &lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-description&amp;lt;/code&amp;gt;''' - the full text written evaluation and opinion of the reviewer&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - freeform categories or tags applied to the item by the reviewer &lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - URL of the review&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-review&amp;quot; is found, don't look for an &amp;quot;hreview&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hreview&amp;quot;&amp;gt;hreview&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt; parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''p-name''' of the item being reviewed (p-item h-item p-name)&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt; - parse as '''u-photo''' of the item being reviewed (p-item h-item u-photo)&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-url''' of the item being reviewed (p-item h-item u-url)&lt;br /&gt;
* &amp;lt;code&amp;gt;reviewer&amp;lt;/code&amp;gt;  - including compat root vcard in the absence of h-card&lt;br /&gt;
* &amp;lt;code&amp;gt;dtreviewed&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rating&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;worst&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt; - parse as '''e-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;tag&amp;quot;&amp;lt;/code&amp;gt; - parse as '''p-category'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;self bookmark&amp;quot;&amp;lt;/code&amp;gt; - parse as '''u-url'''. note that &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute value is treated as a space separated set, thus any presence of &amp;quot;self&amp;quot; and &amp;quot;bookmark&amp;quot; within such a set in a rel value is accepted.&lt;br /&gt;
&lt;br /&gt;
Note: The [[hReview]] format has three properties which make use of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute, these are &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;, permalink (via the &amp;lt;code&amp;gt;self&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt; values) and &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;. Microformats 2 parsers {{should}} map these URLs into the page scoped rel collection.&lt;br /&gt;
&lt;br /&gt;
=== h-review-aggregate ===&lt;br /&gt;
{{main|h-review-aggregate}}&lt;br /&gt;
&lt;br /&gt;
The '''h-review-aggregate''' microformat is for marking up aggregate reviews of a single item. This is an update to [[hreview-aggregate]]. See also [[h-item]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-review-aggregate&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-review-aggregate&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - name of the review&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-item&amp;lt;/code&amp;gt;''' - thing been reviewed i.e. business or person (h-card), event (h-event), place (h-adr or h-geo), product (h-product), website, url, or other item (h-item).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-rating&amp;lt;/code&amp;gt;''' - value from 1-5 indicating average rating for the item (5 best).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-best&amp;lt;/code&amp;gt;'''  - define best rating value. can be numerically lower than worst.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-worst&amp;lt;/code&amp;gt;'''  - define worst rating value. can be numerically higher than best. &lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-count&amp;lt;/code&amp;gt;'''  - number of reviews aggregated.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-votes&amp;lt;/code&amp;gt;'''  - number of reviewers who have rated the product, thus contributing to the average rating.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - freeform categories or tags applied to the item by the reviewer&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - URL of the review&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-review-aggregate&amp;quot; is found, don't look for an &amp;quot;hreview-aggregate&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hreview-aggregate&amp;quot;&amp;gt;hreview-aggregate&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt; parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''p-name''' of the item being reviewed (p-item h-item p-name)&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt; - parse as '''u-photo''' of the item being reviewed (p-item h-item u-photo)&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-url''' of the item being reviewed (p-item h-item u-url)&lt;br /&gt;
* &amp;lt;code&amp;gt;rating&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;worst&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;votes&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;tag&amp;quot;&amp;lt;/code&amp;gt; - parse as '''p-category'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;self bookmark&amp;quot;&amp;lt;/code&amp;gt; - parse as '''u-url'''. note that &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute value is treated as a space separated set, thus any presence of &amp;quot;self&amp;quot; and &amp;quot;bookmark&amp;quot; within such a set in a rel value is accepted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== v2 vocab notes ===&lt;br /&gt;
Notes: &lt;br /&gt;
* All v2 vocabularies are defined as flat lists of properties of an object/item, and thus can be used in microformats-2 syntax as shown, or in microdata items, or RDFa. The microformats-2 property parsing prefixes &amp;quot;p-&amp;quot;, &amp;quot;u-&amp;quot;, &amp;quot;dt-&amp;quot;, &amp;quot;e-&amp;quot; are omitted when using defined properties in microdata itemprop and RDFa property as those syntaxes have their own element-specific parsing rules.&lt;br /&gt;
* Profile URLs are provided for use with the HTML4 &amp;lt;code&amp;gt;profile&amp;lt;/code&amp;gt; attribute, microdata &amp;lt;code&amp;gt;itemtype&amp;lt;/code&amp;gt; attribute, and RDFa &amp;lt;code&amp;gt;vocab&amp;lt;/code&amp;gt; &amp;amp;amp; &amp;lt;code&amp;gt;typeof&amp;lt;/code&amp;gt; attributes (though the latter requires slicing off the trailing segment of the profile for the typeof attribute, and leaving the rest in vocab). &lt;br /&gt;
* microformats 2 properties may also be explicitly bound as URIs using [[rel-profile]], the [[html5-profile]] attribute proposal, or an HTML5 'vocab' attribute instead. If URI bound terms are important to you, please express interest on [[rel-profile]], [[html5-profile]], or contribute to an [[html5-vocab]] draft.&lt;br /&gt;
&lt;br /&gt;
=== v2 vocab to-do ===&lt;br /&gt;
To do: &lt;br /&gt;
* write a simple tutorial for creating/getting started with microformats-2 markup for new content&lt;br /&gt;
* examples in each h-* spec listed above of how to embed other microformats in them&lt;br /&gt;
* actual profile documents at &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-*&amp;lt;/nowiki&amp;gt; URLs mentioned above.&lt;br /&gt;
* Provide any necessary microdata-specific language as needed (e.g. to be comparably understandable to the [http://www.whatwg.org/specs/web-apps/current-work/#vcard sample vCard4/hCard1 microdata vocabulary]. Also provide any necessary RDFa-specific language as needed. Both preferably in a generic vocabulary-independent way.&lt;br /&gt;
* write a porting guide mapping v1 property -&amp;gt; v2 property&lt;br /&gt;
** use-case: simple search/replace in templates (e.g. in case web author doesn't remember existing microformats vocabs and where they used them).&lt;br /&gt;
** advise using *both* in existing templates (e.g. in case some CSS depends on the existing microformats)&lt;br /&gt;
* analyzie/document how well the microformats2 model and vocabularies satisfy the [http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-May/019681.html use-cases used to design/create microdata].&lt;br /&gt;
&lt;br /&gt;
== combining microformats ==&lt;br /&gt;
Since microformats 2 uses simple flat sets of properties for each microformat, multiple microformats are combined to indicate additional structure.&lt;br /&gt;
&lt;br /&gt;
=== h-event location h-card ===&lt;br /&gt;
Events commonly have venue information with additional structure, like address information. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-event&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot; href=&amp;quot;http://indiewebcamp.com/2012&amp;quot;&amp;gt;&lt;br /&gt;
    IndieWebCamp 2012&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
  from &amp;lt;time class=&amp;quot;dt-start&amp;quot;&amp;gt;2012-06-30&amp;lt;/time&amp;gt; &lt;br /&gt;
  to &amp;lt;time class=&amp;quot;dt-end&amp;quot;&amp;gt;2012-07-01&amp;lt;/time&amp;gt; at &lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-location h-card&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-name p-org u-url&amp;quot; href=&amp;quot;http://geoloqi.com/&amp;quot;&amp;gt;&lt;br /&gt;
      Geoloqi&lt;br /&gt;
    &amp;lt;/a&amp;gt;, &lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;920 SW 3rd Ave. Suite 400&amp;lt;/span&amp;gt;, &lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;Portland&amp;lt;/span&amp;gt;, &lt;br /&gt;
    &amp;lt;abbr class=&amp;quot;p-region&amp;quot; title=&amp;quot;Oregon&amp;quot;&amp;gt;OR&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nested h-card used to structure the p-location of the h-event is represented as a structured value for &amp;quot;location&amp;quot; in the JSON, which has an additional key, &amp;quot;value&amp;quot; that represents the plain text version parsed from the p-location.&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;IndieWebCamp 2012&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://indiewebcamp.com/2012&amp;quot;],&lt;br /&gt;
      &amp;quot;start&amp;quot;: [&amp;quot;2012-06-30&amp;quot;],&lt;br /&gt;
      &amp;quot;end&amp;quot;: [&amp;quot;2012-07-01&amp;quot;],&lt;br /&gt;
      &amp;quot;location&amp;quot;: [{&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Geoloqi, 920 SW 3rd Ave. Suite 400, Portland, OR&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;name&amp;quot;: [&amp;quot;Geoloqi&amp;quot;],&lt;br /&gt;
          &amp;quot;org&amp;quot;: [&amp;quot;Geoloqi&amp;quot;],&lt;br /&gt;
          &amp;quot;url&amp;quot;: [&amp;quot;http://geoloqi.com/&amp;quot;],&lt;br /&gt;
          &amp;quot;street-address&amp;quot;: [&amp;quot;920 SW 3rd Ave. Suite 400&amp;quot;],&lt;br /&gt;
          &amp;quot;locality&amp;quot;: [&amp;quot;Portland&amp;quot;],&lt;br /&gt;
          &amp;quot;region&amp;quot;: [&amp;quot;Oregon&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
      }]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questions:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should the nested hCard be present also as a top-level item in the JSON? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
** My current (2012-243) leaning is no. - [[User:Tantek|Tantek]] 18:53, 30 August 2012 (UTC)&lt;br /&gt;
** If so, how do we avoid expansion of the JSON geometrically proportional to the depth of microformat nesting? (Or do we not worry about it?)&lt;br /&gt;
* Should there be a canonical hierarchical JSON and a canonical flattened JSON? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
** My current (2012-243) leaning is no, we stick with one canonical JSON for uf2 which is hierarchical. - [[User:Tantek|Tantek]] 18:53, 30 August 2012 (UTC)&lt;br /&gt;
** If so, should the flattened JSON have references from properties to nested microformats that have been pushed to the top level per flattening? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
*** If so, what convention does/do JSON follow for such synthetic local reference identifiers? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* The 'location' value reflects the visible text of its element, including spaces and punctuation, as well as the state abbreviation 'OR'. The 'h-card' property values are only what is marked up, and thus include structure values without extra punctuation, and the state takes the expanded form from the &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; attribute of its &amp;lt;code&amp;gt;&amp;amp;lt;abbr&amp;amp;gt;&amp;lt;/code&amp;gt; element.&lt;br /&gt;
&lt;br /&gt;
=== h-card org h-card ===&lt;br /&gt;
People often publish information general to their company rather than specific to them, in which case, they may wish to encapsulate that in separately nested microformat. E.g. here is a simple h-card example with org property:&lt;br /&gt;
&lt;br /&gt;
[http://blog.lizardwrangler.com Mitchell Baker] (Mozilla Foundation)&lt;br /&gt;
&lt;br /&gt;
with source:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;span class=&amp;quot;p-org&amp;quot;&amp;gt;Mozilla Foundation&amp;lt;/span&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes such organization affiliations are hyperlinked to the website of the organization:&lt;br /&gt;
&lt;br /&gt;
[http://blog.lizardwrangler.com Mitchell Baker] ([http://mozilla.org/ Mozilla Foundation])&lt;br /&gt;
&lt;br /&gt;
You can mark that up with a nested h-card:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;p-org h-card&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [{&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Mozilla Foundation&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
          &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
      }]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: the nested h-card has implied 'name' and 'url' properties, just like any other root-class-name-only h-card on an &amp;lt;code&amp;gt;&amp;amp;lt;a href&amp;amp;gt;&amp;lt;/code&amp;gt; would.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FOR PARSERS ONLY:'''&lt;br /&gt;
&lt;br /&gt;
The nested 'h-card' could be marked up as an 'h-org' as well, which adds it to the nested microformat's type array, all as part of the property specified by the 'p-org'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;p-org h-card h-org&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [{&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Mozilla Foundation&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;, &amp;quot;h-org&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
          &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
      }]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FOR PARSERS ONLY:'''&lt;br /&gt;
&lt;br /&gt;
Without a property class name like 'p-org' holding all the nested objects together, we need to introduce another array for nested children (similar to the existing DOM element notion of children) of a microformat that are not attached to a specific property:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;h-org h-card&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;children&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;,&amp;quot;h-org&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
      }  &lt;br /&gt;
    }]&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since there's no property class name on the element with classes 'h-card' and 'h-org', the microformat representing that element is collected into the children array.&lt;br /&gt;
&lt;br /&gt;
Such a nested microformat implies some relationship (containment, being related), but is not as useful as if the nested microformat was a specific property of its parent.&lt;br /&gt;
&lt;br /&gt;
For this reason it's recommended that authors should not publish nested microformats without a  property class name, and instead, when nesting microformats, authors should always specify a property class name (like 'p-org') on the same element as the root class name(s) of the nested microformat(s) (like 'h-card' and/or 'h-org').&lt;br /&gt;
&lt;br /&gt;
'''FOR PARSERS ONLY:'''&lt;br /&gt;
&lt;br /&gt;
Or the nested object could be only marked up with 'h-card'. Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;h-card&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;children&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
      }  &lt;br /&gt;
    }]&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TO DO: Add h-event h-card example and JSON, per real world publishing examples like [http://www.swingtime.co.uk/List/ClSouth.html Swing Time: Classes in Southern England].'''&lt;br /&gt;
&lt;br /&gt;
== authoring ==&lt;br /&gt;
=== minimal markup ===&lt;br /&gt;
The best way to use microformats-2 is with as little additional markup as possible. This keeps your code cleaner, improves its maintainability, and thus the quality and longevity of your microformats.&lt;br /&gt;
&lt;br /&gt;
One big advantage of microformats-2 over previous microformats (and others) is the ability to add one class name to an existing element to create a structured item.&lt;br /&gt;
&lt;br /&gt;
See the [[microformats-2#simple_microformats_2_examples|simple examples at the top]] for a start, e.g.&lt;br /&gt;
&lt;br /&gt;
Simple hCards work just by adding &amp;lt;code&amp;gt;class=&amp;quot;h-card&amp;quot;&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card&amp;quot;&amp;gt;Frances Berriman&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://benward.me&amp;quot;&amp;gt;Ben Ward&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img class=&amp;quot;h-card&amp;quot; alt=&amp;quot;Sally Ride&amp;quot; &lt;br /&gt;
     src=&amp;quot;http://upload.wikimedia.org/wikipedia/commons/a/a4/Ride-s.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://tantek.com&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;img alt=&amp;quot;Tantek Çelik&amp;quot; src=&amp;quot;http://ttk.me/logo.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Tip: Inside an open tag, put the &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; attribute &amp;lt;em&amp;gt;first&amp;lt;/em&amp;gt;, then any human text content attributes (e.g. &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt;), then URL attributes (e.g. &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt;), and lastly other attributes (e.g. &amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt;). Putting the class attribute first ties it closely to the element name/tag itself, makes it more obvious, and thus more likely to be kept up to date.&lt;br /&gt;
&lt;br /&gt;
=== backward compatible ===&lt;br /&gt;
If you depend on current microformats [[implementations]], while they're being updated to support [[microformats-2]], you can include both existing microformats and microformats-2 markup.&lt;br /&gt;
&lt;br /&gt;
In short: use both sets of class names simultaneously. &lt;br /&gt;
&lt;br /&gt;
When doing so, use them on the same element, with the microformats-2 class name first, followed immediately by the existing microformats class name.&lt;br /&gt;
&lt;br /&gt;
Here are the microformats-2 hCards from above with current [[hCard]] markup as well, which may require adding a wrapping element (e.g. a &amp;lt;code&amp;gt;&amp;amp;lt;span&amp;amp;gt;&amp;lt;/code&amp;gt;) to separate the root class name element from explicit property class name elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-name fn&amp;quot;&amp;gt;Frances Berriman&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name fn u-url url&amp;quot; href=&amp;quot;http://benward.me&amp;quot;&amp;gt;Ben Ward&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img class=&amp;quot;p-name fn u-photo photo&amp;quot; alt=&amp;quot;Sally Ride&amp;quot; &lt;br /&gt;
       src=&amp;quot;http://upload.wikimedia.org/wikipedia/commons/a/a4/Ride-s.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-url url&amp;quot; href=&amp;quot;http://tantek.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img class=&amp;quot;p-name fn u-photo photo&amp;quot; alt=&amp;quot;Tantek Çelik&amp;quot; &lt;br /&gt;
         src=&amp;quot;http://ttk.me/logo.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tips:&lt;br /&gt;
* use the microformats-2 class name first, e.g.&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;h-card vcard&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;u-url url&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* and pair them when using an element for multiple properties, e.g.:&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;p-name fn u-url url&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;p-name fn u-photo photo&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* put microformats classes after classes for CSS (since page authors will likely interact more with their own classes for design than with microformats classes), e.g. as used on individual microformats [[events]] pages:&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;event-page h-event vevent&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The prefixes (h-, p-, etc.) of microformats2 class names provide easier recognition, and when followed by the similarly named existing class name, they're more easily recognized as related and thus kept together when the markup is maintained over time.&lt;br /&gt;
&lt;br /&gt;
Related FAQ: [[microformats2-faq#when_using_both_h-card_and_vcard_which_should_be_first_and_why|When using both h-card and vcard which should be first and why?]]&lt;br /&gt;
&lt;br /&gt;
== validators ==&lt;br /&gt;
microformats2 validators:&lt;br /&gt;
&lt;br /&gt;
{{new}} Test your microformatted web page with: &lt;br /&gt;
* https://pin13.net/mf2/&lt;br /&gt;
&lt;br /&gt;
Barnaby Walters has a hosted version of the open source php-mf2 [[parser]] where you can enter your markup into a textarea and see how it's parsed:&lt;br /&gt;
* http://waterpigs.co.uk/php-mf2/&lt;br /&gt;
&lt;br /&gt;
See the [[validators]] page for a longer list of validators.&lt;br /&gt;
&lt;br /&gt;
== Examples in the wild ==&lt;br /&gt;
Please add new examples in the wild of microformats-2 to the top of this list. When it gets too big we can move it to a separate page like [[microformats-2-examples-in-wild]].&lt;br /&gt;
&lt;br /&gt;
* ...&lt;br /&gt;
* David John Mead marks up his profile, blog posts and comments with h-card, h-entry and h-cite on [http://davidjohnmead.com davidjohnmead.com]&lt;br /&gt;
* [[User:Brian|Brian Suda]] marks up his blog posts up with h-entry and h-card on [http://optional.is/required/ optional.is]&lt;br /&gt;
* Ashton McAllen marks up his blog posts, reposts, comments and likes with h-entry, h-card and h-cite on [http://acegiak.net/ acegiak.net]&lt;br /&gt;
* Emma Kuo marks up her blog posts and notes with h-entry and h-card on [http://notenoughneon.com/ notenoughneon.com]&lt;br /&gt;
* Scott Jenson marks up his blog posts with h-entry and h-card on [http://jenson.org/ jenson.org]&lt;br /&gt;
* Emily McAllen marks up her blog posts with h-entry and h-card on [http://blackwoolholiday.com/ blackwoolholiday.com]&lt;br /&gt;
* Ryan Barrett marks up his blog posts, notes, replies and likes with h-entry and h-card on [https://snarfed.org/ snarfed.org]&lt;br /&gt;
* Barry Frost marks up his notes with h-entry, h-card and h-cite on [http://barryfrost.com/ barryfrost.com]&lt;br /&gt;
* Amber Case marks up her profile, blog posts, replies and notes with h-entry and h-card on [http://caseorganic.com/ caseorganic.com]&lt;br /&gt;
* Johannes Ernst marks up his blog posts with h-entry on [http://upon2020.com/blog/ upon2020.com]&lt;br /&gt;
* Michiel de Jong marks up his profile and notes with h-entry and h-card on [https://michielbdejong.com/ michielbdejong.com]&lt;br /&gt;
* Mike Taylor marks up his profile and blog posts with h-card and h-entry on [https://bear.im/bearlog/ bear.im]&lt;br /&gt;
* Erin Jo Ritchey marks up her profile, posts and comments using h-card, h-entry and h-cite with idno on [http://erinjo.is/ erinjo.is]&lt;br /&gt;
* Jeena Paradies marks up his profile, blog posts, notes and comments using h-card, h-entry and h-cite on [https://jeena.net/ jeena.net]&lt;br /&gt;
* Andy Sylvester marks up his profile, blog posts and comments using h-card and h-entry on [http://andysylvester.com/2014/03/01/howto-setting-up-the-selfoss-feed-reader-with-microformats-support/ andysylvester.com] (note: as of 2014-03-13 using h-entry for comments instead of correct h-cite --[[User:Barnabywalters|bw]] 14:44, 13 March 2014 (UTC))&lt;br /&gt;
* Hakan Demir marks up his Coupon and Voucher blog posts with h-entry and h-card on [http://www.gutscheinflagge.de/ gutscheinflagge.de]&lt;br /&gt;
* Chloe Weil marks up her blog posts with h-entry on [http://chloeweil.com/blog chloeweil.com]&lt;br /&gt;
* Christophe Ducamp marks up his blog posts and profile with h-entry and h-card on [http://christopheducamp.com/ christopheducamp.com]&lt;br /&gt;
* Glenn Jones marks up his blog posts, notes, replies, profile and comments with h-entry, h-card and h-cite on [http://glennjones.net/ glennjones.net]&lt;br /&gt;
* Marcus Povey marks up his blog posts and profile with h-entry and h-card on [http://www.marcus-povey.co.uk/ marcus-povey.co.uk]&lt;br /&gt;
* Eugen Busoiu marks up his web profile with h-card on [http://eugenbusoiu.com/#utm_source=microformats2&amp;amp;utm_medium=h-card&amp;amp;utm_campaign=Microformats eugenbusoiu.com]]&lt;br /&gt;
* Matthias Pfefferle marks up his blog posts, comments and profile with h-card, h-cite and h-entry on [http://notizblog.org/ notizblog.org]&lt;br /&gt;
* Kyle Mahan marks up his profile and notes with h-card and h-entry on [http://kylewm.com/ kylewm.com]&lt;br /&gt;
* Okinawan-lyrics marks up his blog posts with h-entry and h-card ([http://www.okinawan-lyrics.com/ example])&lt;br /&gt;
* Emil Björklund marks up his blog posts with h-entry and h-card ([http://thatemil.com/blog/2013/09/16/webmentioning-adactio/ example])&lt;br /&gt;
* App.net rolled out support for h-card and h-entry on all profile pages and permalink pages as of 2013-08-06 ([https://alpha.app.net/voidfiles example])&lt;br /&gt;
* Brett Comnes marks up his posts with h-entry and h-card ([http://bret.io/2013/06/29/getting-started-with-bower/ example])&lt;br /&gt;
* Ben Werdmuller marks up his posts with h-card and h-entry, u-in-reply-to and u-like ([http://werd.io/view/51d5097fbed7ded0633a5956 example])&lt;br /&gt;
* Sandeep Shetty marks his posts up with h-card and h-entry, as well as draft u-in-reply-to and experimental u-like properties ([http://sandeep.io/101 example])&lt;br /&gt;
* Laurent Eschenauer marks up his posts with h-entry ([http://eschnou.com/entry/first-autonomous-flight-of-my-nodecopter-62-24992.html example])&lt;br /&gt;
* Tom Morris marks up his posts using h-entry ([http://tommorris.org/posts/8417 example])&lt;br /&gt;
* Sinolandquality marks up some of their content using h-feed and h-entry on [http://www.sinolandquality.com/Blog/?page_id=3516&amp;amp;utm_content=buffere4d40&amp;amp;utm_medium=social&amp;amp;utm_source=twitter.com&amp;amp;utm_campaign=buffer sinolandquality.com]&lt;br /&gt;
* [http://www.w3.org/conf/ W3Conf 2013] uses h-event for the main event, and h-card for all the speakers and notable attendees. The h-cards make particularly good use of implied name, url, and photo properties.&lt;br /&gt;
* [http://wordpress.org/extend/themes/sempress SemPress] is a WordPress theme that supports h-card, h-feed/h-entry and h-as-*&lt;br /&gt;
* [http://the-pastry-box-project.net/ The Pastry Box Project] use h-card and h-entry markup on their homepage and individual thoughts pages&lt;br /&gt;
* Tom Morris uses h-card and [[XFN]] to markup [http://tommorris.org/pages/blogroll his blogroll].&lt;br /&gt;
* Aaron Parecki uses h-card to markup both authorship and references to people in his notes permalinks, e.g. [http://aaronparecki.com/2012/230/reply/1 2012/230/reply/1].&lt;br /&gt;
* [http://tantek.com/ Tantek Çelik] uses h-card, h-event, and h-entry on his home page, as well as h-entry on all post permalinks, e.g. [http://tantek.com/2012/243/t1/name-beats-title-modern-use-dubline-core-wrong-uf2 2012-243 post], with [[rel-prev]]/[[rel-next]] (if applicable) to indicate prev/next posts, and with [[rel-author]] to his home page with canonical hCard to indicate authorship.&lt;br /&gt;
* [http://waterpigs.co.uk/ Barnaby Walters] uses h-card on his home page, h-card, h-entry and XFN markup on his [http://waterpigs.co.uk/notes notes page].&lt;br /&gt;
** 2013-01-25 Barnaby Walters: &amp;lt;cite&amp;gt;[http://waterpigs.co.uk/articles/experimental-markup Experimental Markup]&amp;lt;/cite&amp;gt; - describes how he's using microformats2 vocabularies: &amp;lt;code&amp;gt;h-adr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, and experimental vocabularies: &amp;lt;code&amp;gt;h-feed&amp;lt;/code&amp;gt; (embedded for update histories), [[activity-streams]] objects &amp;lt;code&amp;gt;h-as-article&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-as-collection&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-as-note&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-as-update&amp;lt;/code&amp;gt;, as well as experimental properties: &amp;lt;code&amp;gt;u-alternate&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;u-as-downstream-duplicate&amp;lt;/code&amp;gt; (links to POSSE copies), and &amp;lt;code&amp;gt;u-in-reply-to&amp;lt;/code&amp;gt; (links to content that the posts are in reply to). &lt;br /&gt;
* [http://tantek.com/presentations/2012/06/microformats microformats.org at 7 years] presentation with h-event and h-card markup for people and organizations.&lt;br /&gt;
* [http://tantek.com/presentations/2012/06/pdf2012-indieweb.html Rise of the Indie Web hCards] (from Personal Democracy Forum 2012 #pdf12 #pdf2012) has [[microformats-2]] h-calendar and h-card markup&lt;br /&gt;
* WebMaker by Mozilla has [[microformats-2]] h-calendar and h-card on event search (e.g. [https://webmaker.org/en-US/events/near/?lat=45.5234515&amp;amp;lng=-122.6762071 search near Portland Oregon]) and event pages (e.g. [https://webmaker.org/en-US/events/192f56eb9/ IndieWebCamp 2012]).[https://twitter.com/microformats/status/212207925643587585]&lt;br /&gt;
* WebFWD by Mozilla has [[microformats-2]] h-card markup on [https://webfwd.org/about/experts/ experts] and [https://webfwd.org/about/team/ team] pages&lt;br /&gt;
* [http://indiewebcamp.com IndieWebCamp] has [[microformats-2]] h-event markup with nested h-cards for the organizers and the location.&lt;br /&gt;
* [https://wiki.mozilla.org/Events Mozilla Events] page has [[microformats-2]] h-event markup with attendees marked up with h-card.&lt;br /&gt;
* The [http://pdx.esri.com/blog/2013/10/17/introducing-mapattack/ Esri PDX Blog] has h-entry markup on all blog posts (as of 2013-10-19), and h-product markup on [http://pdx.esri.com/projects/terraformer/ project pages]&lt;br /&gt;
&lt;br /&gt;
=== offline ===&lt;br /&gt;
* spreadly marks up share permalink pages with h-entry, as well as minimal h-cards and experimental p-like properties ([http://my.spread.ly/share/51d570bc09e9486562000002 example])&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
{{new}} Test your microformatted web page with: &lt;br /&gt;
* https://pin13.net/mf2/ (where it says &amp;quot;Microformats Parser&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Blogging tools ===&lt;br /&gt;
* '''Storytlr''' parses the 'target' from [http://indiewebcamp.com/pingback pingbacks] for [https://github.com/storytlr/storytlr/blob/master/protected/application/public/controllers/PingbackController.php#L63 h-entry with properties and nested h-card] for information to automatically display in the [http://eschnou.com/entry/testing-indieweb-federation-with-waterpigscouk-aaronpareckicom-and--62-24908.html comments section on a post].&lt;br /&gt;
&lt;br /&gt;
=== Converters ===&lt;br /&gt;
&lt;br /&gt;
* '''[https://github.com/snarfed/activitystreams-unofficial activitystreams-unofficial]''' is a library and REST API that converts between silo APIs, [[ActivityStreams]] and [[microformats2]] (all directions). Supported silos include Facebook, Twitter, Instagram and Google+. Users include [http://brid.gy/ Bridgy], [http://reader.kylewm.com/ Woodwind], and [https://facebook-atom.appspot.com/ facebook-atom] and [https://twitter-atom.appspot.com/ twitter-atom], among others.&lt;br /&gt;
&lt;br /&gt;
* '''[http://pipes.yahoo.com/pipes/pipe.info?_id=afc5568b4e8643bfb05436b1caaf91bc microformats to RSS]''' - a Yahoo! pipe that converts a URL containing an [[h-feed]] containing h-entries, into an [[RSS]] feed ([http://waterpigs.co.uk/notes/4SeNi5/ 2013-10-21 blog post announcing])&lt;br /&gt;
&lt;br /&gt;
=== Parsers ===&lt;br /&gt;
Parsers, open source libraries:&lt;br /&gt;
==== Go ====&lt;br /&gt;
* '''andyleap/microformats''' Golang microformats2 parser&lt;br /&gt;
** github open source: https://github.com/andyleap/microformats&lt;br /&gt;
** live textarea entry: http://mf2.vendaria.net&lt;br /&gt;
==== Javascript ====&lt;br /&gt;
* '''microformat-node''' Node.js microformats2 parser&lt;br /&gt;
** github open source: https://github.com/glennjones/microformat-node&lt;br /&gt;
** test suite: https://github.com/microformats/tests&lt;br /&gt;
** blog post: http://glennjones.net/2013/01/brand-new-microformats-2-parser/&lt;br /&gt;
** live: http://glennjones.net/tools/microformats/&lt;br /&gt;
* '''microformat-shiv'''  - cross browser javascript microformats 2 parser which can also be used in browser extensions.&lt;br /&gt;
** http://microformatshiv.com/&lt;br /&gt;
** github open source: https://github.com/glennjones/microformat-shiv&lt;br /&gt;
==== PHP ====&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;php-mf2&amp;quot;&amp;gt;php-mf2&amp;lt;/span&amp;gt;''' - PHP microformats2 parser&lt;br /&gt;
** github open source: https://github.com/indieweb/php-mf2&lt;br /&gt;
** Packagist: https://packagist.org/packages/mf2/mf2&lt;br /&gt;
** live: &lt;br /&gt;
*** textarea entry: http://waterpigs.co.uk/php-mf2/&lt;br /&gt;
*** URL entry: https://pin13.net/mf2/&lt;br /&gt;
==== Python ====&lt;br /&gt;
* ''mf2py'' Python microformats2 parser&lt;br /&gt;
** main entry: [[mf2py]]&lt;br /&gt;
** github open source: https://github.com/tommorris/mf2py&lt;br /&gt;
** live: &lt;br /&gt;
*** URL entry: [https://mf2py.herokuapp.com/ mf2py.herokuapp.com]&lt;br /&gt;
*** textarea entry: https://kartikprabhu.com/connection/mfparser&lt;br /&gt;
*** another textarea: http://www.unmung.com/?html=&lt;br /&gt;
*** URL and/or textarea: https://kylewm.com/services/mf2&lt;br /&gt;
==== Ruby ====&lt;br /&gt;
* '''G5/microformats2''' Ruby microformats2 parser&lt;br /&gt;
** github open source: https://github.com/G5/microformats2&lt;br /&gt;
&lt;br /&gt;
== Presentations ==&lt;br /&gt;
Presentations about microformats2:&lt;br /&gt;
* 2013-01-24 &amp;lt;cite&amp;gt;[http://waterpigs.co.uk/presentations/microformats-2/ Microformats 2]&amp;lt;/cite&amp;gt; presentation by [[User:Barnabywalters|Barnaby Walters]] at the [[events/2013-01-24-exeter-web-meetup|Exeter Web Meetup]] in Devon, UK.&lt;br /&gt;
* 2012-09-21 &amp;lt;cite&amp;gt;[http://tantek.com/presentations/2012/09/microformats2/ microformats2 &amp;amp;amp; bits of HTML5: The Evolution Of Web Data]&amp;lt;/cite&amp;gt; presentation by [[User:Tantek|Tantek Çelik]] ([http://twitter.com/t @t]) at [[events/2012-09-21-refreshlx|RefreshLX]] in Lisbon, Portugal.&lt;br /&gt;
* 2012-07-21 &amp;lt;cite&amp;gt;[http://tantek.com/presentations/2012/07/html5-uf2/ HTML5 and microformats2: The Evolution Of Web Data]&amp;lt;/cite&amp;gt; presentation by [[User:Tantek|Tantek Çelik]] ([http://twitter.com/t @t]) at [[events/2012-07-21-cascadesf|Innovators of the Web conference]] in San Francisco, CA.&lt;br /&gt;
* 2012-07-14 &amp;lt;cite&amp;gt;[http://tantek.com/presentations/2012/07/html5-microformats2/ HTML5 and microformats2: The Evolution Of Web Data]&amp;lt;/cite&amp;gt; presentation by [[User:Tantek|Tantek Çelik]] ([http://twitter.com/t @t]) at [[events/2012-07-14-open-web-camp-4|Open Web Camp IV]] in San Jose, CA.&lt;br /&gt;
&lt;br /&gt;
== Testimonials ==&lt;br /&gt;
* &amp;lt;blockquote class=&amp;quot;twitter-tweet&amp;quot;&amp;gt;To prove the web standards community can come up with better standards than the SE’s, compare this: http://microformats.org/wiki/microformats-2 with schema . org &amp;amp;mdash; Joost de Valk (@yoast) [https://twitter.com/yoast/status/298907685452124160 2013-02-05 13:35]&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote class=&amp;quot;twitter-tweet&amp;quot;&amp;gt;... I’m hoping SE’s will pick up microformats2. It’s SO much cleaner. &amp;amp;mdash; Joost de Valk (@yoast) [https://twitter.com/yoast/status/298911287117758464 2013-02-05 13:49]&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote class=&amp;quot;twitter-tweet&amp;quot;&amp;gt;... But damn Microformats2 are sexy. &amp;amp;mdash; Joost de Valk (@yoast) [https://twitter.com/yoast/status/298912179292344320 2013-02-05 13:53]&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== About This Brainstorm ==&lt;br /&gt;
The rest of this page is a brainstorm currently written in narrative / exploratory format, that is, acknowledging the success that microformats have had, why so, and then a walk through of known issues with microformats in general along with iteration of ways to address said issues, ending up with the current microformats 2 design as a conclusion.&lt;br /&gt;
&lt;br /&gt;
The proposals build on each other resulting in a solution that addresses the vast majority of general issues. The proposed changes merit a major version number increment, hence microformats 2.&lt;br /&gt;
&lt;br /&gt;
This mathematical proof/derivation style is used to explicitly encourage understanding (and double-checking) of the rational steps taken in the development of microformats 2. Reasons are documented, sometimes along with alternatives considered (and reasons for rejection of those alternatives).&lt;br /&gt;
&lt;br /&gt;
When the microformats 2 brainstorm has evolved sufficiently to demonstrate some degree of stability, usability, and implementability, it will be rewritten in a more declarative specification style, and this narrative/derivation will be archived to a background development page for historical purposes.&lt;br /&gt;
&lt;br /&gt;
— [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
2004: In early February microformats were introduced as a concept at eTech, and in September [[hCard]] and [[hCalendar]] were proposed at FOO Camp.&lt;br /&gt;
&lt;br /&gt;
2010:&lt;br /&gt;
* 34% of webdevs use microformats ([http://www.webdirections.org/sotw10/markup/#semantics 2010 State of Web Development survey])&lt;br /&gt;
* 1.88 billion hCards (per [[Yahoo]] SearchMonkey)&lt;br /&gt;
* 36 million hCalendar events (ibid)&lt;br /&gt;
&lt;br /&gt;
* XFN -&amp;gt; Social Graph API -&amp;gt; Web as Social Network / Address Book&lt;br /&gt;
&lt;br /&gt;
== Addressing Issues ==&lt;br /&gt;
=== AUTHORS and PUBLISHING ===&lt;br /&gt;
Authors and publishers are perhaps the most important constituency in the microformats community. There are more of them than there are developers, programmers, parsers, etc. and they're the ones that solved the chicken-egg problem by publishing microformats even before tools were available for consuming them.&lt;br /&gt;
&lt;br /&gt;
Therefore we must first address author/publisher general issues with microformats.&lt;br /&gt;
&lt;br /&gt;
==== can we make the simplest case simpler ====&lt;br /&gt;
Issue: '''How can we make it easier for authors to publish microformats?'''&lt;br /&gt;
&lt;br /&gt;
Currently the simplest hCard:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
    Chris Messina&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
requires 2 elements (nested, with perhaps at least one being pre-existing), and 2 class names.&lt;br /&gt;
&lt;br /&gt;
Web authors/designers are used to the simplicity of most HTML tags, e.g. to mark up a heading:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
requires just 1 element.&lt;br /&gt;
&lt;br /&gt;
[http://zeldman.com/ Jeffrey Zeldman] pointed out this apparent perceived incremental complexity (2 elements vs 1) during a microformats workshop in 2009 in New York City.&lt;br /&gt;
&lt;br /&gt;
'''How can we make microformats just as easy?'''&lt;br /&gt;
&lt;br /&gt;
'''Proposal: allow root class name only.'''&lt;br /&gt;
&lt;br /&gt;
This would enable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;vcard&amp;quot;&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
requiring only 1 class name for the simplest case.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== renaming for usability ====&lt;br /&gt;
Otherwise known as, choosing one form of consistency over another.&lt;br /&gt;
&lt;br /&gt;
'''Can we do even better?'''&lt;br /&gt;
&lt;br /&gt;
One of the most common questions asked about hCard is:&lt;br /&gt;
&lt;br /&gt;
[[hcard-faq#Why_does_hCard_use_vcard_as_the_root_class_name|Why does hCard use vcard as the root class name?]]&lt;br /&gt;
&lt;br /&gt;
This slight inconsistency between the name of the format and the name of the root class name consistently causes confusion in a large percentage of newcomers to microformats.&lt;br /&gt;
* See [[issues#hcard-vs-vcard-name]] for details/links.&lt;br /&gt;
&lt;br /&gt;
Though in microformats we believe very strongly in the [[principle]] of [[reuse]], we have to admit that in this case experience/evidence has shown that this may be a case where we re-used something too far beyond it's original meaning. Thus:&lt;br /&gt;
&lt;br /&gt;
'''Proposal: use root class name &amp;quot;hcard&amp;quot; instead of &amp;quot;vcard&amp;quot; for future hCards.'''&lt;br /&gt;
&lt;br /&gt;
This would result in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;hcard&amp;quot;&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
making the simple case even simpler:&lt;br /&gt;
&lt;br /&gt;
Just 1 additional class name, named the same as the format you're adding.  Think hCard, markup class=&amp;quot;hcard&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At a minimum for compatibility we should document that parsers should accept &amp;quot;hcard&amp;quot; as an alternative to &amp;quot;vcard&amp;quot; as the root class name for hCard 1.0, and similarly for hCalendar 1.0: &amp;quot;hcalendar&amp;quot; in addition to &amp;quot;vcalendar&amp;quot;, &amp;quot;hevent&amp;quot; in addition to &amp;quot;vevent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
However, for [[microformats-2]] we are going to distinguish root class names further by using an &amp;quot;h-&amp;quot; prefix (e.g. &amp;quot;h-card&amp;quot;). Read on to understand why.&lt;br /&gt;
&lt;br /&gt;
==== simplifying to only needing one element ====&lt;br /&gt;
It's very important for the simple case to be as simple as possible, to enable the maximum number of people to get started with minimum effort. (The idea of using a single class name for a microformat was proposed by Ryan Cannon in 2006 specifically [[hcard-implied|for hCard]], and rediscovered by [[User:Tantek|Tantek]] in 2010 and subsequently generalized to all microformats.)&lt;br /&gt;
&lt;br /&gt;
From there on, it's ok to require incremental effort for incremental return.&lt;br /&gt;
&lt;br /&gt;
E.g. to add any additional information about a person, add explicit property names.&lt;br /&gt;
&lt;br /&gt;
'''How does this simple root-only case work?'''&lt;br /&gt;
&lt;br /&gt;
* root class name reflects name of the microformat&lt;br /&gt;
* every microformat must require at most 1 property (preferably 0)&lt;br /&gt;
** admit that requiring a field in an application just results in noise (the 90210 problem - apps which require zip code get lots of false 90210 entries), and specify that any application use cases which appear to &amp;quot;require&amp;quot; specific properties must instead define how to imply sensible defaults for them.&lt;br /&gt;
* when only a root class name is specified, imply the entire text contents of the element as the value of the primary property of the microformat. e.g.&lt;br /&gt;
** &amp;quot;hcard&amp;quot; implies &amp;quot;fn&amp;quot;&lt;br /&gt;
** hcalendar event - &amp;quot;hevent&amp;quot; - implies &amp;quot;summary&amp;quot;&lt;br /&gt;
** &amp;quot;hreview&amp;quot; implies &amp;quot;summary&amp;quot;&lt;br /&gt;
** &amp;quot;hentry&amp;quot; implies &amp;quot;entry-summary&amp;quot; (perhaps collapse into &amp;quot;summary&amp;quot; - in practice they're not sufficiently semantically distinct to require separate property names)&lt;br /&gt;
** '''OR''' instead of making the one implied property be vocabulary specific, introduce a new generic (applicable to all vocabularies) 'p-name' property (subsuming hCard's 'fn'). See [[microformats-2-brainstorming#further_simplifications|microformats 2 brainstorming: further simplifications]] for latest thoughts along these lines, including the following specific mark-up implied generic properties across all microformats (based on existing published markup use-cases)&lt;br /&gt;
*** 'p-name'&lt;br /&gt;
*** 'u-url'&lt;br /&gt;
*** 'u-photo'&lt;br /&gt;
&lt;br /&gt;
==== flat sets of properties ====&lt;br /&gt;
'''What more can we simplify about microformats?'''&lt;br /&gt;
&lt;br /&gt;
Numerous individuals have provided the feedback that whenever there is more than one level of hierarchy in a microformat, many (most?) developers get confused - in particular Kavi Goel of Google / Rich Snippets provided this feedback at a microformats dinner.  Thus depending on multiple levels of hierarchy is likely resulting in a loss of authorability, perhaps even accuracy as confusion undoubtedly leads to more errors. Thus:&lt;br /&gt;
&lt;br /&gt;
'''Proposal: simplify all microformats to flat sets of properties. '''&lt;br /&gt;
&lt;br /&gt;
What this means:&lt;br /&gt;
* all microformats are simply an object with a set of properties with values.&lt;br /&gt;
* no more subproperties- drop the notion of subproperties.&lt;br /&gt;
* use composition of multiple microformats for any further hierarchy, e.g. the &amp;quot;location&amp;quot; of an hCalendar event can be an hCard, or the &amp;quot;agent&amp;quot; of one hCard can be another hCard.&lt;br /&gt;
&lt;br /&gt;
For example for hCard this would mean the following specific changes to keep relevant functionality:&lt;br /&gt;
* drop &amp;quot;n&amp;quot;, promote all &amp;quot;n&amp;quot; subproperties to full properties&lt;br /&gt;
** given-name, family-name, additional-name, honorific-prefix, honorific-suffix&lt;br /&gt;
* treat &amp;quot;geo&amp;quot; as a nested microformat&lt;br /&gt;
* treat &amp;quot;adr&amp;quot; as a nested microformat (what to do about adr's &amp;quot;type&amp;quot;?)&lt;br /&gt;
* treat &amp;quot;org&amp;quot; as a flat string and drop &amp;quot;organization-name&amp;quot; and &amp;quot;organization-unit&amp;quot; (in practice rarely used, also not revealed or ignored in contact management user interfaces - e.g. Address Book)&lt;br /&gt;
&lt;br /&gt;
Example: add a middle initial to the previous example Chris Messina's name, and markup each name component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;hcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
# use of an explicit span with &amp;quot;fn&amp;quot; to markup his entire formatted name&lt;br /&gt;
# use of the abbr element to explicitly indicate the semantic that &amp;quot;R.&amp;quot; is merely an abbreviation for his additional-name.&lt;br /&gt;
&lt;br /&gt;
==== distinguishing properties from other classes ====&lt;br /&gt;
Current microformats properties re-use generic terms like &amp;quot;summary&amp;quot;, &amp;quot;photo&amp;quot;, &amp;quot;updated&amp;quot; both for ease of use and understanding.&lt;br /&gt;
&lt;br /&gt;
However, through longer term experience, we've seen sites that accidentally drop (or break) their microformats support (e.g. Upcoming.org, Facebook) because web authors sometimes rewrite all their class names, and either are unaware that microformats were in the page, or couldn't easily distinguish microformats property class names from other site-specific class names.&lt;br /&gt;
&lt;br /&gt;
This issue has been reported by a number of web authors.&lt;br /&gt;
* See: [[issues#class-collisions]]&lt;br /&gt;
&lt;br /&gt;
Thus microformats 2 uses ''prefixes'' for property class names, e.g.:&lt;br /&gt;
* '''p-summary''' instead of ''summary''&lt;br /&gt;
* '''u-photo''' instead of ''photo'' &lt;br /&gt;
* '''dt-updated''' instead of ''updated''&lt;br /&gt;
&lt;br /&gt;
Such prefixing of all microformats class names was first suggested by Scott Isaacs of Microsoft to Tantek on a visit to Microsoft sometime in 2006/2007, but specifically aimed at making microformats easier to parse. At the time the suggestion was rejected since microformats were focused on web authors rather than parsers.&lt;br /&gt;
&lt;br /&gt;
However, since experience has shown that distinguishing property class names is an issue for '''both web authors and parser developers''', this is a key change that microformats 2 is adopting. See the next section for details.&lt;br /&gt;
&lt;br /&gt;
=== COMMUNITY and TOOLS ===&lt;br /&gt;
The second most important constituency in the microformats community are the developers, programmers, tool-makers.&lt;br /&gt;
&lt;br /&gt;
A non-trivial number of them have been sufficiently frustrated with some general issues with microformats that they've done the significant extra work to support very different and less friendly alternatives (microdata, RDFa). Based on this real-world data (market behavior), it behooves us to address these general issues with microformats for this constituency.&lt;br /&gt;
&lt;br /&gt;
==== existing microformats parsing requirements ====&lt;br /&gt;
COMMUNITY and TOOLS (that) USE MICROFORMATS &lt;br /&gt;
* parser / parsing&lt;br /&gt;
* structured&lt;br /&gt;
* getting the data out&lt;br /&gt;
* json - 1:1 mapping&lt;br /&gt;
&lt;br /&gt;
[[parsing]] microformats currently requires&lt;br /&gt;
# a list of root class names of each microformat to be parsed&lt;br /&gt;
# a list of properties for each specific microformats, along with knowledge of the type of each property in order to parse their data from potentially different portions of the HTML markup&lt;br /&gt;
# some number of format-specific specific rules (markup/content optimizations)&lt;br /&gt;
&lt;br /&gt;
This has meant that whenever a new microformat is drafted/specificied/adopted, parsers need to updated to handle it correctly, at a minimum to parse them when inside other microformats and avoid errantly implying properties from one to the other (containment, [[mfo]] problem).&lt;br /&gt;
&lt;br /&gt;
==== naming conventions for generic parsing ====&lt;br /&gt;
I think there is a fairly simple solution to #1 and #2 from the above list, and we can make progress towards minimizing #3.  In short:&lt;br /&gt;
&lt;br /&gt;
'''Proposal: a set of naming conventions for microformat root class names and properties that make it obvious when:'''&lt;br /&gt;
* a class name represents a microformat root class name&lt;br /&gt;
* a class name represents a microformat property name&lt;br /&gt;
* a class name represents a microformat property that needs special parsing (specific type of property).&lt;br /&gt;
&lt;br /&gt;
In particular - derived from the real world examples of existing proven microformats (rather than any abstraction of what a schema should have)&lt;br /&gt;
* '''&amp;quot;h-*&amp;quot; for root class names''', e.g. &amp;quot;h-card&amp;quot;, &amp;quot;h-event&amp;quot;, &amp;quot;h-entry&amp;quot;&lt;br /&gt;
** The 'h-' prefix is based on the existing microformats naming pattern of starting with 'h'.&lt;br /&gt;
* '''&amp;quot;p-*&amp;quot; for simple (text) properties''', e.g. &amp;quot;p-fn&amp;quot;, &amp;quot;p-summary&amp;quot;&lt;br /&gt;
** vocabulary generic parsing, element text in general, treat certain HTML element/attribute combination as special and use those first, e.g. img/alt, abbr/title.&lt;br /&gt;
** The 'p-' prefix is based on the word &amp;quot;property&amp;quot; starting with 'p'.&lt;br /&gt;
* '''&amp;quot;u-*&amp;quot; for URL properties''', e.g. &amp;quot;u-url&amp;quot;, &amp;quot;u-photo&amp;quot;, &amp;quot;u-logo&amp;quot;&lt;br /&gt;
** special parsing required: prefer a/href, img/src, object/data etc. attributes to element contents.&lt;br /&gt;
** The 'u-' prefix is based on URL/URI starting with the letter 'u', which is the type of most of these related properties.&lt;br /&gt;
* '''&amp;quot;dt-*&amp;quot; for datetime properties''', e.g. &amp;quot;dt-start&amp;quot;, &amp;quot;dt-end&amp;quot;, &amp;quot;dt-bday&amp;quot;&lt;br /&gt;
** special parsing required: [[value-class-pattern]], in particular separate date time value parsing for better human readabillity / DRY balance.&lt;br /&gt;
** The 'dt-' prefix is based on &amp;quot;date time&amp;quot; having the initials &amp;quot;dt&amp;quot; and the preponderance of existing date time properties starting with &amp;quot;dt&amp;quot;, e.g. dtstart, dtend, dtstamp, dtreviewed.&lt;br /&gt;
* '''&amp;quot;e-*&amp;quot; for element tree properties''' where the entire contained element hierarchy is the value, e.g. &amp;quot;e-content&amp;quot; (formerly &amp;quot;entry-content&amp;quot;) for [[hAtom]]. The 'e-' prefix can also be mnemonically remembered as &amp;quot;element tree&amp;quot;, &amp;quot;embedded markup&amp;quot;, or &amp;quot;encapsulated markup&amp;quot;.&lt;br /&gt;
** special parsing required: follow the [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#serializing-html-fragments HTML spec: Serializing HTML Fragments algorithm] to create a serialization.&lt;br /&gt;
&lt;br /&gt;
This provides a simpler transition/education story for existing microformats authors/publishers: &lt;br /&gt;
* &amp;quot;h*&amp;quot; to &amp;quot;h-*&amp;quot;, &amp;quot;dt*&amp;quot; to &amp;quot;dt-*&amp;quot;, url-like properties to &amp;quot;u-*&amp;quot;, entire embedded markup to &amp;quot;e-*&amp;quot;, and &amp;quot;p-*&amp;quot; for all &amp;quot;plain text&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
See [[microformats-2-prefixes]] for further thoughts and discussions on these and other class prefixes.&lt;br /&gt;
&lt;br /&gt;
Example: taking that simple heading hCard example forward:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card&amp;quot;&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As part of microformats 2 we would immediately define root class names and property names for all existing microformats and drafts consistent with this naming convention, and require support thereof from all new implementations, as well as strongly encouraging existing implementations to adopt the simplified microformats 2 syntax and mechanism. Question: which microformats deserve explicit backward compatibility?&lt;br /&gt;
&lt;br /&gt;
As a community we would continue to use the microformats [[process]] both for researching and determining the need for new microformats, and for naming new microformat property names for maximum re-use and interoperability of a shared vocabulary.&lt;br /&gt;
&lt;br /&gt;
If it turns out we need a new property type in the future, we can use one of the remaining single-letter-prefixes to add it to microformats 2. This would require updating of parsers of course, but in practice the number of different types of properties has grown very slowly, and we know from other schema/programming languages that there's always some small limited number of scalar/atomic property types that you need, and using those you can create compound types/objects that represent richer / more complicated types of data. See [[microformats-2-prefixes]] for documentation of existing single-letter class name prefixes in practice.&lt;br /&gt;
&lt;br /&gt;
=== ADVANTAGES ===&lt;br /&gt;
This has numerous advantages:&lt;br /&gt;
* '''better maintainability''' - much more obvious to web authors/designers/publishers which class names are for/from microformats.&lt;br /&gt;
* '''no chance of collision''' - for all practical purposes with existing class names and thus avoiding any need to add more complex CSS style rules to prevent unintended styling effects.&lt;br /&gt;
* '''simpler parsing''' - parsers can now do a simple stream-parse (or in-order DOM tree walk) and parse out '''all''' microformat objects, properties, and values, without having to know anything about any specific microformats.&lt;br /&gt;
* '''separation of syntax and vocabulary''' - by abstracting microformats 2 syntax independent of any vocabulary, it allows and encourages development of shared vocabularies  that can work in alternative syntaxes.&lt;br /&gt;
&lt;br /&gt;
More examples: here is that same heading example with name components:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;p-additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with a hyperlink to Chris's URL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;a class=&amp;quot;p-fn u-url&amp;quot; href=&amp;quot;http://factoryjoe.com/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;p-additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== COMPATIBILITY ===&lt;br /&gt;
&lt;br /&gt;
microformats 2 is backwards compatible in that in permits content authors to markup with both old and new class names for compatibility with old tools.&lt;br /&gt;
&lt;br /&gt;
Here is a simple example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;Chris Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
a microformats 2 parser would see the class name &amp;quot;h-card&amp;quot; and imply the one required property from the contents, while a microformats 1.0 parser would find the class name &amp;quot;vcard&amp;quot; and then look for the class name &amp;quot;fn&amp;quot;. no data duplication is required. this is a very important continuing application of the &amp;lt;abbr title=&amp;quot;don't repeat yourself&amp;quot;&amp;gt;DRY&amp;lt;/abbr&amp;gt; [[principle]].&lt;br /&gt;
&lt;br /&gt;
And the above hyperlinked example with both sets of class names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;a class=&amp;quot;p-fn u-url n fn url&amp;quot; href=&amp;quot;http://factoryjoe.com/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-given-name given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;p-additional-name additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-family-name family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VENDOR EXTENSIONS ===&lt;br /&gt;
&lt;br /&gt;
(this section was only discussed verbally and not written up during discussions - capturing here as it is topical)&lt;br /&gt;
&lt;br /&gt;
Proprietary extensions to formats have typically been shortlived experimental failures with one big recent exception.&lt;br /&gt;
&lt;br /&gt;
Proprietary or experimental CSS3 property implementations have been very successful.&lt;br /&gt;
&lt;br /&gt;
There has been much use of border radius properties and animations/transitions which use CSS properties with vendor-specific prefixes like:&lt;br /&gt;
&lt;br /&gt;
* -moz-border-radius&lt;br /&gt;
* -webkit-border-radius&lt;br /&gt;
&lt;br /&gt;
etc.&lt;br /&gt;
&lt;br /&gt;
Note that these are merely string '''prefixes''', not bound to any URL, and thus not namespaces in any practical sense of the word.  This is quite an important distinction, as avoiding the need to bind to a URL has made them easier to support and use.&lt;br /&gt;
&lt;br /&gt;
This use of vendor specific CSS properties has in recent years allowed the larger web design/development/implementor communities to experiment and iterate on new CSS features while the features were being developed and standardized.&lt;br /&gt;
&lt;br /&gt;
The benefits have been two-fold:&lt;br /&gt;
* designers have been able to make more attractive sites sooner (at least in some browsers)&lt;br /&gt;
* features have been market / real-world tested before being fully standardized, thus resulting in better features&lt;br /&gt;
&lt;br /&gt;
Implementers have used/introduced &amp;quot;x-&amp;quot; prefixes for IETF MIME/content-types for experimental content-types, MIME parameter extensions, and HTTP header extensions, per RFC 2045 Section 6.3, RFC 3798 section 3.3, and [https://secure.wikimedia.org/wikipedia/en/wiki/List_of_HTTP_header_fields#Common_non-standard_headers Wikipedia: HTTP header fields - non-standard headers] (could use RFC reference instead) respectively, like:&lt;br /&gt;
&lt;br /&gt;
* application/x-latex (per [https://secure.wikimedia.org/wikipedia/en/wiki/Internet_media_type#Type_x Wikipedia Internet media type: Type x])&lt;br /&gt;
* x-spam-score (in email headers)&lt;br /&gt;
* X-Pingback (per [http://en.wikipedia.org/wiki/Pingback Wikipedia:Pingback])&lt;br /&gt;
&lt;br /&gt;
Some standard types started as experimental &amp;quot;x-&amp;quot; types, thus demonstrating this experiment first, standardize later approach has worked for at least some cases:&lt;br /&gt;
&lt;br /&gt;
* image/x-png (standardized as image/png, both per [http://tools.ietf.org/html/rfc2083 RFC2083])&lt;br /&gt;
&lt;br /&gt;
There have been times when specific sites have wanted to extend microformats beyond what the set of properties in the microformat, and currently lack any '''experimental''' way to do so - to try and see if a feature (or even a whole format) is interesting in the real world before bothering to pursue researching and walking it through the microformats process.  Thus:&lt;br /&gt;
&lt;br /&gt;
'''Proposal:'''&lt;br /&gt;
* '*-x-' + '-' + meaningful name for root and property class names&lt;br /&gt;
** where &amp;quot;*&amp;quot; indicates the single-character-prefix as defined above&lt;br /&gt;
** where &amp;quot;x&amp;quot; indicates a literal 'x' for an experimental extension OR&lt;br /&gt;
** OR &amp;quot;x&amp;quot; indicates a vendor prefix (more than one character, e.g. like CSS vendor extension abbreviations, or some stock symbols, avoiding first words/phrases/abbreviations of microformats properties like dt-)&lt;br /&gt;
** e.g.&lt;br /&gt;
** &amp;quot;h-bigco-one-ring&amp;quot; - a hypothetical &amp;quot;bigco&amp;quot; vendor-specific &amp;quot;one-ring&amp;quot; microformat root class name.&lt;br /&gt;
** &amp;quot;p-goog-preptime&amp;quot; - to represent [http://www.google.com/support/webmasters/bin/answer.py?answer=173379 Google's &amp;quot;preptime&amp;quot; property extension] to [[hRecipe]] (aside: &amp;quot;duration&amp;quot; may be another property type to consider separate from &amp;quot;datetime&amp;quot; as it may be subject to different parsing rules.)&lt;br /&gt;
** &amp;quot;p-x-prep-time&amp;quot; - a possible experimental property name to be added to hRecipe upon consideration/documentation of real-world usage/uptake.&lt;br /&gt;
&lt;br /&gt;
Background - this proposal is a composition of the following (at least somewhat) successful vendor extension syntaxes&lt;br /&gt;
* [http://www.w3.org/TR/CSS21/syndata.html#vendor-keywords CSS 2.1 4.1.2.1 Vendor-specific extensions]&lt;br /&gt;
* IETF MIME/content-type &amp;quot;x-*&amp;quot; extensions per RFC 2045 Section 6.3. [http://en.wikipedia.org/wiki/Internet_media_type]&lt;br /&gt;
* IETF MIME experimental fields (e.g. x-spam-score)&lt;br /&gt;
* HTTP header extensions (e.g. x-pingback)&lt;br /&gt;
* note also [http://www.mnot.net/blog/2009/02/18/x- some critical thoughts from mnot]&lt;br /&gt;
&lt;br /&gt;
=== USERS ===&lt;br /&gt;
Need more tools and interfaces that:&lt;br /&gt;
* publish&lt;br /&gt;
* copy/paste&lt;br /&gt;
* right-click on a microformat&lt;br /&gt;
* share&lt;br /&gt;
* search results&lt;br /&gt;
&lt;br /&gt;
discussed some existing like: [[H2VX]] converts hCard to vCard, hCalendar to iCalendar&lt;br /&gt;
&lt;br /&gt;
how would we re-implement Live Clipboard today, making it easier for publishers and developers?&lt;br /&gt;
&lt;br /&gt;
=== SEE ALSO ===&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-brainstorming]] - moving more experimental / undeveloped / and rejected thoughts ideas here to simplify/progress *this* page further.&lt;br /&gt;
* [[microformats2-prefixes]]&lt;br /&gt;
* [[microformats2-faq]]&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* 2010-05-02 [[events/2010-05-02-microformats-2-0|microformats 2.0 discussion session at FOO East]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2&amp;diff=64957</id>
		<title>microformats2</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2&amp;diff=64957"/>
		<updated>2015-05-10T23:20:24Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Python */ add another live parser&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats 2&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
Welcome to the microformats2 home page.&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Microformats2 is the simplest way to markup structured information in HTML. Microformats2 improves ease of use and implementation for &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; authors (publishers) and developers ([[microformats2-parsing|parser]] implementers).&lt;br /&gt;
&lt;br /&gt;
Microformats2 replaces and supersedes both classic microformats, as well as [[microdata]], and [[RDFa]].&lt;br /&gt;
&lt;br /&gt;
=== simple microformats 2 examples ===&lt;br /&gt;
Here are a few simple microformats2 examples along with canonical [[JSON]].&lt;br /&gt;
&lt;br /&gt;
==== person example ====&lt;br /&gt;
* Simple person reference:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card&amp;quot;&amp;gt;Frances Berriman&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Frances Berriman&amp;quot;] &lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== hyperlinked person ====&lt;br /&gt;
* Simple hyperlinked person reference&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://benward.me&amp;quot;&amp;gt;Ben Ward&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Ben Ward&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://benward.me&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== hyperlinked person image ====&lt;br /&gt;
* Simple hyperlinked person image&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://rohit.khare.org/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;img alt=&amp;quot;Rohit Khare&amp;quot;&lt;br /&gt;
      src=&amp;quot;https://s3.amazonaws.com/twitter_production/profile_images/53307499/180px-Rohit-sq_bigger.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Rohit Khare&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://rohit.khare.org&amp;quot;],&lt;br /&gt;
      &amp;quot;photo&amp;quot;: [&amp;quot;https://s3.amazonaws.com/twitter_production/profile_images/53307499/180px-Rohit-sq_bigger.jpg&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional simple cases details in [[microformats-2-implied-properties]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== detailed person example ====&lt;br /&gt;
* More detailed person&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img class=&amp;quot;u-photo&amp;quot; alt=&amp;quot;photo of Mitchell&amp;quot;&lt;br /&gt;
       src=&amp;quot;https://webfwd.org/content/about-experts/300.mitchellbaker/mentor_mbaker.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt;&lt;br /&gt;
 (&amp;lt;a class=&amp;quot;u-url&amp;quot; &lt;br /&gt;
     href=&amp;quot;https://twitter.com/MitchellBaker&amp;quot;&lt;br /&gt;
    &amp;gt;@MitchellBaker&amp;lt;/a&amp;gt;)&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-org&amp;quot;&amp;gt;Mozilla Foundation&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;p-note&amp;quot;&amp;gt;&lt;br /&gt;
    Mitchell is responsible for setting the direction and scope of the Mozilla Foundation and its activities.&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-category&amp;quot;&amp;gt;Strategy&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-category&amp;quot;&amp;gt;Leadership&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;photo&amp;quot;: [&amp;quot;https://webfwd.org/content/about-experts/300.mitchellbaker/mentor_mbaker.jpg&amp;quot;],&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&lt;br /&gt;
        &amp;quot;http://blog.lizardwrangler.com/&amp;quot;,&lt;br /&gt;
        &amp;quot;https://twitter.com/MitchellBaker&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
      &amp;quot;note&amp;quot;: [&amp;quot;Mitchell is responsible for setting the direction and scope of the Mozilla Foundation and its activities.&amp;quot;],&lt;br /&gt;
      &amp;quot;category&amp;quot;: [&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;,&lt;br /&gt;
        &amp;quot;Leadership&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Notes: &lt;br /&gt;
# The JSON &amp;lt;code&amp;gt;&amp;quot;type&amp;quot;&amp;lt;/code&amp;gt; uses the full microformat root class name (e.g. &amp;lt;code&amp;gt;&amp;quot;h-card&amp;quot;&amp;lt;/code&amp;gt;) for consistent identification.&lt;br /&gt;
# all properties are optional and syntactically plural with parsed values provided in document order; particular microformats (and applications there-of) may apply specific/singular semantics to first value of a property.&lt;br /&gt;
&lt;br /&gt;
=== microformats2 design ===&lt;br /&gt;
microformats2 has the following key design aspects:&lt;br /&gt;
# '''Prefixes for class names.'''  Class names used for microformats use prefixes that start with with &amp;lt;code&amp;gt;'h-' 'p-' 'u-' 'dt-', 'e-'&amp;lt;/code&amp;gt;. These are '''syntax independent from vocabularies''', which can then be developed separately.&lt;br /&gt;
#* 'h-*' for root class names, e.g. 'h-card'&lt;br /&gt;
#* 'p-*' for simple (text) properties, e.g. 'p-name'&lt;br /&gt;
#* 'u-*' for URL properties, e.g. 'u-photo'&lt;br /&gt;
#* 'dt-*' for date/time properties, e.g. 'dt-bday'&lt;br /&gt;
#* 'e-*' for embedded markup properties, e.g. 'e-note'. See [[microformats2#naming_conventions_for_generic_parsing|prefix naming conventions]] for more details.&lt;br /&gt;
# '''Flat sets of optional properties.''' All microformats consist of a root, and a collection of properties. Hierarchical data is represented with nested microformats, typically as property values themselves. Properties are all optional and potentially multivalued (applications needing a singular semantic may use first instance).&lt;br /&gt;
# '''Single class markup for common uses.''' Common simple markup patterns require only a single microformat root class name, which parsers use to find a few generic properties: &amp;lt;code&amp;gt;name, url, photo&amp;lt;/code&amp;gt;. The simple microformats2 examples above demonstrate these.&lt;br /&gt;
&lt;br /&gt;
Parsing details for each of these (including how to generate canonical JSON) are specified step-by-step in the:&lt;br /&gt;
* '''[[microformats2-parsing|microformats2 parsing specification]]'''&lt;br /&gt;
&lt;br /&gt;
== v2 vocabularies ==&lt;br /&gt;
Status: '''&amp;lt;span id=&amp;quot;draft_v2_vocabularies&amp;quot;&amp;gt;draft&amp;lt;/span&amp;gt;'''. Please review and provide feedback in [[IRC]].&lt;br /&gt;
* [[h-adr]]&lt;br /&gt;
* [[h-card]]&lt;br /&gt;
* [[h-entry]]&lt;br /&gt;
* [[h-event]]&lt;br /&gt;
* [[h-feed]]&lt;br /&gt;
* [[h-geo]]&lt;br /&gt;
* [[h-item]]&lt;br /&gt;
* [[h-listing]]&lt;br /&gt;
* [[h-product]]&lt;br /&gt;
* [[h-recipe]]&lt;br /&gt;
* [[h-resume]]&lt;br /&gt;
* [[h-review]]&lt;br /&gt;
* [[h-review-aggregate]]&lt;br /&gt;
&lt;br /&gt;
See below for vocabulary summaries.&lt;br /&gt;
&lt;br /&gt;
=== h-adr ===&lt;br /&gt;
{{main|h-adr}}&lt;br /&gt;
&lt;br /&gt;
The '''h-adr''' microformat is for marking up structured locations such as addresses, physical and/or postal. This is an update to [[adr]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-adr&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-adr&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-post-office-box&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-extended-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-street-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-locality&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-region&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-postal-code&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-country-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-label&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;''' (or '''&amp;lt;code&amp;gt;u-geo&amp;lt;/code&amp;gt;''' with a RFC 5870 geo: URL) - new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-altitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-adr&amp;quot; is found, don't look for an &amp;quot;adr&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;adr&amp;quot;&amp;gt;adr&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;post-office-box&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extended-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;street-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;locality&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;region&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;postal-code&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;country-name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== h-card ===&lt;br /&gt;
{{main|h-card}}&lt;br /&gt;
&lt;br /&gt;
The '''h-card''' microformat is for marking up people and organizations. This is an update to [[hCard]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-card&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-honorific-prefix&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-given-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-additional-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-family-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-sort-string&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-honorific-suffix&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-nickname&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-email&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-logo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-uid&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-adr&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-post-office-box&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-extended-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-street-address&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-locality&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-region&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-postal-code&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-country-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-label&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;''' or '''&amp;lt;code&amp;gt;u-geo&amp;lt;/code&amp;gt;''' with a RFC 5870 geo: URL, new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-altitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-tel&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-note&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-bday&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-key&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-org&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-job-title&amp;lt;/code&amp;gt;''' - previously 'title' in hCard, disambiguated.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-role&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-impp&amp;lt;/code&amp;gt;''' per RFC 4770, new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-sex&amp;lt;/code&amp;gt;''' new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-gender-identity&amp;lt;/code&amp;gt;''' new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-anniversary&amp;lt;/code&amp;gt;''' new in [[vCard4]] ([[RFC6350]])&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Reserved properties: (properties not used much (if at all) in practice)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-organization-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-organization-unit&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-tz&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-rev&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-card&amp;quot; is found, don't look for a &amp;quot;vcard&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;vcard&amp;quot;&amp;gt;vcard&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;honorific-prefix&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;given-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;additional-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;family-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;honorific-suffix&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nickname&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;email&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;logo&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;uid&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-adr h-adr&amp;lt;/code&amp;gt;''' including compat root class &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extended-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;street-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;locality&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;region&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;postal-code&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;country-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-geo h-geo&amp;lt;/code&amp;gt;''' including compat root class &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;note&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bday&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;org&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;organization-name&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;organization-unit&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; - parse as '''p-job-title'''&lt;br /&gt;
* &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Reserved: (backward compat properties that parsers {{may}} implement, if they do, they {{must}} implement in this way:&lt;br /&gt;
* &amp;lt;code&amp;gt;tz&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;rev&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Note: use of 'value' within 'tel' should be automatically handled by the support of the [[value-class-pattern]]. And for now, the 'type' subproperty of 'tel' is dropped/ignored. If there is demonstrable documented need for additional tel types (e.g. fax), we can introduce new flat properties as needed (e.g. p-tel-fax).&lt;br /&gt;
&lt;br /&gt;
=== h-entry ===&lt;br /&gt;
{{main|h-entry}}&lt;br /&gt;
&lt;br /&gt;
The '''h-entry''' microformat is for marking up syndicatable content such as blog posts, notes, articles, comments, photos and similar. This is an update to [[hAtom]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-entry&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' (was p-entry-title, see issues)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;''' (was p-entry-summary, see issues)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-content&amp;lt;/code&amp;gt;''' (was e-entry-content, see issues)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-updated&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-uid&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
This is an update to [[hAtom]]. &lt;br /&gt;
&lt;br /&gt;
Brainstorming:&lt;br /&gt;
&lt;br /&gt;
The following properties are proposed additions to h-entry above and beyond what hAtom (or Atom) provides, based on various existing link preview markup conventions:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-audio&amp;lt;/code&amp;gt;''' - consider special u- parsing rules for &amp;lt;code&amp;gt;&amp;amp;lt;audio&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-video&amp;lt;/code&amp;gt;''' - consider special u- parsing rules for &amp;lt;code&amp;gt;&amp;amp;lt;video&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-in-reply-to&amp;lt;/code&amp;gt;''' - for links to other posts that this post is a reply to (comment regarding, etc.)&lt;br /&gt;
&lt;br /&gt;
Backward compatibility: &lt;br /&gt;
&lt;br /&gt;
(*)hAtom-specific implementations that perform custom display or translation (e.g. to Atom XML) {{should}} prefer &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt; over &amp;lt;code&amp;gt;p-entry-title&amp;lt;/code&amp;gt;, and use &amp;lt;code&amp;gt;p-entry-title&amp;lt;/code&amp;gt; value(s) as a fallback if there is no &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For hAtom backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-entry&amp;quot; is found, don't look for a &amp;quot;hentry&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hentry&amp;quot;&amp;gt;hentry&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;entry-title&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;entry-summary&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;entry-content&amp;lt;/code&amp;gt; - parse as '''e-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;published&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;updated&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-geo h-geo&amp;lt;/code&amp;gt;''' including compat root &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;h-entry-faq&amp;quot;&amp;gt;FAQ:&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* '''What is the &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt; of a [http://indiewebcamp.com/note note]?'''&lt;br /&gt;
** A few options, from simplest to most detailed.&lt;br /&gt;
*** '''same as the p-content/e-content''' property.&lt;br /&gt;
*** '''same as the &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; element''' on the note permalink post page. When publishing a note on its own permalink post page, the contents of the note are likely abbreviated for the title of the page. The same abbreviation can be used for the p-name.&lt;br /&gt;
*** '''first sentence of the p-content/e-content''' property. It may be better for [http://indiewebcamp.com/syndication syndication] and [[link-preview]] purposes to provide just the first sentence of the note as the &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;. Similarly if only a portion of the content is syndicated to other sites, that portion can be marked up as the &amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;.&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resolved Issues:&lt;br /&gt;
* 2012-245 Resolved. See [http://krijnhoetmer.nl/irc-logs/microformats/20120830#l-120 2012-243 IRC discussion/consensus] for:&lt;br /&gt;
** Use '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;p-entry-summary&amp;lt;/code&amp;gt;'''. The historical semantic of &amp;quot;entry-summary&amp;quot; is not different from &amp;quot;summary&amp;quot; in any significant (or discernible way). Collapsing the two will simplify the overall microformats2 vocabularies further. In microformats2, entry-summary is no more.&lt;br /&gt;
** Use '''&amp;lt;code&amp;gt;e-content&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;e-entry-content&amp;lt;/code&amp;gt;'''. Same point and advantage. In microformats2, entry-content is no more.&lt;br /&gt;
** '''drop &amp;lt;code&amp;gt;p-entry-title&amp;lt;/code&amp;gt;'''. Unnecessary and subsumed by &amp;quot;p-name&amp;quot;. Would consider move to backward compat only if cases are presented - known publishing uses are expected to be updated shortly.&lt;br /&gt;
&lt;br /&gt;
=== h-event ===&lt;br /&gt;
{{main|h-event}}&lt;br /&gt;
&lt;br /&gt;
The '''h-event''' microformat is for marking up events. This is an update to [[hCalendar]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-event&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;'''(*)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-start&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-end&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-duration&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-description&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-location&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
This is an update to [[hCalendar]]. &lt;br /&gt;
&lt;br /&gt;
(*)hCalendar-specific implementations that perform custom display or translation (e.g. to iCalendar .ics) {{should}} prefer &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt; over &amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;, and use &amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt; value(s) as a fallback if there is no &amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-event&amp;quot; is found, don't look for a &amp;quot;vevent&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;vevent&amp;quot;&amp;gt;vevent&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;dtstart&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;dt-start&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;dtend&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;dt-end&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;dt-duration&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;location&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;, and compat root &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-adr&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-geo h-geo&amp;lt;/code&amp;gt;''' including compat root &amp;lt;code&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== h-geo ===&lt;br /&gt;
{{main|h-geo}}&lt;br /&gt;
&lt;br /&gt;
The '''h-geo''' microformat is for marking up WGS84 geophysical coordinates. This is an update to [[geo]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-geo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-altitude&amp;lt;/code&amp;gt;''' - new in [[vCard4]] ([[RFC6350]] from RFC 5870)&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-geo&amp;quot; is found, don't look for an &amp;quot;geo&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;geo&amp;quot;&amp;gt;geo&amp;lt;/code&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== h-item ===&lt;br /&gt;
{{main|h-item}}&lt;br /&gt;
&lt;br /&gt;
The '''h-item''' microformat is for marking up the item of an [[h-review]] or [[h-product]]. This is an update to part of [[hReview]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-item&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-item&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Note: in practice, due to the microformats2 implied property rules, it is expected that most uses of &amp;quot;h-item&amp;quot; won't require any explicit properties at all (since microformats2 parsers will infer name, photo, and url properties from the structure of the element with &amp;quot;h-item&amp;quot; and its contained content/elements if any).&lt;br /&gt;
&lt;br /&gt;
=== h-product ===&lt;br /&gt;
{{main|h-product}}&lt;br /&gt;
&lt;br /&gt;
The '''h-product''' microformat is for marking up products. This is an update to [[hProduct]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-product&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-product&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - name of the product&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;''' - photo of the product&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-brand&amp;lt;/code&amp;gt;''' - manufacturer, can also be a nested &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - freeform categories or tags applied to the item by the reviewer &lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-description&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - URL of the product&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-identifier&amp;lt;/code&amp;gt;''' - includes type (e.g. mpn, upc, isbn, issn, sn, vin, sku etc.) and value.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-review&amp;lt;/code&amp;gt;''' - a review of the product, can also be a nested &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-price&amp;lt;/code&amp;gt;''' - retail price of the product&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-product&amp;quot; is found, don't look for an &amp;quot;hproduct&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hproduct&amp;quot;&amp;gt;hproduct&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt;  - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;brand&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;identifier&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; - including compat root class &amp;lt;code&amp;gt;hreview&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: [[hProduct]] has at least one experimental property which has real world adoption due to [[Google]] and [[Bing]] search support of hProduct. Currently this is: '''price'''&lt;br /&gt;
&lt;br /&gt;
=== h-recipe ===&lt;br /&gt;
{{main|h-recipe}}&lt;br /&gt;
&lt;br /&gt;
The '''h-recipe''' microformat is for marking up food recipes. This is an update to [[hRecipe]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-recipe&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-recipe&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - the name of the recipe&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-ingredient&amp;lt;/code&amp;gt;''' - describes one or more ingredients used in the recipe.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-yield&amp;lt;/code&amp;gt;''' - Specifies the quantity produced by the recipe, like how many persons it satisfyies &lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-instructions&amp;lt;/code&amp;gt;''' - the method of the recipe.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-duration&amp;lt;/code&amp;gt;''' - the time it takes to prepare the meal described by the recipe.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-photo&amp;lt;/code&amp;gt;''' - an accompanying image&lt;br /&gt;
&lt;br /&gt;
Experimental properties with wide adoption&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;'''  - provides a short summary or introduction &lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt;''' - the person who wrote the recipe with &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;''' - the date the recipe was published&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-nutrition&amp;lt;/code&amp;gt;''' - nutritional information like calories, fat, dietary fiber etc.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-recipe&amp;quot; is found, don't look for an &amp;quot;hrecipe&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hrecipe&amp;quot;&amp;gt;hrecipe&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;instructions&amp;lt;/code&amp;gt; - parse as '''e-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt;  - parse as '''u-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nutrition&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: [[hRecipe]] has a number of experimental properties which have real world adoption due to [[Google]] recipe search support of hRecipe. These are: summary, author, published and nutrition&lt;br /&gt;
&lt;br /&gt;
=== h-resume ===&lt;br /&gt;
{{main|h-resume}}&lt;br /&gt;
&lt;br /&gt;
The '''h-resume''' microformat is for marking up resumes. This is an update to [[hResume]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-resume&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-resume&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;''' - overview of qualifications and objectives&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-contact&amp;lt;/code&amp;gt;''' - current contact info in an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-education&amp;lt;/code&amp;gt;''' - an education &amp;lt;code&amp;gt;h-calendar&amp;lt;/code&amp;gt; event, years, nested &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; of the school, location.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-experience&amp;lt;/code&amp;gt;''' - a job or other professional experience &amp;lt;code&amp;gt;h-calendar&amp;lt;/code&amp;gt; event, years, nested &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; of the organization, location, job-title.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-skill&amp;lt;/code&amp;gt;''' - a skill or ability, optionally including level and/or duration of experience&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-affiliation&amp;lt;/code&amp;gt;''' - an affiliation with an &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt; organization&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-resume&amp;quot; is found, don't look for an &amp;quot;hresume&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hresume&amp;quot;&amp;gt;hresume&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;contact&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;education&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vevent&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;experience&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vevent&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;skill&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;affiliation&amp;lt;/code&amp;gt; - including compat root &amp;lt;code&amp;gt;vcard&amp;lt;/code&amp;gt; in the absence of &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: skill has a [[hresume-skill-brainstorm|proposed expansion into competency]] with explicit summary, rating and/or duration components. Based on existing real world adoption, we should consider an h-competency vocabulary with p-summary, p-rating, and dt-duration properties.&lt;br /&gt;
&lt;br /&gt;
=== h-review ===&lt;br /&gt;
{{main|h-review}}&lt;br /&gt;
&lt;br /&gt;
The '''h-review''' microformat is for marking up reviews. This is an update to [[hReview]]. See also [[h-item]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-review&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - name of the review&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-item&amp;lt;/code&amp;gt;''' - thing been reviewed i.e. business or person (h-card), event (h-event), place (h-adr or h-geo), product (h-product), website, url, or other item ([[h-item]]).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-reviewer&amp;lt;/code&amp;gt;''' - person who authored the review &lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-reviewed&amp;lt;/code&amp;gt;''' - date time of when the review was written&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-rating&amp;lt;/code&amp;gt;''' - value from 1-5 indicating a rating for the item (5 best).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-best&amp;lt;/code&amp;gt;'''  - define best rating value. can be numerically lower than worst.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-worst&amp;lt;/code&amp;gt;'''  - define worst rating value. can be numerically higher than best. &lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-description&amp;lt;/code&amp;gt;''' - the full text written evaluation and opinion of the reviewer&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - freeform categories or tags applied to the item by the reviewer &lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - URL of the review&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-review&amp;quot; is found, don't look for an &amp;quot;hreview&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hreview&amp;quot;&amp;gt;hreview&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt; parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''p-name''' of the item being reviewed (p-item h-item p-name)&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt; - parse as '''u-photo''' of the item being reviewed (p-item h-item u-photo)&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-url''' of the item being reviewed (p-item h-item u-url)&lt;br /&gt;
* &amp;lt;code&amp;gt;reviewer&amp;lt;/code&amp;gt;  - including compat root vcard in the absence of h-card&lt;br /&gt;
* &amp;lt;code&amp;gt;dtreviewed&amp;lt;/code&amp;gt; - parse as '''dt-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rating&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;worst&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt; - parse as '''e-'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;tag&amp;quot;&amp;lt;/code&amp;gt; - parse as '''p-category'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;self bookmark&amp;quot;&amp;lt;/code&amp;gt; - parse as '''u-url'''. note that &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute value is treated as a space separated set, thus any presence of &amp;quot;self&amp;quot; and &amp;quot;bookmark&amp;quot; within such a set in a rel value is accepted.&lt;br /&gt;
&lt;br /&gt;
Note: The [[hReview]] format has three properties which make use of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute, these are &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;, permalink (via the &amp;lt;code&amp;gt;self&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bookmark&amp;lt;/code&amp;gt; values) and &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;. Microformats 2 parsers {{should}} map these URLs into the page scoped rel collection.&lt;br /&gt;
&lt;br /&gt;
=== h-review-aggregate ===&lt;br /&gt;
{{main|h-review-aggregate}}&lt;br /&gt;
&lt;br /&gt;
The '''h-review-aggregate''' microformat is for marking up aggregate reviews of a single item. This is an update to [[hreview-aggregate]]. See also [[h-item]].&lt;br /&gt;
&lt;br /&gt;
root class name: '''&amp;lt;code&amp;gt;h-review-aggregate&amp;lt;/code&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
profile/itemtype: &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-review-aggregate&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - name of the review&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-item&amp;lt;/code&amp;gt;''' - thing been reviewed i.e. business or person (h-card), event (h-event), place (h-adr or h-geo), product (h-product), website, url, or other item (h-item).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-rating&amp;lt;/code&amp;gt;''' - value from 1-5 indicating average rating for the item (5 best).&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-best&amp;lt;/code&amp;gt;'''  - define best rating value. can be numerically lower than worst.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-worst&amp;lt;/code&amp;gt;'''  - define worst rating value. can be numerically higher than best. &lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-count&amp;lt;/code&amp;gt;'''  - number of reviews aggregated.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-votes&amp;lt;/code&amp;gt;'''  - number of reviewers who have rated the product, thus contributing to the average rating.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - freeform categories or tags applied to the item by the reviewer&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - URL of the review&lt;br /&gt;
&lt;br /&gt;
For backward compatibility, microformats 2 parsers {{should}} detect the following root class name and property names. A microformats 2 parser may use existing microformats [[parsers]] to extract these properties. If an &amp;quot;h-review-aggregate&amp;quot; is found, don't look for an &amp;quot;hreview-aggregate&amp;quot; on the same element.&lt;br /&gt;
&lt;br /&gt;
compat root class name: &amp;lt;code id=&amp;quot;hreview-aggregate&amp;quot;&amp;gt;hreview-aggregate&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
properties: (parsed as '''p-''' plain text unless otherwise specified)&lt;br /&gt;
* &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt; parse as '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; - parse as '''p-name''' of the item being reviewed (p-item h-item p-name)&lt;br /&gt;
* &amp;lt;code&amp;gt;photo&amp;lt;/code&amp;gt; - parse as '''u-photo''' of the item being reviewed (p-item h-item u-photo)&lt;br /&gt;
* &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; - parse as '''u-url''' of the item being reviewed (p-item h-item u-url)&lt;br /&gt;
* &amp;lt;code&amp;gt;rating&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;worst&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;votes&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;tag&amp;quot;&amp;lt;/code&amp;gt; - parse as '''p-category'''&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;self bookmark&amp;quot;&amp;lt;/code&amp;gt; - parse as '''u-url'''. note that &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attribute value is treated as a space separated set, thus any presence of &amp;quot;self&amp;quot; and &amp;quot;bookmark&amp;quot; within such a set in a rel value is accepted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== v2 vocab notes ===&lt;br /&gt;
Notes: &lt;br /&gt;
* All v2 vocabularies are defined as flat lists of properties of an object/item, and thus can be used in microformats-2 syntax as shown, or in microdata items, or RDFa. The microformats-2 property parsing prefixes &amp;quot;p-&amp;quot;, &amp;quot;u-&amp;quot;, &amp;quot;dt-&amp;quot;, &amp;quot;e-&amp;quot; are omitted when using defined properties in microdata itemprop and RDFa property as those syntaxes have their own element-specific parsing rules.&lt;br /&gt;
* Profile URLs are provided for use with the HTML4 &amp;lt;code&amp;gt;profile&amp;lt;/code&amp;gt; attribute, microdata &amp;lt;code&amp;gt;itemtype&amp;lt;/code&amp;gt; attribute, and RDFa &amp;lt;code&amp;gt;vocab&amp;lt;/code&amp;gt; &amp;amp;amp; &amp;lt;code&amp;gt;typeof&amp;lt;/code&amp;gt; attributes (though the latter requires slicing off the trailing segment of the profile for the typeof attribute, and leaving the rest in vocab). &lt;br /&gt;
* microformats 2 properties may also be explicitly bound as URIs using [[rel-profile]], the [[html5-profile]] attribute proposal, or an HTML5 'vocab' attribute instead. If URI bound terms are important to you, please express interest on [[rel-profile]], [[html5-profile]], or contribute to an [[html5-vocab]] draft.&lt;br /&gt;
&lt;br /&gt;
=== v2 vocab to-do ===&lt;br /&gt;
To do: &lt;br /&gt;
* write a simple tutorial for creating/getting started with microformats-2 markup for new content&lt;br /&gt;
* examples in each h-* spec listed above of how to embed other microformats in them&lt;br /&gt;
* actual profile documents at &amp;lt;nowiki&amp;gt;http://microformats.org/profile/h-*&amp;lt;/nowiki&amp;gt; URLs mentioned above.&lt;br /&gt;
* Provide any necessary microdata-specific language as needed (e.g. to be comparably understandable to the [http://www.whatwg.org/specs/web-apps/current-work/#vcard sample vCard4/hCard1 microdata vocabulary]. Also provide any necessary RDFa-specific language as needed. Both preferably in a generic vocabulary-independent way.&lt;br /&gt;
* write a porting guide mapping v1 property -&amp;gt; v2 property&lt;br /&gt;
** use-case: simple search/replace in templates (e.g. in case web author doesn't remember existing microformats vocabs and where they used them).&lt;br /&gt;
** advise using *both* in existing templates (e.g. in case some CSS depends on the existing microformats)&lt;br /&gt;
* analyzie/document how well the microformats2 model and vocabularies satisfy the [http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-May/019681.html use-cases used to design/create microdata].&lt;br /&gt;
&lt;br /&gt;
== combining microformats ==&lt;br /&gt;
Since microformats 2 uses simple flat sets of properties for each microformat, multiple microformats are combined to indicate additional structure.&lt;br /&gt;
&lt;br /&gt;
=== h-event location h-card ===&lt;br /&gt;
Events commonly have venue information with additional structure, like address information. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-event&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot; href=&amp;quot;http://indiewebcamp.com/2012&amp;quot;&amp;gt;&lt;br /&gt;
    IndieWebCamp 2012&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
  from &amp;lt;time class=&amp;quot;dt-start&amp;quot;&amp;gt;2012-06-30&amp;lt;/time&amp;gt; &lt;br /&gt;
  to &amp;lt;time class=&amp;quot;dt-end&amp;quot;&amp;gt;2012-07-01&amp;lt;/time&amp;gt; at &lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-location h-card&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-name p-org u-url&amp;quot; href=&amp;quot;http://geoloqi.com/&amp;quot;&amp;gt;&lt;br /&gt;
      Geoloqi&lt;br /&gt;
    &amp;lt;/a&amp;gt;, &lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;920 SW 3rd Ave. Suite 400&amp;lt;/span&amp;gt;, &lt;br /&gt;
    &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;Portland&amp;lt;/span&amp;gt;, &lt;br /&gt;
    &amp;lt;abbr class=&amp;quot;p-region&amp;quot; title=&amp;quot;Oregon&amp;quot;&amp;gt;OR&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nested h-card used to structure the p-location of the h-event is represented as a structured value for &amp;quot;location&amp;quot; in the JSON, which has an additional key, &amp;quot;value&amp;quot; that represents the plain text version parsed from the p-location.&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-event&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;IndieWebCamp 2012&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://indiewebcamp.com/2012&amp;quot;],&lt;br /&gt;
      &amp;quot;start&amp;quot;: [&amp;quot;2012-06-30&amp;quot;],&lt;br /&gt;
      &amp;quot;end&amp;quot;: [&amp;quot;2012-07-01&amp;quot;],&lt;br /&gt;
      &amp;quot;location&amp;quot;: [{&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Geoloqi, 920 SW 3rd Ave. Suite 400, Portland, OR&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;name&amp;quot;: [&amp;quot;Geoloqi&amp;quot;],&lt;br /&gt;
          &amp;quot;org&amp;quot;: [&amp;quot;Geoloqi&amp;quot;],&lt;br /&gt;
          &amp;quot;url&amp;quot;: [&amp;quot;http://geoloqi.com/&amp;quot;],&lt;br /&gt;
          &amp;quot;street-address&amp;quot;: [&amp;quot;920 SW 3rd Ave. Suite 400&amp;quot;],&lt;br /&gt;
          &amp;quot;locality&amp;quot;: [&amp;quot;Portland&amp;quot;],&lt;br /&gt;
          &amp;quot;region&amp;quot;: [&amp;quot;Oregon&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
      }]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questions:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Should the nested hCard be present also as a top-level item in the JSON? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
** My current (2012-243) leaning is no. - [[User:Tantek|Tantek]] 18:53, 30 August 2012 (UTC)&lt;br /&gt;
** If so, how do we avoid expansion of the JSON geometrically proportional to the depth of microformat nesting? (Or do we not worry about it?)&lt;br /&gt;
* Should there be a canonical hierarchical JSON and a canonical flattened JSON? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
** My current (2012-243) leaning is no, we stick with one canonical JSON for uf2 which is hierarchical. - [[User:Tantek|Tantek]] 18:53, 30 August 2012 (UTC)&lt;br /&gt;
** If so, should the flattened JSON have references from properties to nested microformats that have been pushed to the top level per flattening? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
*** If so, what convention does/do JSON follow for such synthetic local reference identifiers? - [[User:Tantek|Tantek]] 02:02, 19 June 2012 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* The 'location' value reflects the visible text of its element, including spaces and punctuation, as well as the state abbreviation 'OR'. The 'h-card' property values are only what is marked up, and thus include structure values without extra punctuation, and the state takes the expanded form from the &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; attribute of its &amp;lt;code&amp;gt;&amp;amp;lt;abbr&amp;amp;gt;&amp;lt;/code&amp;gt; element.&lt;br /&gt;
&lt;br /&gt;
=== h-card org h-card ===&lt;br /&gt;
People often publish information general to their company rather than specific to them, in which case, they may wish to encapsulate that in separately nested microformat. E.g. here is a simple h-card example with org property:&lt;br /&gt;
&lt;br /&gt;
[http://blog.lizardwrangler.com Mitchell Baker] (Mozilla Foundation)&lt;br /&gt;
&lt;br /&gt;
with source:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;span class=&amp;quot;p-org&amp;quot;&amp;gt;Mozilla Foundation&amp;lt;/span&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes such organization affiliations are hyperlinked to the website of the organization:&lt;br /&gt;
&lt;br /&gt;
[http://blog.lizardwrangler.com Mitchell Baker] ([http://mozilla.org/ Mozilla Foundation])&lt;br /&gt;
&lt;br /&gt;
You can mark that up with a nested h-card:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;p-org h-card&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [{&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Mozilla Foundation&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
          &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
      }]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: the nested h-card has implied 'name' and 'url' properties, just like any other root-class-name-only h-card on an &amp;lt;code&amp;gt;&amp;amp;lt;a href&amp;amp;gt;&amp;lt;/code&amp;gt; would.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FOR PARSERS ONLY:'''&lt;br /&gt;
&lt;br /&gt;
The nested 'h-card' could be marked up as an 'h-org' as well, which adds it to the nested microformat's type array, all as part of the property specified by the 'p-org'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;p-org h-card h-org&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;],&lt;br /&gt;
      &amp;quot;org&amp;quot;: [{&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Mozilla Foundation&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;, &amp;quot;h-org&amp;quot;],&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
          &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
      }]&lt;br /&gt;
    }&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FOR PARSERS ONLY:'''&lt;br /&gt;
&lt;br /&gt;
Without a property class name like 'p-org' holding all the nested objects together, we need to introduce another array for nested children (similar to the existing DOM element notion of children) of a microformat that are not attached to a specific property:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;h-org h-card&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;children&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;,&amp;quot;h-org&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
      }  &lt;br /&gt;
    }]&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since there's no property class name on the element with classes 'h-card' and 'h-org', the microformat representing that element is collected into the children array.&lt;br /&gt;
&lt;br /&gt;
Such a nested microformat implies some relationship (containment, being related), but is not as useful as if the nested microformat was a specific property of its parent.&lt;br /&gt;
&lt;br /&gt;
For this reason it's recommended that authors should not publish nested microformats without a  property class name, and instead, when nesting microformats, authors should always specify a property class name (like 'p-org') on the same element as the root class name(s) of the nested microformat(s) (like 'h-card' and/or 'h-org').&lt;br /&gt;
&lt;br /&gt;
'''FOR PARSERS ONLY:'''&lt;br /&gt;
&lt;br /&gt;
Or the nested object could be only marked up with 'h-card'. Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name u-url&amp;quot;&lt;br /&gt;
     href=&amp;quot;http://blog.lizardwrangler.com/&amp;quot; &lt;br /&gt;
    &amp;gt;Mitchell Baker&amp;lt;/a&amp;gt; &lt;br /&gt;
  (&amp;lt;a class=&amp;quot;h-card&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://mozilla.org/&amp;quot;&lt;br /&gt;
     &amp;gt;Mozilla Foundation&amp;lt;/a&amp;gt;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parsed JSON:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;items&amp;quot;: [{ &lt;br /&gt;
    &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: [&amp;quot;Mitchell Baker&amp;quot;],&lt;br /&gt;
      &amp;quot;url&amp;quot;: [&amp;quot;http://blog.lizardwrangler.com/&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;children&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&amp;quot;h-card&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Mozilla Foundation&amp;quot;],&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://mozilla.org/&amp;quot;]&lt;br /&gt;
      }  &lt;br /&gt;
    }]&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TO DO: Add h-event h-card example and JSON, per real world publishing examples like [http://www.swingtime.co.uk/List/ClSouth.html Swing Time: Classes in Southern England].'''&lt;br /&gt;
&lt;br /&gt;
== authoring ==&lt;br /&gt;
=== minimal markup ===&lt;br /&gt;
The best way to use microformats-2 is with as little additional markup as possible. This keeps your code cleaner, improves its maintainability, and thus the quality and longevity of your microformats.&lt;br /&gt;
&lt;br /&gt;
One big advantage of microformats-2 over previous microformats (and others) is the ability to add one class name to an existing element to create a structured item.&lt;br /&gt;
&lt;br /&gt;
See the [[microformats-2#simple_microformats_2_examples|simple examples at the top]] for a start, e.g.&lt;br /&gt;
&lt;br /&gt;
Simple hCards work just by adding &amp;lt;code&amp;gt;class=&amp;quot;h-card&amp;quot;&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card&amp;quot;&amp;gt;Frances Berriman&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://benward.me&amp;quot;&amp;gt;Ben Ward&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img class=&amp;quot;h-card&amp;quot; alt=&amp;quot;Sally Ride&amp;quot; &lt;br /&gt;
     src=&amp;quot;http://upload.wikimedia.org/wikipedia/commons/a/a4/Ride-s.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a class=&amp;quot;h-card&amp;quot; href=&amp;quot;http://tantek.com&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;img alt=&amp;quot;Tantek Çelik&amp;quot; src=&amp;quot;http://ttk.me/logo.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Tip: Inside an open tag, put the &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; attribute &amp;lt;em&amp;gt;first&amp;lt;/em&amp;gt;, then any human text content attributes (e.g. &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt;), then URL attributes (e.g. &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt;), and lastly other attributes (e.g. &amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt;). Putting the class attribute first ties it closely to the element name/tag itself, makes it more obvious, and thus more likely to be kept up to date.&lt;br /&gt;
&lt;br /&gt;
=== backward compatible ===&lt;br /&gt;
If you depend on current microformats [[implementations]], while they're being updated to support [[microformats-2]], you can include both existing microformats and microformats-2 markup.&lt;br /&gt;
&lt;br /&gt;
In short: use both sets of class names simultaneously. &lt;br /&gt;
&lt;br /&gt;
When doing so, use them on the same element, with the microformats-2 class name first, followed immediately by the existing microformats class name.&lt;br /&gt;
&lt;br /&gt;
Here are the microformats-2 hCards from above with current [[hCard]] markup as well, which may require adding a wrapping element (e.g. a &amp;lt;code&amp;gt;&amp;amp;lt;span&amp;amp;gt;&amp;lt;/code&amp;gt;) to separate the root class name element from explicit property class name elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-name fn&amp;quot;&amp;gt;Frances Berriman&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;p-name fn u-url url&amp;quot; href=&amp;quot;http://benward.me&amp;quot;&amp;gt;Ben Ward&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;img class=&amp;quot;p-name fn u-photo photo&amp;quot; alt=&amp;quot;Sally Ride&amp;quot; &lt;br /&gt;
       src=&amp;quot;http://upload.wikimedia.org/wikipedia/commons/a/a4/Ride-s.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;u-url url&amp;quot; href=&amp;quot;http://tantek.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img class=&amp;quot;p-name fn u-photo photo&amp;quot; alt=&amp;quot;Tantek Çelik&amp;quot; &lt;br /&gt;
         src=&amp;quot;http://ttk.me/logo.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tips:&lt;br /&gt;
* use the microformats-2 class name first, e.g.&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;h-card vcard&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;u-url url&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* and pair them when using an element for multiple properties, e.g.:&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;p-name fn u-url url&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;p-name fn u-photo photo&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* put microformats classes after classes for CSS (since page authors will likely interact more with their own classes for design than with microformats classes), e.g. as used on individual microformats [[events]] pages:&lt;br /&gt;
** &amp;lt;code&amp;gt;class=&amp;quot;event-page h-event vevent&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The prefixes (h-, p-, etc.) of microformats2 class names provide easier recognition, and when followed by the similarly named existing class name, they're more easily recognized as related and thus kept together when the markup is maintained over time.&lt;br /&gt;
&lt;br /&gt;
Related FAQ: [[microformats2-faq#when_using_both_h-card_and_vcard_which_should_be_first_and_why|When using both h-card and vcard which should be first and why?]]&lt;br /&gt;
&lt;br /&gt;
== validators ==&lt;br /&gt;
microformats2 validators:&lt;br /&gt;
&lt;br /&gt;
{{new}} Test your microformatted web page with: &lt;br /&gt;
* https://pin13.net/mf2/&lt;br /&gt;
&lt;br /&gt;
Barnaby Walters has a hosted version of the open source php-mf2 [[parser]] where you can enter your markup into a textarea and see how it's parsed:&lt;br /&gt;
* http://waterpigs.co.uk/php-mf2/&lt;br /&gt;
&lt;br /&gt;
See the [[validators]] page for a longer list of validators.&lt;br /&gt;
&lt;br /&gt;
== Examples in the wild ==&lt;br /&gt;
Please add new examples in the wild of microformats-2 to the top of this list. When it gets too big we can move it to a separate page like [[microformats-2-examples-in-wild]].&lt;br /&gt;
&lt;br /&gt;
* ...&lt;br /&gt;
* David John Mead marks up his profile, blog posts and comments with h-card, h-entry and h-cite on [http://davidjohnmead.com davidjohnmead.com]&lt;br /&gt;
* [[User:Brian|Brian Suda]] marks up his blog posts up with h-entry and h-card on [http://optional.is/required/ optional.is]&lt;br /&gt;
* Ashton McAllen marks up his blog posts, reposts, comments and likes with h-entry, h-card and h-cite on [http://acegiak.net/ acegiak.net]&lt;br /&gt;
* Emma Kuo marks up her blog posts and notes with h-entry and h-card on [http://notenoughneon.com/ notenoughneon.com]&lt;br /&gt;
* Scott Jenson marks up his blog posts with h-entry and h-card on [http://jenson.org/ jenson.org]&lt;br /&gt;
* Emily McAllen marks up her blog posts with h-entry and h-card on [http://blackwoolholiday.com/ blackwoolholiday.com]&lt;br /&gt;
* Ryan Barrett marks up his blog posts, notes, replies and likes with h-entry and h-card on [https://snarfed.org/ snarfed.org]&lt;br /&gt;
* Barry Frost marks up his notes with h-entry, h-card and h-cite on [http://barryfrost.com/ barryfrost.com]&lt;br /&gt;
* Amber Case marks up her profile, blog posts, replies and notes with h-entry and h-card on [http://caseorganic.com/ caseorganic.com]&lt;br /&gt;
* Johannes Ernst marks up his blog posts with h-entry on [http://upon2020.com/blog/ upon2020.com]&lt;br /&gt;
* Michiel de Jong marks up his profile and notes with h-entry and h-card on [https://michielbdejong.com/ michielbdejong.com]&lt;br /&gt;
* Mike Taylor marks up his profile and blog posts with h-card and h-entry on [https://bear.im/bearlog/ bear.im]&lt;br /&gt;
* Erin Jo Ritchey marks up her profile, posts and comments using h-card, h-entry and h-cite with idno on [http://erinjo.is/ erinjo.is]&lt;br /&gt;
* Jeena Paradies marks up his profile, blog posts, notes and comments using h-card, h-entry and h-cite on [https://jeena.net/ jeena.net]&lt;br /&gt;
* Andy Sylvester marks up his profile, blog posts and comments using h-card and h-entry on [http://andysylvester.com/2014/03/01/howto-setting-up-the-selfoss-feed-reader-with-microformats-support/ andysylvester.com] (note: as of 2014-03-13 using h-entry for comments instead of correct h-cite --[[User:Barnabywalters|bw]] 14:44, 13 March 2014 (UTC))&lt;br /&gt;
* Hakan Demir marks up his Coupon and Voucher blog posts with h-entry and h-card on [http://www.gutscheinflagge.de/ gutscheinflagge.de]&lt;br /&gt;
* Chloe Weil marks up her blog posts with h-entry on [http://chloeweil.com/blog chloeweil.com]&lt;br /&gt;
* Christophe Ducamp marks up his blog posts and profile with h-entry and h-card on [http://christopheducamp.com/ christopheducamp.com]&lt;br /&gt;
* Glenn Jones marks up his blog posts, notes, replies, profile and comments with h-entry, h-card and h-cite on [http://glennjones.net/ glennjones.net]&lt;br /&gt;
* Marcus Povey marks up his blog posts and profile with h-entry and h-card on [http://www.marcus-povey.co.uk/ marcus-povey.co.uk]&lt;br /&gt;
* Eugen Busoiu marks up his web profile with h-card on [http://eugenbusoiu.com/#utm_source=microformats2&amp;amp;utm_medium=h-card&amp;amp;utm_campaign=Microformats eugenbusoiu.com]]&lt;br /&gt;
* Matthias Pfefferle marks up his blog posts, comments and profile with h-card, h-cite and h-entry on [http://notizblog.org/ notizblog.org]&lt;br /&gt;
* Kyle Mahan marks up his profile and notes with h-card and h-entry on [http://kylewm.com/ kylewm.com]&lt;br /&gt;
* Okinawan-lyrics marks up his blog posts with h-entry and h-card ([http://www.okinawan-lyrics.com/ example])&lt;br /&gt;
* Emil Björklund marks up his blog posts with h-entry and h-card ([http://thatemil.com/blog/2013/09/16/webmentioning-adactio/ example])&lt;br /&gt;
* App.net rolled out support for h-card and h-entry on all profile pages and permalink pages as of 2013-08-06 ([https://alpha.app.net/voidfiles example])&lt;br /&gt;
* Brett Comnes marks up his posts with h-entry and h-card ([http://bret.io/2013/06/29/getting-started-with-bower/ example])&lt;br /&gt;
* Ben Werdmuller marks up his posts with h-card and h-entry, u-in-reply-to and u-like ([http://werd.io/view/51d5097fbed7ded0633a5956 example])&lt;br /&gt;
* Sandeep Shetty marks his posts up with h-card and h-entry, as well as draft u-in-reply-to and experimental u-like properties ([http://sandeep.io/101 example])&lt;br /&gt;
* Laurent Eschenauer marks up his posts with h-entry ([http://eschnou.com/entry/first-autonomous-flight-of-my-nodecopter-62-24992.html example])&lt;br /&gt;
* Tom Morris marks up his posts using h-entry ([http://tommorris.org/posts/8417 example])&lt;br /&gt;
* Sinolandquality marks up some of their content using h-feed and h-entry on [http://www.sinolandquality.com/Blog/?page_id=3516&amp;amp;utm_content=buffere4d40&amp;amp;utm_medium=social&amp;amp;utm_source=twitter.com&amp;amp;utm_campaign=buffer sinolandquality.com]&lt;br /&gt;
* [http://www.w3.org/conf/ W3Conf 2013] uses h-event for the main event, and h-card for all the speakers and notable attendees. The h-cards make particularly good use of implied name, url, and photo properties.&lt;br /&gt;
* [http://wordpress.org/extend/themes/sempress SemPress] is a WordPress theme that supports h-card, h-feed/h-entry and h-as-*&lt;br /&gt;
* [http://the-pastry-box-project.net/ The Pastry Box Project] use h-card and h-entry markup on their homepage and individual thoughts pages&lt;br /&gt;
* Tom Morris uses h-card and [[XFN]] to markup [http://tommorris.org/pages/blogroll his blogroll].&lt;br /&gt;
* Aaron Parecki uses h-card to markup both authorship and references to people in his notes permalinks, e.g. [http://aaronparecki.com/2012/230/reply/1 2012/230/reply/1].&lt;br /&gt;
* [http://tantek.com/ Tantek Çelik] uses h-card, h-event, and h-entry on his home page, as well as h-entry on all post permalinks, e.g. [http://tantek.com/2012/243/t1/name-beats-title-modern-use-dubline-core-wrong-uf2 2012-243 post], with [[rel-prev]]/[[rel-next]] (if applicable) to indicate prev/next posts, and with [[rel-author]] to his home page with canonical hCard to indicate authorship.&lt;br /&gt;
* [http://waterpigs.co.uk/ Barnaby Walters] uses h-card on his home page, h-card, h-entry and XFN markup on his [http://waterpigs.co.uk/notes notes page].&lt;br /&gt;
** 2013-01-25 Barnaby Walters: &amp;lt;cite&amp;gt;[http://waterpigs.co.uk/articles/experimental-markup Experimental Markup]&amp;lt;/cite&amp;gt; - describes how he's using microformats2 vocabularies: &amp;lt;code&amp;gt;h-adr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-geo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;, and experimental vocabularies: &amp;lt;code&amp;gt;h-feed&amp;lt;/code&amp;gt; (embedded for update histories), [[activity-streams]] objects &amp;lt;code&amp;gt;h-as-article&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-as-collection&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-as-note&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h-as-update&amp;lt;/code&amp;gt;, as well as experimental properties: &amp;lt;code&amp;gt;u-alternate&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;u-as-downstream-duplicate&amp;lt;/code&amp;gt; (links to POSSE copies), and &amp;lt;code&amp;gt;u-in-reply-to&amp;lt;/code&amp;gt; (links to content that the posts are in reply to). &lt;br /&gt;
* [http://tantek.com/presentations/2012/06/microformats microformats.org at 7 years] presentation with h-event and h-card markup for people and organizations.&lt;br /&gt;
* [http://tantek.com/presentations/2012/06/pdf2012-indieweb.html Rise of the Indie Web hCards] (from Personal Democracy Forum 2012 #pdf12 #pdf2012) has [[microformats-2]] h-calendar and h-card markup&lt;br /&gt;
* WebMaker by Mozilla has [[microformats-2]] h-calendar and h-card on event search (e.g. [https://webmaker.org/en-US/events/near/?lat=45.5234515&amp;amp;lng=-122.6762071 search near Portland Oregon]) and event pages (e.g. [https://webmaker.org/en-US/events/192f56eb9/ IndieWebCamp 2012]).[https://twitter.com/microformats/status/212207925643587585]&lt;br /&gt;
* WebFWD by Mozilla has [[microformats-2]] h-card markup on [https://webfwd.org/about/experts/ experts] and [https://webfwd.org/about/team/ team] pages&lt;br /&gt;
* [http://indiewebcamp.com IndieWebCamp] has [[microformats-2]] h-event markup with nested h-cards for the organizers and the location.&lt;br /&gt;
* [https://wiki.mozilla.org/Events Mozilla Events] page has [[microformats-2]] h-event markup with attendees marked up with h-card.&lt;br /&gt;
* The [http://pdx.esri.com/blog/2013/10/17/introducing-mapattack/ Esri PDX Blog] has h-entry markup on all blog posts (as of 2013-10-19), and h-product markup on [http://pdx.esri.com/projects/terraformer/ project pages]&lt;br /&gt;
&lt;br /&gt;
=== offline ===&lt;br /&gt;
* spreadly marks up share permalink pages with h-entry, as well as minimal h-cards and experimental p-like properties ([http://my.spread.ly/share/51d570bc09e9486562000002 example])&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
{{new}} Test your microformatted web page with: &lt;br /&gt;
* https://pin13.net/mf2/ (where it says &amp;quot;Microformats Parser&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Blogging tools ===&lt;br /&gt;
* '''Storytlr''' parses the 'target' from [http://indiewebcamp.com/pingback pingbacks] for [https://github.com/storytlr/storytlr/blob/master/protected/application/public/controllers/PingbackController.php#L63 h-entry with properties and nested h-card] for information to automatically display in the [http://eschnou.com/entry/testing-indieweb-federation-with-waterpigscouk-aaronpareckicom-and--62-24908.html comments section on a post].&lt;br /&gt;
&lt;br /&gt;
=== Converters ===&lt;br /&gt;
&lt;br /&gt;
* '''[https://github.com/snarfed/activitystreams-unofficial activitystreams-unofficial]''' is a library and REST API that converts between silo APIs, [[ActivityStreams]] and [[microformats2]] (all directions). Supported silos include Facebook, Twitter, Instagram and Google+. Users include [http://brid.gy/ Bridgy], [http://reader.kylewm.com/ Woodwind], and [https://facebook-atom.appspot.com/ facebook-atom] and [https://twitter-atom.appspot.com/ twitter-atom], among others.&lt;br /&gt;
&lt;br /&gt;
* '''[http://pipes.yahoo.com/pipes/pipe.info?_id=afc5568b4e8643bfb05436b1caaf91bc microformats to RSS]''' - a Yahoo! pipe that converts a URL containing an [[h-feed]] containing h-entries, into an [[RSS]] feed ([http://waterpigs.co.uk/notes/4SeNi5/ 2013-10-21 blog post announcing])&lt;br /&gt;
&lt;br /&gt;
=== Parsers ===&lt;br /&gt;
Parsers, open source libraries:&lt;br /&gt;
&lt;br /&gt;
==== Javascript ====&lt;br /&gt;
* '''microformat-node''' Node.js microformats2 parser&lt;br /&gt;
** github open source: https://github.com/glennjones/microformat-node&lt;br /&gt;
** test suite: https://github.com/microformats/tests&lt;br /&gt;
** blog post: http://glennjones.net/2013/01/brand-new-microformats-2-parser/&lt;br /&gt;
** live: http://glennjones.net/tools/microformats/&lt;br /&gt;
* '''microformat-shiv'''  - cross browser javascript microformats 2 parser which can also be used in browser extensions.&lt;br /&gt;
** http://microformatshiv.com/&lt;br /&gt;
** github open source: https://github.com/glennjones/microformat-shiv&lt;br /&gt;
==== PHP ====&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;php-mf2&amp;quot;&amp;gt;php-mf2&amp;lt;/span&amp;gt;''' - PHP microformats2 parser&lt;br /&gt;
** github open source: https://github.com/indieweb/php-mf2&lt;br /&gt;
** Packagist: https://packagist.org/packages/mf2/mf2&lt;br /&gt;
** live: &lt;br /&gt;
*** textarea entry: http://waterpigs.co.uk/php-mf2/&lt;br /&gt;
*** URL entry: https://pin13.net/mf2/&lt;br /&gt;
==== Ruby ====&lt;br /&gt;
* '''G5/microformats2''' Ruby microformats2 parser&lt;br /&gt;
** github open source: https://github.com/G5/microformats2&lt;br /&gt;
==== Python ====&lt;br /&gt;
* ''mf2py'' Python microformats2 parser&lt;br /&gt;
** main entry: [[mf2py]]&lt;br /&gt;
** github open source: https://github.com/tommorris/mf2py&lt;br /&gt;
** live: &lt;br /&gt;
*** URL entry: [https://mf2py.herokuapp.com/ mf2py.herokuapp.com]&lt;br /&gt;
*** textarea entry: https://kartikprabhu.com/connection/mfparser&lt;br /&gt;
*** another textarea: http://www.unmung.com/?html=&lt;br /&gt;
*** URL and/or textarea: https://kylewm.com/services/mf2&lt;br /&gt;
&lt;br /&gt;
== Presentations ==&lt;br /&gt;
Presentations about microformats2:&lt;br /&gt;
* 2013-01-24 &amp;lt;cite&amp;gt;[http://waterpigs.co.uk/presentations/microformats-2/ Microformats 2]&amp;lt;/cite&amp;gt; presentation by [[User:Barnabywalters|Barnaby Walters]] at the [[events/2013-01-24-exeter-web-meetup|Exeter Web Meetup]] in Devon, UK.&lt;br /&gt;
* 2012-09-21 &amp;lt;cite&amp;gt;[http://tantek.com/presentations/2012/09/microformats2/ microformats2 &amp;amp;amp; bits of HTML5: The Evolution Of Web Data]&amp;lt;/cite&amp;gt; presentation by [[User:Tantek|Tantek Çelik]] ([http://twitter.com/t @t]) at [[events/2012-09-21-refreshlx|RefreshLX]] in Lisbon, Portugal.&lt;br /&gt;
* 2012-07-21 &amp;lt;cite&amp;gt;[http://tantek.com/presentations/2012/07/html5-uf2/ HTML5 and microformats2: The Evolution Of Web Data]&amp;lt;/cite&amp;gt; presentation by [[User:Tantek|Tantek Çelik]] ([http://twitter.com/t @t]) at [[events/2012-07-21-cascadesf|Innovators of the Web conference]] in San Francisco, CA.&lt;br /&gt;
* 2012-07-14 &amp;lt;cite&amp;gt;[http://tantek.com/presentations/2012/07/html5-microformats2/ HTML5 and microformats2: The Evolution Of Web Data]&amp;lt;/cite&amp;gt; presentation by [[User:Tantek|Tantek Çelik]] ([http://twitter.com/t @t]) at [[events/2012-07-14-open-web-camp-4|Open Web Camp IV]] in San Jose, CA.&lt;br /&gt;
&lt;br /&gt;
== Testimonials ==&lt;br /&gt;
* &amp;lt;blockquote class=&amp;quot;twitter-tweet&amp;quot;&amp;gt;To prove the web standards community can come up with better standards than the SE’s, compare this: http://microformats.org/wiki/microformats-2 with schema . org &amp;amp;mdash; Joost de Valk (@yoast) [https://twitter.com/yoast/status/298907685452124160 2013-02-05 13:35]&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote class=&amp;quot;twitter-tweet&amp;quot;&amp;gt;... I’m hoping SE’s will pick up microformats2. It’s SO much cleaner. &amp;amp;mdash; Joost de Valk (@yoast) [https://twitter.com/yoast/status/298911287117758464 2013-02-05 13:49]&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote class=&amp;quot;twitter-tweet&amp;quot;&amp;gt;... But damn Microformats2 are sexy. &amp;amp;mdash; Joost de Valk (@yoast) [https://twitter.com/yoast/status/298912179292344320 2013-02-05 13:53]&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== About This Brainstorm ==&lt;br /&gt;
The rest of this page is a brainstorm currently written in narrative / exploratory format, that is, acknowledging the success that microformats have had, why so, and then a walk through of known issues with microformats in general along with iteration of ways to address said issues, ending up with the current microformats 2 design as a conclusion.&lt;br /&gt;
&lt;br /&gt;
The proposals build on each other resulting in a solution that addresses the vast majority of general issues. The proposed changes merit a major version number increment, hence microformats 2.&lt;br /&gt;
&lt;br /&gt;
This mathematical proof/derivation style is used to explicitly encourage understanding (and double-checking) of the rational steps taken in the development of microformats 2. Reasons are documented, sometimes along with alternatives considered (and reasons for rejection of those alternatives).&lt;br /&gt;
&lt;br /&gt;
When the microformats 2 brainstorm has evolved sufficiently to demonstrate some degree of stability, usability, and implementability, it will be rewritten in a more declarative specification style, and this narrative/derivation will be archived to a background development page for historical purposes.&lt;br /&gt;
&lt;br /&gt;
— [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
2004: In early February microformats were introduced as a concept at eTech, and in September [[hCard]] and [[hCalendar]] were proposed at FOO Camp.&lt;br /&gt;
&lt;br /&gt;
2010:&lt;br /&gt;
* 34% of webdevs use microformats ([http://www.webdirections.org/sotw10/markup/#semantics 2010 State of Web Development survey])&lt;br /&gt;
* 1.88 billion hCards (per [[Yahoo]] SearchMonkey)&lt;br /&gt;
* 36 million hCalendar events (ibid)&lt;br /&gt;
&lt;br /&gt;
* XFN -&amp;gt; Social Graph API -&amp;gt; Web as Social Network / Address Book&lt;br /&gt;
&lt;br /&gt;
== Addressing Issues ==&lt;br /&gt;
=== AUTHORS and PUBLISHING ===&lt;br /&gt;
Authors and publishers are perhaps the most important constituency in the microformats community. There are more of them than there are developers, programmers, parsers, etc. and they're the ones that solved the chicken-egg problem by publishing microformats even before tools were available for consuming them.&lt;br /&gt;
&lt;br /&gt;
Therefore we must first address author/publisher general issues with microformats.&lt;br /&gt;
&lt;br /&gt;
==== can we make the simplest case simpler ====&lt;br /&gt;
Issue: '''How can we make it easier for authors to publish microformats?'''&lt;br /&gt;
&lt;br /&gt;
Currently the simplest hCard:&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
    Chris Messina&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
requires 2 elements (nested, with perhaps at least one being pre-existing), and 2 class names.&lt;br /&gt;
&lt;br /&gt;
Web authors/designers are used to the simplicity of most HTML tags, e.g. to mark up a heading:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
requires just 1 element.&lt;br /&gt;
&lt;br /&gt;
[http://zeldman.com/ Jeffrey Zeldman] pointed out this apparent perceived incremental complexity (2 elements vs 1) during a microformats workshop in 2009 in New York City.&lt;br /&gt;
&lt;br /&gt;
'''How can we make microformats just as easy?'''&lt;br /&gt;
&lt;br /&gt;
'''Proposal: allow root class name only.'''&lt;br /&gt;
&lt;br /&gt;
This would enable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;vcard&amp;quot;&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
requiring only 1 class name for the simplest case.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== renaming for usability ====&lt;br /&gt;
Otherwise known as, choosing one form of consistency over another.&lt;br /&gt;
&lt;br /&gt;
'''Can we do even better?'''&lt;br /&gt;
&lt;br /&gt;
One of the most common questions asked about hCard is:&lt;br /&gt;
&lt;br /&gt;
[[hcard-faq#Why_does_hCard_use_vcard_as_the_root_class_name|Why does hCard use vcard as the root class name?]]&lt;br /&gt;
&lt;br /&gt;
This slight inconsistency between the name of the format and the name of the root class name consistently causes confusion in a large percentage of newcomers to microformats.&lt;br /&gt;
* See [[issues#hcard-vs-vcard-name]] for details/links.&lt;br /&gt;
&lt;br /&gt;
Though in microformats we believe very strongly in the [[principle]] of [[reuse]], we have to admit that in this case experience/evidence has shown that this may be a case where we re-used something too far beyond it's original meaning. Thus:&lt;br /&gt;
&lt;br /&gt;
'''Proposal: use root class name &amp;quot;hcard&amp;quot; instead of &amp;quot;vcard&amp;quot; for future hCards.'''&lt;br /&gt;
&lt;br /&gt;
This would result in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;hcard&amp;quot;&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
making the simple case even simpler:&lt;br /&gt;
&lt;br /&gt;
Just 1 additional class name, named the same as the format you're adding.  Think hCard, markup class=&amp;quot;hcard&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At a minimum for compatibility we should document that parsers should accept &amp;quot;hcard&amp;quot; as an alternative to &amp;quot;vcard&amp;quot; as the root class name for hCard 1.0, and similarly for hCalendar 1.0: &amp;quot;hcalendar&amp;quot; in addition to &amp;quot;vcalendar&amp;quot;, &amp;quot;hevent&amp;quot; in addition to &amp;quot;vevent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
However, for [[microformats-2]] we are going to distinguish root class names further by using an &amp;quot;h-&amp;quot; prefix (e.g. &amp;quot;h-card&amp;quot;). Read on to understand why.&lt;br /&gt;
&lt;br /&gt;
==== simplifying to only needing one element ====&lt;br /&gt;
It's very important for the simple case to be as simple as possible, to enable the maximum number of people to get started with minimum effort. (The idea of using a single class name for a microformat was proposed by Ryan Cannon in 2006 specifically [[hcard-implied|for hCard]], and rediscovered by [[User:Tantek|Tantek]] in 2010 and subsequently generalized to all microformats.)&lt;br /&gt;
&lt;br /&gt;
From there on, it's ok to require incremental effort for incremental return.&lt;br /&gt;
&lt;br /&gt;
E.g. to add any additional information about a person, add explicit property names.&lt;br /&gt;
&lt;br /&gt;
'''How does this simple root-only case work?'''&lt;br /&gt;
&lt;br /&gt;
* root class name reflects name of the microformat&lt;br /&gt;
* every microformat must require at most 1 property (preferably 0)&lt;br /&gt;
** admit that requiring a field in an application just results in noise (the 90210 problem - apps which require zip code get lots of false 90210 entries), and specify that any application use cases which appear to &amp;quot;require&amp;quot; specific properties must instead define how to imply sensible defaults for them.&lt;br /&gt;
* when only a root class name is specified, imply the entire text contents of the element as the value of the primary property of the microformat. e.g.&lt;br /&gt;
** &amp;quot;hcard&amp;quot; implies &amp;quot;fn&amp;quot;&lt;br /&gt;
** hcalendar event - &amp;quot;hevent&amp;quot; - implies &amp;quot;summary&amp;quot;&lt;br /&gt;
** &amp;quot;hreview&amp;quot; implies &amp;quot;summary&amp;quot;&lt;br /&gt;
** &amp;quot;hentry&amp;quot; implies &amp;quot;entry-summary&amp;quot; (perhaps collapse into &amp;quot;summary&amp;quot; - in practice they're not sufficiently semantically distinct to require separate property names)&lt;br /&gt;
** '''OR''' instead of making the one implied property be vocabulary specific, introduce a new generic (applicable to all vocabularies) 'p-name' property (subsuming hCard's 'fn'). See [[microformats-2-brainstorming#further_simplifications|microformats 2 brainstorming: further simplifications]] for latest thoughts along these lines, including the following specific mark-up implied generic properties across all microformats (based on existing published markup use-cases)&lt;br /&gt;
*** 'p-name'&lt;br /&gt;
*** 'u-url'&lt;br /&gt;
*** 'u-photo'&lt;br /&gt;
&lt;br /&gt;
==== flat sets of properties ====&lt;br /&gt;
'''What more can we simplify about microformats?'''&lt;br /&gt;
&lt;br /&gt;
Numerous individuals have provided the feedback that whenever there is more than one level of hierarchy in a microformat, many (most?) developers get confused - in particular Kavi Goel of Google / Rich Snippets provided this feedback at a microformats dinner.  Thus depending on multiple levels of hierarchy is likely resulting in a loss of authorability, perhaps even accuracy as confusion undoubtedly leads to more errors. Thus:&lt;br /&gt;
&lt;br /&gt;
'''Proposal: simplify all microformats to flat sets of properties. '''&lt;br /&gt;
&lt;br /&gt;
What this means:&lt;br /&gt;
* all microformats are simply an object with a set of properties with values.&lt;br /&gt;
* no more subproperties- drop the notion of subproperties.&lt;br /&gt;
* use composition of multiple microformats for any further hierarchy, e.g. the &amp;quot;location&amp;quot; of an hCalendar event can be an hCard, or the &amp;quot;agent&amp;quot; of one hCard can be another hCard.&lt;br /&gt;
&lt;br /&gt;
For example for hCard this would mean the following specific changes to keep relevant functionality:&lt;br /&gt;
* drop &amp;quot;n&amp;quot;, promote all &amp;quot;n&amp;quot; subproperties to full properties&lt;br /&gt;
** given-name, family-name, additional-name, honorific-prefix, honorific-suffix&lt;br /&gt;
* treat &amp;quot;geo&amp;quot; as a nested microformat&lt;br /&gt;
* treat &amp;quot;adr&amp;quot; as a nested microformat (what to do about adr's &amp;quot;type&amp;quot;?)&lt;br /&gt;
* treat &amp;quot;org&amp;quot; as a flat string and drop &amp;quot;organization-name&amp;quot; and &amp;quot;organization-unit&amp;quot; (in practice rarely used, also not revealed or ignored in contact management user interfaces - e.g. Address Book)&lt;br /&gt;
&lt;br /&gt;
Example: add a middle initial to the previous example Chris Messina's name, and markup each name component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;hcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
# use of an explicit span with &amp;quot;fn&amp;quot; to markup his entire formatted name&lt;br /&gt;
# use of the abbr element to explicitly indicate the semantic that &amp;quot;R.&amp;quot; is merely an abbreviation for his additional-name.&lt;br /&gt;
&lt;br /&gt;
==== distinguishing properties from other classes ====&lt;br /&gt;
Current microformats properties re-use generic terms like &amp;quot;summary&amp;quot;, &amp;quot;photo&amp;quot;, &amp;quot;updated&amp;quot; both for ease of use and understanding.&lt;br /&gt;
&lt;br /&gt;
However, through longer term experience, we've seen sites that accidentally drop (or break) their microformats support (e.g. Upcoming.org, Facebook) because web authors sometimes rewrite all their class names, and either are unaware that microformats were in the page, or couldn't easily distinguish microformats property class names from other site-specific class names.&lt;br /&gt;
&lt;br /&gt;
This issue has been reported by a number of web authors.&lt;br /&gt;
* See: [[issues#class-collisions]]&lt;br /&gt;
&lt;br /&gt;
Thus microformats 2 uses ''prefixes'' for property class names, e.g.:&lt;br /&gt;
* '''p-summary''' instead of ''summary''&lt;br /&gt;
* '''u-photo''' instead of ''photo'' &lt;br /&gt;
* '''dt-updated''' instead of ''updated''&lt;br /&gt;
&lt;br /&gt;
Such prefixing of all microformats class names was first suggested by Scott Isaacs of Microsoft to Tantek on a visit to Microsoft sometime in 2006/2007, but specifically aimed at making microformats easier to parse. At the time the suggestion was rejected since microformats were focused on web authors rather than parsers.&lt;br /&gt;
&lt;br /&gt;
However, since experience has shown that distinguishing property class names is an issue for '''both web authors and parser developers''', this is a key change that microformats 2 is adopting. See the next section for details.&lt;br /&gt;
&lt;br /&gt;
=== COMMUNITY and TOOLS ===&lt;br /&gt;
The second most important constituency in the microformats community are the developers, programmers, tool-makers.&lt;br /&gt;
&lt;br /&gt;
A non-trivial number of them have been sufficiently frustrated with some general issues with microformats that they've done the significant extra work to support very different and less friendly alternatives (microdata, RDFa). Based on this real-world data (market behavior), it behooves us to address these general issues with microformats for this constituency.&lt;br /&gt;
&lt;br /&gt;
==== existing microformats parsing requirements ====&lt;br /&gt;
COMMUNITY and TOOLS (that) USE MICROFORMATS &lt;br /&gt;
* parser / parsing&lt;br /&gt;
* structured&lt;br /&gt;
* getting the data out&lt;br /&gt;
* json - 1:1 mapping&lt;br /&gt;
&lt;br /&gt;
[[parsing]] microformats currently requires&lt;br /&gt;
# a list of root class names of each microformat to be parsed&lt;br /&gt;
# a list of properties for each specific microformats, along with knowledge of the type of each property in order to parse their data from potentially different portions of the HTML markup&lt;br /&gt;
# some number of format-specific specific rules (markup/content optimizations)&lt;br /&gt;
&lt;br /&gt;
This has meant that whenever a new microformat is drafted/specificied/adopted, parsers need to updated to handle it correctly, at a minimum to parse them when inside other microformats and avoid errantly implying properties from one to the other (containment, [[mfo]] problem).&lt;br /&gt;
&lt;br /&gt;
==== naming conventions for generic parsing ====&lt;br /&gt;
I think there is a fairly simple solution to #1 and #2 from the above list, and we can make progress towards minimizing #3.  In short:&lt;br /&gt;
&lt;br /&gt;
'''Proposal: a set of naming conventions for microformat root class names and properties that make it obvious when:'''&lt;br /&gt;
* a class name represents a microformat root class name&lt;br /&gt;
* a class name represents a microformat property name&lt;br /&gt;
* a class name represents a microformat property that needs special parsing (specific type of property).&lt;br /&gt;
&lt;br /&gt;
In particular - derived from the real world examples of existing proven microformats (rather than any abstraction of what a schema should have)&lt;br /&gt;
* '''&amp;quot;h-*&amp;quot; for root class names''', e.g. &amp;quot;h-card&amp;quot;, &amp;quot;h-event&amp;quot;, &amp;quot;h-entry&amp;quot;&lt;br /&gt;
** The 'h-' prefix is based on the existing microformats naming pattern of starting with 'h'.&lt;br /&gt;
* '''&amp;quot;p-*&amp;quot; for simple (text) properties''', e.g. &amp;quot;p-fn&amp;quot;, &amp;quot;p-summary&amp;quot;&lt;br /&gt;
** vocabulary generic parsing, element text in general, treat certain HTML element/attribute combination as special and use those first, e.g. img/alt, abbr/title.&lt;br /&gt;
** The 'p-' prefix is based on the word &amp;quot;property&amp;quot; starting with 'p'.&lt;br /&gt;
* '''&amp;quot;u-*&amp;quot; for URL properties''', e.g. &amp;quot;u-url&amp;quot;, &amp;quot;u-photo&amp;quot;, &amp;quot;u-logo&amp;quot;&lt;br /&gt;
** special parsing required: prefer a/href, img/src, object/data etc. attributes to element contents.&lt;br /&gt;
** The 'u-' prefix is based on URL/URI starting with the letter 'u', which is the type of most of these related properties.&lt;br /&gt;
* '''&amp;quot;dt-*&amp;quot; for datetime properties''', e.g. &amp;quot;dt-start&amp;quot;, &amp;quot;dt-end&amp;quot;, &amp;quot;dt-bday&amp;quot;&lt;br /&gt;
** special parsing required: [[value-class-pattern]], in particular separate date time value parsing for better human readabillity / DRY balance.&lt;br /&gt;
** The 'dt-' prefix is based on &amp;quot;date time&amp;quot; having the initials &amp;quot;dt&amp;quot; and the preponderance of existing date time properties starting with &amp;quot;dt&amp;quot;, e.g. dtstart, dtend, dtstamp, dtreviewed.&lt;br /&gt;
* '''&amp;quot;e-*&amp;quot; for element tree properties''' where the entire contained element hierarchy is the value, e.g. &amp;quot;e-content&amp;quot; (formerly &amp;quot;entry-content&amp;quot;) for [[hAtom]]. The 'e-' prefix can also be mnemonically remembered as &amp;quot;element tree&amp;quot;, &amp;quot;embedded markup&amp;quot;, or &amp;quot;encapsulated markup&amp;quot;.&lt;br /&gt;
** special parsing required: follow the [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#serializing-html-fragments HTML spec: Serializing HTML Fragments algorithm] to create a serialization.&lt;br /&gt;
&lt;br /&gt;
This provides a simpler transition/education story for existing microformats authors/publishers: &lt;br /&gt;
* &amp;quot;h*&amp;quot; to &amp;quot;h-*&amp;quot;, &amp;quot;dt*&amp;quot; to &amp;quot;dt-*&amp;quot;, url-like properties to &amp;quot;u-*&amp;quot;, entire embedded markup to &amp;quot;e-*&amp;quot;, and &amp;quot;p-*&amp;quot; for all &amp;quot;plain text&amp;quot; properties.&lt;br /&gt;
&lt;br /&gt;
See [[microformats-2-prefixes]] for further thoughts and discussions on these and other class prefixes.&lt;br /&gt;
&lt;br /&gt;
Example: taking that simple heading hCard example forward:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card&amp;quot;&amp;gt;Chris Messina&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As part of microformats 2 we would immediately define root class names and property names for all existing microformats and drafts consistent with this naming convention, and require support thereof from all new implementations, as well as strongly encouraging existing implementations to adopt the simplified microformats 2 syntax and mechanism. Question: which microformats deserve explicit backward compatibility?&lt;br /&gt;
&lt;br /&gt;
As a community we would continue to use the microformats [[process]] both for researching and determining the need for new microformats, and for naming new microformat property names for maximum re-use and interoperability of a shared vocabulary.&lt;br /&gt;
&lt;br /&gt;
If it turns out we need a new property type in the future, we can use one of the remaining single-letter-prefixes to add it to microformats 2. This would require updating of parsers of course, but in practice the number of different types of properties has grown very slowly, and we know from other schema/programming languages that there's always some small limited number of scalar/atomic property types that you need, and using those you can create compound types/objects that represent richer / more complicated types of data. See [[microformats-2-prefixes]] for documentation of existing single-letter class name prefixes in practice.&lt;br /&gt;
&lt;br /&gt;
=== ADVANTAGES ===&lt;br /&gt;
This has numerous advantages:&lt;br /&gt;
* '''better maintainability''' - much more obvious to web authors/designers/publishers which class names are for/from microformats.&lt;br /&gt;
* '''no chance of collision''' - for all practical purposes with existing class names and thus avoiding any need to add more complex CSS style rules to prevent unintended styling effects.&lt;br /&gt;
* '''simpler parsing''' - parsers can now do a simple stream-parse (or in-order DOM tree walk) and parse out '''all''' microformat objects, properties, and values, without having to know anything about any specific microformats.&lt;br /&gt;
* '''separation of syntax and vocabulary''' - by abstracting microformats 2 syntax independent of any vocabulary, it allows and encourages development of shared vocabularies  that can work in alternative syntaxes.&lt;br /&gt;
&lt;br /&gt;
More examples: here is that same heading example with name components:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;p-fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;p-additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with a hyperlink to Chris's URL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;a class=&amp;quot;p-fn u-url&amp;quot; href=&amp;quot;http://factoryjoe.com/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;p-additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== COMPATIBILITY ===&lt;br /&gt;
&lt;br /&gt;
microformats 2 is backwards compatible in that in permits content authors to markup with both old and new class names for compatibility with old tools.&lt;br /&gt;
&lt;br /&gt;
Here is a simple example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;Chris Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
a microformats 2 parser would see the class name &amp;quot;h-card&amp;quot; and imply the one required property from the contents, while a microformats 1.0 parser would find the class name &amp;quot;vcard&amp;quot; and then look for the class name &amp;quot;fn&amp;quot;. no data duplication is required. this is a very important continuing application of the &amp;lt;abbr title=&amp;quot;don't repeat yourself&amp;quot;&amp;gt;DRY&amp;lt;/abbr&amp;gt; [[principle]].&lt;br /&gt;
&lt;br /&gt;
And the above hyperlinked example with both sets of class names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;a class=&amp;quot;p-fn u-url n fn url&amp;quot; href=&amp;quot;http://factoryjoe.com/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-given-name given-name&amp;quot;&amp;gt;Chris&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;abbr class=&amp;quot;p-additional-name additional-name&amp;quot;&amp;gt;R.&amp;lt;/abbr&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-family-name family-name&amp;quot;&amp;gt;Messina&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VENDOR EXTENSIONS ===&lt;br /&gt;
&lt;br /&gt;
(this section was only discussed verbally and not written up during discussions - capturing here as it is topical)&lt;br /&gt;
&lt;br /&gt;
Proprietary extensions to formats have typically been shortlived experimental failures with one big recent exception.&lt;br /&gt;
&lt;br /&gt;
Proprietary or experimental CSS3 property implementations have been very successful.&lt;br /&gt;
&lt;br /&gt;
There has been much use of border radius properties and animations/transitions which use CSS properties with vendor-specific prefixes like:&lt;br /&gt;
&lt;br /&gt;
* -moz-border-radius&lt;br /&gt;
* -webkit-border-radius&lt;br /&gt;
&lt;br /&gt;
etc.&lt;br /&gt;
&lt;br /&gt;
Note that these are merely string '''prefixes''', not bound to any URL, and thus not namespaces in any practical sense of the word.  This is quite an important distinction, as avoiding the need to bind to a URL has made them easier to support and use.&lt;br /&gt;
&lt;br /&gt;
This use of vendor specific CSS properties has in recent years allowed the larger web design/development/implementor communities to experiment and iterate on new CSS features while the features were being developed and standardized.&lt;br /&gt;
&lt;br /&gt;
The benefits have been two-fold:&lt;br /&gt;
* designers have been able to make more attractive sites sooner (at least in some browsers)&lt;br /&gt;
* features have been market / real-world tested before being fully standardized, thus resulting in better features&lt;br /&gt;
&lt;br /&gt;
Implementers have used/introduced &amp;quot;x-&amp;quot; prefixes for IETF MIME/content-types for experimental content-types, MIME parameter extensions, and HTTP header extensions, per RFC 2045 Section 6.3, RFC 3798 section 3.3, and [https://secure.wikimedia.org/wikipedia/en/wiki/List_of_HTTP_header_fields#Common_non-standard_headers Wikipedia: HTTP header fields - non-standard headers] (could use RFC reference instead) respectively, like:&lt;br /&gt;
&lt;br /&gt;
* application/x-latex (per [https://secure.wikimedia.org/wikipedia/en/wiki/Internet_media_type#Type_x Wikipedia Internet media type: Type x])&lt;br /&gt;
* x-spam-score (in email headers)&lt;br /&gt;
* X-Pingback (per [http://en.wikipedia.org/wiki/Pingback Wikipedia:Pingback])&lt;br /&gt;
&lt;br /&gt;
Some standard types started as experimental &amp;quot;x-&amp;quot; types, thus demonstrating this experiment first, standardize later approach has worked for at least some cases:&lt;br /&gt;
&lt;br /&gt;
* image/x-png (standardized as image/png, both per [http://tools.ietf.org/html/rfc2083 RFC2083])&lt;br /&gt;
&lt;br /&gt;
There have been times when specific sites have wanted to extend microformats beyond what the set of properties in the microformat, and currently lack any '''experimental''' way to do so - to try and see if a feature (or even a whole format) is interesting in the real world before bothering to pursue researching and walking it through the microformats process.  Thus:&lt;br /&gt;
&lt;br /&gt;
'''Proposal:'''&lt;br /&gt;
* '*-x-' + '-' + meaningful name for root and property class names&lt;br /&gt;
** where &amp;quot;*&amp;quot; indicates the single-character-prefix as defined above&lt;br /&gt;
** where &amp;quot;x&amp;quot; indicates a literal 'x' for an experimental extension OR&lt;br /&gt;
** OR &amp;quot;x&amp;quot; indicates a vendor prefix (more than one character, e.g. like CSS vendor extension abbreviations, or some stock symbols, avoiding first words/phrases/abbreviations of microformats properties like dt-)&lt;br /&gt;
** e.g.&lt;br /&gt;
** &amp;quot;h-bigco-one-ring&amp;quot; - a hypothetical &amp;quot;bigco&amp;quot; vendor-specific &amp;quot;one-ring&amp;quot; microformat root class name.&lt;br /&gt;
** &amp;quot;p-goog-preptime&amp;quot; - to represent [http://www.google.com/support/webmasters/bin/answer.py?answer=173379 Google's &amp;quot;preptime&amp;quot; property extension] to [[hRecipe]] (aside: &amp;quot;duration&amp;quot; may be another property type to consider separate from &amp;quot;datetime&amp;quot; as it may be subject to different parsing rules.)&lt;br /&gt;
** &amp;quot;p-x-prep-time&amp;quot; - a possible experimental property name to be added to hRecipe upon consideration/documentation of real-world usage/uptake.&lt;br /&gt;
&lt;br /&gt;
Background - this proposal is a composition of the following (at least somewhat) successful vendor extension syntaxes&lt;br /&gt;
* [http://www.w3.org/TR/CSS21/syndata.html#vendor-keywords CSS 2.1 4.1.2.1 Vendor-specific extensions]&lt;br /&gt;
* IETF MIME/content-type &amp;quot;x-*&amp;quot; extensions per RFC 2045 Section 6.3. [http://en.wikipedia.org/wiki/Internet_media_type]&lt;br /&gt;
* IETF MIME experimental fields (e.g. x-spam-score)&lt;br /&gt;
* HTTP header extensions (e.g. x-pingback)&lt;br /&gt;
* note also [http://www.mnot.net/blog/2009/02/18/x- some critical thoughts from mnot]&lt;br /&gt;
&lt;br /&gt;
=== USERS ===&lt;br /&gt;
Need more tools and interfaces that:&lt;br /&gt;
* publish&lt;br /&gt;
* copy/paste&lt;br /&gt;
* right-click on a microformat&lt;br /&gt;
* share&lt;br /&gt;
* search results&lt;br /&gt;
&lt;br /&gt;
discussed some existing like: [[H2VX]] converts hCard to vCard, hCalendar to iCalendar&lt;br /&gt;
&lt;br /&gt;
how would we re-implement Live Clipboard today, making it easier for publishers and developers?&lt;br /&gt;
&lt;br /&gt;
=== SEE ALSO ===&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-brainstorming]] - moving more experimental / undeveloped / and rejected thoughts ideas here to simplify/progress *this* page further.&lt;br /&gt;
* [[microformats2-prefixes]]&lt;br /&gt;
* [[microformats2-faq]]&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* 2010-05-02 [[events/2010-05-02-microformats-2-0|microformats 2.0 discussion session at FOO East]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=hcard-examples-in-wild&amp;diff=64837</id>
		<title>hcard-examples-in-wild</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=hcard-examples-in-wild&amp;diff=64837"/>
		<updated>2015-03-06T01:56:55Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Individuals */ replace http://timvandamme.com/ (which no longer has an hCard) with mko's homepage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;hCard Examples in the wild&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;height:7.5em;text-align:center;font-weight:bold;font-size:larger&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;padding:3em 0;float:left;width:33%&amp;quot;&amp;gt;[[hcard-examples-in-wild#examples_by_category|Want hCards]]&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;padding:3em 0;float:left;width:33%&amp;quot;&amp;gt;[[hcard-examples-in-wild#new_and_uncategorized_examples|Have hCards]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is an '''informative''' section of the [[hcard|hCard specification]].&lt;br /&gt;
&lt;br /&gt;
The following sites have published [[hcard|hCards]], and thus are a great place to start for anyone looking for examples &amp;quot;in the wild&amp;quot; for inspiration, or try parsing and indexing.&lt;br /&gt;
&lt;br /&gt;
== new and uncategorized examples ==&lt;br /&gt;
'''Have hCard?''' If you have a site with hCard(s), add it to the top of this list. Include at least one URL to a page that includes actual [[hcard|hCard]] markup. Examples without direct links to pages with hCard(s) will be removed or edited to only link to page(s) with hCard. Check back after a few days, to see if anyone has found any problems with the examples supplied. Note that examples may be categorized and moved to the grouped section below.&lt;br /&gt;
[http://www.telsgroup.com.de/services/railroad_freightage/ bahnspedition]&lt;br /&gt;
You may want to use these buttons on your pages with hCards. See [[buttons#hCard]] for any recent additions.&amp;lt;br/&amp;gt;http://www.davidjanes.com/images/mf_hcard.png &amp;lt;!-- was originally http://www.crowley.nl/images/hcard.png --&amp;gt; &amp;lt;!-- http://rbach.priv.at/2006/buttons/hcard.png --&amp;gt; http://www.boogdesign.com/images/buttons/microformat_hcard.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- add a URL to a page with hCard directly here --&amp;gt;&lt;br /&gt;
* http://www.appliancedoctorcleveland.com uses hcard markup on the footer at bottom of each webpage.&lt;br /&gt;
* [http://residential.samsa.com/contact-us/ Computer Repair Help] uses hCard formatting for contact information on contact us page.&lt;br /&gt;
* http://cadmap-utilities.co.uk uses hcard markup on the footer of each webpage&lt;br /&gt;
* [http://mikolajczyz.pl/en/ Mikołaj Czyż] uses hCards for contact info for all languages of this psychotherapy practice website.&lt;br /&gt;
* [http://www.northstar3c.com/shop/ Northstar Country Candle Co.] has a hidden hCard site wide.&lt;br /&gt;
*http://cadmapstudio.co.uk/ used hCard on the footer of each page on a Cad Services Site.&lt;br /&gt;
*http://asiabizsetup.net/ used hCard formatting for contact information on contact us page.&lt;br /&gt;
* [http://www.okinawan-lyrics.com/ Okinawan-lyrics] uses h-Card schema for author info in h-feed and h-entry.&lt;br /&gt;
* [http://rick.cogley.info/ Rick Cogley] uses hCard on his [http://rick.cogley.info/about About] page. &lt;br /&gt;
* [http://www.printsome.com/ Printsome] uses hCard schema for [http://www.printsome.com/about About us].&lt;br /&gt;
* [http://www.creditcardprocessingspace.com/best-credit-card-processor/ CCPS] uses hCard schema for contact information.&lt;br /&gt;
* [https://www.qoolife.com/ Qoolife] uses hCard formatting for public profiles of doctors (ex: [https://www.qoolife.com/en/users/jesus-garrido-garcia Dr Garrido]) and their online practices (ex: [https://www.qoolife.com/en/s/el-puericultor Puericultor Clinic]).&lt;br /&gt;
* [http://www.strikespots.com/bowling-centers/ Strike Spots] uses hCard formatting for public profiles of bowling centers throughout North America.&lt;br /&gt;
* [http://www.leppers.nl/ Leppers Zonwering Veenendaal] uses an hCard for contact information on the website.&lt;br /&gt;
* [http://www.chrislongley.co.uk/contact-chris-longley-digital-media.html Chris Longley Digital Media] uses hCard formatting for business address information on Contacts page&lt;br /&gt;
* [http://www.bfdlawyers.com BFD Lawyers] uses hCard formatting for business address information.&lt;br /&gt;
* [http://www.topbanklocations.com Top bank locations in USA] uses hCard for on banks list in all US states and bank profile pages.&lt;br /&gt;
* [http://en.datocapital.com/ Dato Capital] uses hCard for millions of public profiles of company executives, Example: [http://en.datocapital.com/es/executives/Eduardo-Amo-Garcia.html Executive profile]&lt;br /&gt;
&lt;br /&gt;
* [http://www.iprocess.firm.in/ iProcess] uses hCard for binding its legal location derived from founder specifically, though its an online only business firm.&lt;br /&gt;
* [http://www.likeminders.co.uk/contact-register/contact-us/ Like Minders Babysitting Agency] uses hCard markup on their contact page. However, it has some problems:&lt;br /&gt;
** bad: invisible duplicate data using style=&amp;quot;display:none&amp;quot;&lt;br /&gt;
*** update 2012-09-01: only the country-name is display:none now. &lt;br /&gt;
** bad: empty &amp;quot;fn&amp;quot; (should be on same element as &amp;quot;org&amp;quot;)&lt;br /&gt;
*** still a problem 2012-09-01.&lt;br /&gt;
** suboptimal: email could be marked up but isn't&lt;br /&gt;
*** fixed 2012-09-01!&lt;br /&gt;
** suboptimal: URL could be marked up but isn't&lt;br /&gt;
*** fixed 2012-09-01!&lt;br /&gt;
Thank you for the feedback on problems - improvements made - hope better now!&lt;br /&gt;
** 2012-09-01: There are some worse problems now, e.g. the &amp;amp;lt;a class=&amp;quot;url fn org&amp;quot;&amp;amp;gt; element has no contents, so there is no &amp;quot;fn&amp;quot; or &amp;quot;org&amp;quot;! This may be due to an accidental &amp;amp;lt;/p&amp;amp;gt;. Better to simply update the div class=&amp;quot;org&amp;quot; to div class=&amp;quot;fn org&amp;quot;, and make the a href class=&amp;quot;url&amp;quot; only.&lt;br /&gt;
*** 2012-09-10&lt;br /&gt;
Thank you again - the second round of improvements have been made - hope better take 2!&lt;br /&gt;
&lt;br /&gt;
* [http://www.historichotels.org Historic Hotels of America] uses hCard for location pages for each property.  Example: [http://www.historichotels.org/hotels-resorts/the-wigwam/location.php Historic Hotels in Litchfield Park, Arizona - The Wigwam]&lt;br /&gt;
* [http://www.boxuk.com/ Box UK] uses hCard for location pages for each of it's office locations.  Example: [http://www.boxuk.com/contact-us/our-offices/ Office Locations]&lt;br /&gt;
* [http://www.oxagile.com/ Oxagile] uses hCard for its location pages, and each location is marked with hCard.  See here: [http://www.oxagile.com/contacts/ Office Locations]&lt;br /&gt;
* [http://www.ehomeservices.com.sg E Home Services] uses hCard on Contact us page [http://www.ehomeservices.com.sg/contact.html E home Services Contact] &amp;amp; Article page [http://www.ehomeservices.com.sg/articles.html E home Services Blog]&lt;br /&gt;
* [http://www.estrategiadelcontenido.com EstrategiadelContenido.com] uses hCard and Microdata markup in the contact section.&lt;br /&gt;
* [http://www.agileinfoways.com/ AgileInfoways] uses hCard for its location pages, and each location is marked with hCard.  See here: [http://www.agileinfoways.com/contact-us/ Office Locations]&lt;br /&gt;
* [http://www.aquaviaspa.com AquaviaSpa.com] uses hCard and Microdata markup in the contact section and the retailers and SAT list.&lt;br /&gt;
* [http://www.ainstainer.com/ Ainstainer] uses hCard for office locations page, and each location is marked with hCard.  See here: [http://www.ainstainer.com/who-we-are/ukraine-it-outsourcing-locations Locations]&lt;br /&gt;
* http://www.cadmap.co.uk/ Cadmap Land &amp;amp; Building Surveyors uses hCard markup on the footer of each page.&lt;br /&gt;
* [http://expertdent.ca/en ExpertDent dental clinics] uses hCard markup in the header as well as the contact section for its three dental care clinics].&lt;br /&gt;
* [http://www.vdental.co.uk/ Vitality Dental Care] implements hCard markup of their contact details.&lt;br /&gt;
* [http://www.us-inverters.com/ US-Inverters.com] uses hCard, geo, and hProduct markup on home page, [http://www.us-inverters.com/contact/ contact page] and [http://www.us-inverters.com/where-to-buy/china.php distributor pages], and on [http://www.us-inverters.com/inverter-chargers/ms4124e.php product pages].&lt;br /&gt;
* [http://www.henryandjames.co.uk/contact/ Henry &amp;amp; James Estate Agents] use hCard markup on their contact page.&lt;br /&gt;
* [http://wpoosc.com.au/ West Pymble Out of School Care] uses hCard markup for their physical address in the sidebar.&lt;br /&gt;
* [http://www.your-move.co.uk/ YOUR MOVE estate agents]uses hCard markup for branch addresses.  Example: [http://www.your-move.co.uk/estate-agent/york.html York Branch Page]&lt;br /&gt;
* [http://www.akama.com Akama (business listings)] uses hCard on companies profiles page [http://www.akama.com/company/Ennis_Business_Forms_Inc_a8d1a35818.html Sample company profile page]&lt;br /&gt;
* [http://telcoavi.es Telco Audio Vídeo e Ilumianción] uses hCards on the contact page. Example:[http://telcoavi.es/contacto.php Contacto]&lt;br /&gt;
* [http://nicolasbouliane.com Nicolas Bouliane - Conception de sites internet] uses hCards on the contact page as well as in the header and footer.&lt;br /&gt;
* [http://www.lslps.co.uk/ LSL Property Services]uses hCard markup for details of Press Contacts.  Example: [http://www.lslps.co.uk/news Property News Page]&lt;br /&gt;
* [http://www.breaflorist.net/pages/Florist-La-Habra/display La Habra Florist] - Uses hCard markup in their la habra florsit page below.&lt;br /&gt;
* [http://iprefer.com/ I Prefer Guest Benefit Program] uses hCard for each property page.  Example: [http://iprefer.com/luxury-hotel/Campinas/Royal-Palm-Tower/ Royal Palm Tower, Design Hotels in Campinas]&lt;br /&gt;
* [http://www.binvisions.com/ CSS3 and HTML5 Blog] - uses hCard to get vCard of users who make comments on blog posts. Example: [http://www.binvisions.com/articles/seo-using-css-text-indent-or-images-for-logos/ CSS Text-Indent or Images for Logos in SEO?]&lt;br /&gt;
* [http://collectiverecyclers.com Collective Recyclers] - Uses hCard for contact details.&lt;br /&gt;
* [http://www.stylebar.de/ stylebar websolutions] Uses an hCard for the contact information on the right site in the website.&lt;br /&gt;
* [http://southpawed.com/ Steve Holland] uses hCard for his contact details.&lt;br /&gt;
* [http://sterlinghotels.com Sterling Hotels] uses hCard for each property page on their website, e.g. [http://sterlinghotels.com/smart-hotel/Hong-Kong/The-Fleming/ The Fleming, Smart Hotels in Hong Kong]&lt;br /&gt;
* [http://daniele.gobbetti.name daniele.gobbetti.name] uses hCard for his own profile. The template is released under CC-BY-SA and available on [https://github.com/danielegobbetti/about-me github]&lt;br /&gt;
* [http://www.sabzoo.de SABZOO.de] uses hCard for the about us page. Here is the direct link: [http://www.sabzoo.de/ueber-sabzoo/impressum.html About us]&lt;br /&gt;
* [http://www.coinspcgs.com Coins PCGS] uses hCard for the about us page.  Example: [http://www.coinspcgs.com/p/about.html About PCGS Coins]&lt;br /&gt;
* [http://summithotels.com Summit Hotels and Resorts] uses hCard for each property page on the website.  Example: [http://summithotels.com/luxury-hotel/Honolulu/Waikiki-Parc-Hotel/ Waikiki Parc Hotel, Luxury Hotels in Honolulu]&lt;br /&gt;
* [http://www.gauntsproperty.co.uk/ Gaunts Property Leeds] implements hCard in each of their business park locations contact pages&lt;br /&gt;
* [https://plus.google.com/ Google+] uses hCard for each user profile and company page.  Example: [https://plus.google.com/112111196451586545452/ ReadWriteWeb profile page]&lt;br /&gt;
* [http://www.coatncast.de/ Coat'n Cast] has hCard formatted address information in the page markup, mainly to provide data to geolocation services.&lt;br /&gt;
* [http://fiestapartyjumpers.com Party Rentals Simi Valley] is a party rental business using hCard and Microdata markup in footer section and soon will be on hompage.&lt;br /&gt;
* [http://www.lomboktrans.com/daftar-harga/ Harga Sewa Mobil Lombok] is a company car rental using hCard and Microdata markup in about us and contact us.&lt;br /&gt;
* [http://turfwholesalersusa.com Artificial Turf Los Angeles] a los angeles turf wholesaler using hcard markup in the footer area.&lt;br /&gt;
* [http://preferredboutique.com/ Preferred Boutique] uses hCard for each property page on their website, e.g. [http://preferredboutique.com/luxury-hotel/Atlanta/TWELVE-Atlantic-Station/ TWELVE Atlantic Station, Luxury Boutique Hotels in Atlanta.]&lt;br /&gt;
* [http://www.rinjanitrans.com/sewa-bus-pariwisata-di-lombok.htm Bus rental company in Lombok] is a bus rental company using hCard and Microdata markup in price list page and about us.&lt;br /&gt;
* [http://www.last.fm Last.fm] uses hCard for event pages and user profile pages (however user profile hCard information is very incomplete and sub-optimal) e.g. [http://www.last.fm/event/1448900+She+-+Him+at+Millennium+Park+on+7+June+2010 She &amp;amp; Him at Millennium Park (Chicago) on 7 Jun 2010 – Last.fm]&lt;br /&gt;
* [http://www.auntiecleaner.com.sg Auntie Cleaner] uses hCard on Contact us page [http://www.auntiecleaner.com.sg/contact.html Auntie Cleaner Contact] &amp;amp; Article page [http://www.auntiecleaner.com.sg/articles.html Auntie Cleaner Blog]&lt;br /&gt;
* [http://www.msichicago.org/ The Museum of Science and Industry in Chicago] uses hCard for their address in the &amp;quot;museum location&amp;quot; area on each page.&lt;br /&gt;
* [http://www.brewcamp.com/ Brew Camp | Chicago's Local Home Brew Shop] uses hCard for the address under the map on the main page.&lt;br /&gt;
* [http://www.larsbeck.info/ larsbeck.info] uses hCard for personal contact information.&lt;br /&gt;
* [http://www.linkedin.com LinkedIn] uses hCard for each user profile page.&lt;br /&gt;
* [http://www.kitchenhomeware.co.uk Kitchenhomeware UK] uses hCard markup for their contact page&lt;br /&gt;
* [http://www.absolutesolutions.com.sg @bsolute Solutions] uses hCard on Contact us page [http://www.absolutesolutions.com.sg/contact.htm @bsolute Solutions Pte Ltd.]&lt;br /&gt;
* [http://www.tripadvisor.com TripAdvisor] uses hCard on property pages, however it appears that they have lumped in locality, region, and postal-code into locality.  Example: [http://microformatique.com/optimus/?uri=http://www.tripadvisor.com/Hotel_Review-g42763-d90229-Reviews-Detroit_Marriott_Troy-Troy_Michigan.html Detroit Marriott Troy]&lt;br /&gt;
* [http://www.megatravel.com.mx/ Mega Travel] uses an hcard for the contact information in the web site footer [http://www.megatravel.com.mx/ Mega Travel].&lt;br /&gt;
* [http://www.thebasketcasedeli.com The Basket Case Deli] uses hCard for organizational addresses as well as employee contact information e.g. [http://thebasketcasedeli.com/about.php About The Basket Case Deli].&lt;br /&gt;
* [http://www.thejokes.net TheJokes.Network] uses hCard markup on user profile pages e.g. [http://thejokes.net/profile.php?uid=3 User Profile for Sid Parker]&lt;br /&gt;
* [http://www.therecipedepository.com The Recipe Depository] uses hCard markup on user profile pages e.g. [http://www.therecipedepository.com/user/jay User Profile for Jay Allen].&lt;br /&gt;
* [http://www.web-id.nl/ Web-id. Webdesign, SEO and Software] Uses an hCard for the contact information.&lt;br /&gt;
* [http://advanced-simple.de/ Advanced Simple] uses an hcard for the contact information in the page footer of their website.&lt;br /&gt;
* [http://profispan.de/galerie/ Profi Span GmbH - Holz in aller Form] uses hcard for the contact information box on the right side of nearly every page.&lt;br /&gt;
* [http://hochzeiten-partys-feten.de/ Hochzeiten Partys &amp;amp; Feten] uses hcard markup for the contact information box on every page.&lt;br /&gt;
* [http://www.partyrentalsplace.com/ Party Rental Place] uses hCard markup on the testimonials page of their website.&lt;br /&gt;
* [http://www.getlocalmaps.com/ Google Map Marketing] is using hCard on the contact page of their website.&lt;br /&gt;
* [http://www.internetmarketingnuke.com/internet-marketing-tools/bookmarking-demon-review-1/ Bookmarking demon review]. Uses an hCard on their contact page.&lt;br /&gt;
* [http://www.themexicanjewelry.com/index.php?route=information/information&amp;amp;information_id=14 The Mexican Jewlry]. Uses an hCard for the contact information with OpenCart.&lt;br /&gt;
* [http://www.garmentprintiIng.co.uk/contact-us.php Garment Printing]. Uses an hCard for the contact information.&lt;br /&gt;
* [http://www.mlgphotography.co.za/ MLG Wedding Photography]. Uses an hCard for the contact information.&lt;br /&gt;
* [http://www.e-kyttaritida.gr/ Κυτταρίτιδα]. E-kyttaritida.gr uses an hCard on their contact page.&lt;br /&gt;
* [http://www.tierarztpraxis-kellerberg.de/ Tierarztpraxis Kellerberg Steingaden]. A veterinary practice that uses hCard markup to provide contact information.&lt;br /&gt;
* [http://www.bastajulborden.se/julbord-p%C3%A5-junibacken.html]. Uses an hCard for the contact information.&lt;br /&gt;
* [http://www.bastajulborden.se/.html]. Uses an hCard for the contact information.&lt;br /&gt;
* [https://www.redflymarketing.com/contact-us/ Redfly Ireland]. Uses an hCard for the contact information.&lt;br /&gt;
* [http://www.designliga.com Designliga] uses hCard markup with company contact information on its Contact and Imprint pages.&lt;br /&gt;
* [http://allinsuranceinfo.org/agents/alabama/montgomery.html AllInsuranceInfo.org] uses hCard markup to format insurance agents directory.&lt;br /&gt;
* [http://www.seveermedia.com/ Seveer Media] uses hCard markup and allow for vCard download on their contact page.&lt;br /&gt;
* [http://london.alleycats.co London.Alleycats.co], by Alleycats.co, uses hCard to format all their fixed-gear directory listings.&lt;br /&gt;
* [http://www.spaachat.com Spaachat.com], by Aquavia Spa, uses hCard and Microdata markup in the contact section and the retailers list.&lt;br /&gt;
* [http://www.waketoolz.de/info/impressum.html Waketoolz] uses hCard markup on their contact page.&lt;br /&gt;
* [http://www.thedentureclinic.co.uk/ The Denture &amp;amp;amp; Implant Clinic] uses hCard markup and allow for vCard download on their contact page.&lt;br /&gt;
* [http://ReallyGoodEnergy.com/ RGE] uses hCard markup and allows for vCard download on their page footers.&lt;br /&gt;
* [http://pHElixir.com/ pH Elixir] uses hCard markup and allows for vCard download on their page footers.&lt;br /&gt;
* [http://www.air-bourne.com/ Airbourne AC and Heating] uses hCard in footer of the air conditioning website.  Example: [http://www.air-bourne.com/ Houston Air Conditioning]&lt;br /&gt;
* [http://theworkoutwarehouse.net/ Gym Riverview MI] uses hCard inside the footer of the workout fitness website.  Example: [http://theworkoutwarehouse.net/ Weight Training Riverview MI]&lt;br /&gt;
* [http://www.carleasinguk.com/ www.carleasinguk.com] uses hCard markup and allow for vCard download on their page footers.&lt;br /&gt;
* [http://www.naples-fl-real-estate.com Naples Florida Real Estate] uses hCard markup and allow for vCard download on their contact page.&lt;br /&gt;
* [http://www.technicsgroup.com/ Technics Group] uses hCard markup and allow for vCard download on their page footers.&lt;br /&gt;
* [http://www.manageathome.co.uk/ Manage At Home] uses hCard markup and allow for vCard download on their contact page.&lt;br /&gt;
* [http://www.cleverelectric.com/ San Jose Electrician] uses hCard electrian footer page of their website. to see an example in action visit [http://www.cleverelectric.com/san-jose-electrical-service.html/ San Jose Electrical Contractor]&lt;br /&gt;
* [http://www.skin-care-health.org/spots-on-skin.html Skin Care &amp;amp; Health] uses hCard markup on their contact page.&lt;br /&gt;
* [http://www.voptical.co.uk/ Vitality Opticians] implements hCard markup of their contact details.&lt;br /&gt;
* [http://www.bed-bugs-handbook.com/bed-bugs.html Bed Bugs Handbook] uses hCard markup on their contact page.&lt;br /&gt;
* [http://www.appliancerepairmedic.com/ Appliance Repair Bergen County] implements hCard in the footer area of their appliance repair site.&lt;br /&gt;
* [http://www.adalberto.co.uk/ Adalberto Estate Agents] implements hCard markup on their prices pages.&lt;br /&gt;
* [http://www.synergydental.org.uk/ Synergy Dental Group] implements hCard markup on their dental surgeries contact pages.&lt;br /&gt;
* [http://www.cahilldentalcare.co.uk/ Cahill Dental Care] uses hCard markup on their address in the footer which can be downloaded as a vCard.&lt;br /&gt;
* [http://www.returnondigital.com/ Return On Digital] uses hCard markup on their site wide footer addresses and on their [http://www.returnondigital.com/about-us/dave-ashworth.php staff pages] - these can also be downloaded as vCards.&lt;br /&gt;
* [http://www.arouatek.com/eng/ Aroua Range hoods] uses hCard markup on their [http://www.arouatek.com/eng/contact.php Contact] page.&lt;br /&gt;
* [http://www.gembuild.co.uk/contact.htm Gem Build UK ] uses an hCard on their contact page.&lt;br /&gt;
* [http://www.1host.gr/web-hosting/ web hosting] uses hCard markup with company contact information on its Contact and Imprint pages.&lt;br /&gt;
* [http://nwnasalestraining.com/contact/ Noel Walsh] - uses hCard on the contact page as well as a downloadable vCard.&lt;br /&gt;
* [http://www.formundcode.de/ Form &amp;amp; Code] - uses hCard with company contact details in page header.&lt;br /&gt;
* [http://www.dptraining.co.uk/contact/ DP Training] - uses hCard with H2VX's bookmarklet to allow users to download the details as a vCard.&lt;br /&gt;
* [http://starthilfeberlin.de/ Starthilfe Berlin] - uses hCard (and geo, XFN, rel-license, rel-profile) in (Joomla HTML5) '&amp;lt;#footer role=&amp;quot;contentinfo&amp;quot; &amp;lt;footer #footertrademark &amp;lt;address' in all pages.&lt;br /&gt;
* [http://trade-service.eu/kontakt/ Trade-Service] - uses hCard in (WP HTML5) '&amp;lt;.address role=&amp;quot;contentinfo&amp;quot; &amp;lt;address' in all pages, and extended hCard in the [http://trade-service.eu/kontakt/ contact page].&lt;br /&gt;
* [http://lanceguyatt.com/ lanceguyatt.com] - uses hCard as the index page.&lt;br /&gt;
* [http://www.easi-services.fr easi services] utilise hCard dans sa page de [http://www.easi-services.fr/contact contact].&lt;br /&gt;
* [http://www.umovefree.com/ UMoveFree] - Uses hCard for rental property address. Example: [http://www.umovefree.com/Apartment/cirque-apartments-dallas-tx/ Cirque Apartments Dallas].&lt;br /&gt;
* [http://www.newtosandiego.com/ NewToSanDiego] - Uses hCard for organization and business address. Example: [http://www.newtosandiego.com/Ocean-Beach-People's-Organic-Foods-Co-op/ Ocean Beach People's Organic Foods Co op].&lt;br /&gt;
* [http://www.northwooduk.com/ Northwood Estate Agents] use hCard on their branch landing pages, here is [http://www.northwooduk.com/letting-agents/edinburgh an example].&lt;br /&gt;
* [http://www.signsbannerswraps-houston.com/ Car Wraps Houston] uses hCard on the footer section at the bottom of page see [http://www.signsbannerswraps-houston.com/vehicle-graphics-and-car-wraps-houston.html vehicle wraps houston] page.&lt;br /&gt;
* [http://www.elevatelocal.co.uk Elevatelocal] uses hCard on their [http://www.elevatelocal.co.uk/contact Contact Us] page.&lt;br /&gt;
* [http://lucumalabs.com Lúcuma labs] uses hCard in the index page.&lt;br /&gt;
* [http://railsjobs.co.uk Ruby on Rails Jobs UK] uses hCard in the footer.&lt;br /&gt;
* [http://www.whatcomweb.com/ Whatcom Web SEO in Bellingham, Washington ] uses hCards on the contact page. &lt;br /&gt;
* [http://www.ufirstgroup.com/ UFirst Group] uses an hCards in the footer of every page&lt;br /&gt;
* [http://www.brodwax.com/ Brodwax Lighting] uses an hCard on their [http://www.brodwax.com/fluorescent-lighting-fixtures.html fluorescent light fixtures] page.&lt;br /&gt;
* [http://tripedge.co.uk Tripedge] uses hCard in the footer&lt;br /&gt;
* [http://www.appliancerepairbergencountynj.com/ Appliance Repair Bergen County NJ] uses hCard code in the footer of the appliance repair site.&lt;br /&gt;
* [http://www.morgenson.com/ Morgenson Realty] uses hCard on their [http://www.morgenson.com/cameron-heights-apartments.php Apartment Listing] pages.&lt;br /&gt;
* [http://www.bientek.com/ BienTek] uses hCard on their [http://www.bientek.com/about-us/ About page].&lt;br /&gt;
* [http://www.yourtraces.com YourTraces] uses hCard on their profiles [http://www.yourtraces.com/biography/1120.html example].&lt;br /&gt;
* [http://www.findwell.com findwell Real Estate] uses hCard on their [http://www.findwell.com/contact Contact Us] page.&lt;br /&gt;
* [http://droidvsiphone.org Droid vs iPhone] uses hCard in the footer&lt;br /&gt;
* [http://howdoyouknowifyouhavebedbugs.com HowDoYouKnowIfYouHaveBedBugs.com] uses hCard in the footer&lt;br /&gt;
* [http://www.schiessle.org schiessle.org] uses hCard at the index/contact page&lt;br /&gt;
* [http://www.deadbedbugs.co.uk/ deadbedbugs] deadbedbugs use hCard on their [http://www.deadbedbugs.co.uk/contact.html contact page].&lt;br /&gt;
* [http://johanramon.fr/ Johan Ramon] uses hCard on his resume. &lt;br /&gt;
* [http://www.saveontapestries.com/ Wall Art Shop] uses hCards on all contact pages, including their [http://www.saveontapestries.com/blog/ Wall Art Blog] and [http://www.saveontapestries.com/message.php Contact Us] Page&lt;br /&gt;
* [http://www.placedash.com/ placedash] uses hCard on all place pages, such as [http://accountants.placedash.com/b/4591 Steven R Aron CPA] and [http://taxconsultants.placedash.com/b/21916885 KPMG]&lt;br /&gt;
* [http://kinsellatax.co.uk/ Kinsella Tax Investigations] uses hCard markup on all contact pages. &lt;br /&gt;
* [http://www.slimmeria.com/bookings-contact Slimmeria Detox Retreat ]  in the UK uses an hCard on the Bookings and Contact page.&lt;br /&gt;
* [http://www.airbourneairconditioning.com/houston-ac-repair.html Houston AC Repair ]  in Houston uses an hCard on the footer of the air conditioning website..&lt;br /&gt;
* [http://www.iluminacionmidava.com/ Iluminación Midava, SL ]  in Spain uses an hCard on their pages.&lt;br /&gt;
* [http://shop.artgpa.com.ua/contacts.html ArtGPA SHOP in Ukraine ] uses an hCard on their contact page.&lt;br /&gt;
* [http://clothesonline.info/ ClothesOnline] uses hCard to identify clothing brands, shops and users. Example: [http://clothesonline.info/shops/mark-spencer Mark &amp;amp; Spencer].&lt;br /&gt;
* [http://www.beltmann.com Beltmann Relocation Group] uses an hCard on their [http://www.beltmann.com/atlanta-movers.aspx Atlanta Movers] page.&lt;br /&gt;
* [http://www.therapistinlondon.com/ Therapist in London  ] Delma Walsh uses an hCards in the footer of every page.&lt;br /&gt;
* [http://www.novelwebdesigns.com/ Web Design &amp;amp; SEO] NWD uses an hCard on their contact page.&lt;br /&gt;
* [http://www.webscatalunya.com/ Webs Catalunya ] uses an hCards in the footer of every page.&lt;br /&gt;
* [http://rinklinks.ca/ RinkLinks.ca: A Comprehensive Rinks and Arenas Directory for North America] uses an hCard for every listing in their directory.&lt;br /&gt;
* [http://immotek.fr/ Immotek general contractor in Toulouse, France] uses hCard in the footer of every page (plus hAtom on entries).&lt;br /&gt;
* [http://www.aoinstitute.com/ Advanced Orthopaedic Institute ] uses an hCards on the footer of every page.&lt;br /&gt;
* [http://www.orchard-barn.co.uk/contact.htm Orchard House B&amp;amp;B ] uses an hCard on their contact page.&lt;br /&gt;
* [http://www.awsltd.co.uk/ AWS Leeds, Yorkshire] implements hCard markup on their contact data.&lt;br /&gt;
* [http://www.medivisas.com/contact.asp Medi Visas UK ] uses an hCard on their contact page.&lt;br /&gt;
* [http://www.premierlogos.co.uk/page/contact Premier Logo T Shirts ] uses hCard on the contact page.&lt;br /&gt;
* [http://eastsideentrepreneurs.ning.com/profile/MrsClean/ Mrs Clean House Cleaning ] uses hCards in the profile page.&lt;br /&gt;
* [http://www.thesanfordhouse.com/ The Sanford House Bed &amp;amp; Breakfast ] uses hCards in the footer of every page.&lt;br /&gt;
* [http://www.imap.cat/ Imap Internet Marketing] uses hCards in the footer of every page.&lt;br /&gt;
* [http://www.haraldjoergens.com/Copyright.html Harald Joergens Photography ] uses hCards on the page and in the footer of every page (see blog post [http://www.haraldjoergens.com/blog &amp;quot;From website to address book in one click&amp;quot;]).&lt;br /&gt;
* [http://www.ethoseo.com/ Ethoseo Internet Marketing in Washington State ] uses hCards in the footer of every page.  &lt;br /&gt;
* [http://www.popalockofjacksonville.com/ Pop-A-Lock Locksmith Jacksonville] is using hCard in the footer on all the pages on their website and the hReview code on their testimonials page [http://www.popalockofjacksonville.com/jacksonville-reliable-safe-locksmith.html/ Pop-A-Lock Locksmith Jacksonville Testimonials]&lt;br /&gt;
* [http://Tutiendadeinformatica.com/ oferta de portatiles] - uses hCard as the index page.&lt;br /&gt;
&lt;br /&gt;
* [http://www.harleytherapy.co.uk Harley Therapy, Counselling London] uses an hCard (Organisation) on the home page as well as an hcard for an individual practitioner on the [http://www.harleytherapy.co.uk/psychiatrists-london.htm Psychiatrist] page.&lt;br /&gt;
* [http://www.mwmachineshop.com/ M &amp;amp; W Machine Shop] is using hCard in the footer on the entire site.&lt;br /&gt;
* [http://carmela.co.uk/ Carmela Make-up] is using hCard on most pages of her site, including the [http://carmela.co.uk/wedding-make-up.htm wedding make-up] page.&lt;br /&gt;
* [http://www.findaporsche.com/ Find a Porsche] is using hCard on their [http://www.findaporsche.com/?page_id=17 Contact Us] page.&lt;br /&gt;
* [http://www.atrendyhome.com/ A Trendy Home - Home Improvement Store] is using hCard on their [http://www.atrendyhome.com/contactus.html Contact Us] page.&lt;br /&gt;
* [http://tedswoodworkingplan.com/ Teds Woodworking] uses hcard for their site information.&lt;br /&gt;
* [http://www.mrscleanusa.com/ Mrs. Clean's Cleaning Service] is using hCard on their [http://www.mrscleanusa.com/en/cleaning-services/mrs-clean/about-us.html About Us] page.&lt;br /&gt;
* [http://www.merrittsforhair.co.uk/ Merritts for Hair] is using hCard on their [http://www.merrittsforhair.co.uk/contacts/ Contact Us] page.&lt;br /&gt;
* [http://www.alwaysonmessage.com/contact/get-in-touch.aspx Always on Message] is using hCard on their Contact Us page and are interested to see/hear how hCard's can be used in Smartphone Apps,&lt;br /&gt;
* [http://sroe.home.cern.ch/sroe/sroe/Welcome.html Shaun Roe] is using hCard on his work page at CERN,&lt;br /&gt;
* [http://www.localdatabase.com/ Local Database] uses hCard on all category and business profile pages, [http://www.localdatabase.com/texas/Houston/Veterinarians/ Houston Vets]&lt;br /&gt;
* [http://www.pinbud.ca/ www.PinBud.ca and www.PinBud.com (a search and get quotes website)] uses hCard on all the listing pages, example: [http://www.pinbud.ca/list-services/475-Personal-trainers-in-Calgary,%20AB Personal trainers in Calgary]&lt;br /&gt;
* [http://www.quippd.com/popular quippd] uses hCard on profile pages and story listings.&lt;br /&gt;
* [http://www.davidrivers.name David Rivers] uses hCard markup on his [http://www.davidrivers.name/contact Contact David Rivers] page&lt;br /&gt;
* [http://www.pabloestrada.us/pe/pablo.estrada.html Pablo Estrada] uses hcard on his resume page.&lt;br /&gt;
* [http://www.nieruchomosci-czubak.pl/ AJ Czubak Nieruchomości] uses hcard markup in the fixed contact info section on the left and within the [http://www.nieruchomosci-czubak.pl/kontakt.html contact subpage]&lt;br /&gt;
* [http://www.metalgigs.de Metalgigs.de] uses hcard for the profile pages at metalgigs.de/userpage/username, see [http://www.metalgigs.de/userpage/Testuser]&lt;br /&gt;
* [http://www.ankeboelens.nl/ Anke Boelens Interieurvormgeving] uses hcard markup in page footer&lt;br /&gt;
* [http://ragtagntextile.org.uk Rag Tag 'n' Textile] - Mental health charity in Skye and Lochalsh, the Highlands of Scotland - uses hCards for locations of head office and craft shops]&lt;br /&gt;
* [http://atzkey.org/ Denis Bakunovitch] — IT professional — has nicely styled hCard&lt;br /&gt;
* [http://www.olaru.ca/ Maria Olaru - lawyer / avocat - Montreal Law Firm] uses hCard for the law office.&lt;br /&gt;
* [http://www.epinux.co.uk/contact Mike Shutlar at Epinux] uses hCard markup on his contact page.&lt;br /&gt;
* [http://nzia.org/practitioner-directory/ New Zealand Institute of Acupuncture] uses hCards to display member's contact details.&lt;br /&gt;
* [http://www.mamscatering.nl/ MAMS Catering] uses the drupal hCard module for contact information on the website.&lt;br /&gt;
* [http://www.ialphan.com Alphan Gunaydin] uses hCard markup throughout the home page (index).&lt;br /&gt;
* [http://www.phytodoc.de/therapeuten-suche/ PhytoDoc's database for therapists in Germany] uses hCards for contact data on the detail pages of every therapist. [http://www.phytodoc.de/therapeut/wiesloch/berthold-musselmann/ Examplary therapist's page].&lt;br /&gt;
* [http://www.charleschurch.com Charles Church House Builder] uses hCard for property development addresses and geo latitude and longitude. See [http://www.charleschurch.com/carmarthenshire_ammanford/pen-y-bryn-1067 Homes for sale in Ammanford] page for embedded hcard on property development pages.&lt;br /&gt;
* [http://www.canisphouse.com Canisp House Bed and Breakfast]Establishment uses hcard to mark up business address. Validates with Google Rich Snippets.&lt;br /&gt;
* [http://www.jondon.com/stores/index.htm Local Stores Locations Page], the store details on store pages are Hcard.&lt;br /&gt;
* [http://www.mrpainter.com.sg Mr Painter] uses hCard on Contact us page [http://www.mrpainter.com.sg/contact.html Mr Painter Contact] &amp;amp; Article page [http://www.mrpainter.com.sg/articles.html Mr Painter Blog]&lt;br /&gt;
* [http://www.sucklings.co.nz/contact-us Contact page of Sucklings Shoes Store], the store details are an Hcard.&lt;br /&gt;
* [http://www.a3architekten.com/ Contact details of a3architekten]. A combination of two hCards looking like one.&lt;br /&gt;
* [http://www.imap.cat]. A combination of two hCards looking like one.&lt;br /&gt;
* [http://www.sigmacom.nl/ Corporate website of Sigmacom]. hCards were implemented in the footer&lt;br /&gt;
* [http://www.fpc.wa.gov.au Forest Products Commission] hCards to markup addresses &amp;amp; contact info for:&lt;br /&gt;
** all its offices and media contacts: [http://www.fpc.wa.gov.au/content_migration/about_us/contacting_us.aspx office locations]&lt;br /&gt;
** search results for suppliers of timber within Western Australia: [http://www.fpc.wa.gov.au/BuyTimber/Search?Species=&amp;amp;Region= find a timber supplier]&lt;br /&gt;
* [http://www.hirners.com Hirners Hotel Guide] uses hCards to markup addresses and contact info of every property, including geo coordinates. Example: [http://www.hirners.com/properties/4-atlanta-hotel-in-vienna-austria Hotel Atlanta in Vienna, Austria]&lt;br /&gt;
* [http://www.cartuse-imprimante.ro/ Cartuse Imprimante], printers and printer cartridges supplier, uses an hCard on home page and contact page of the website.&lt;br /&gt;
* [http://www.seminee-bellfires.ro/ Seminee Bellfires], interior fireplaces design company uses an hCard on every page of the website.&lt;br /&gt;
* [http://www.eurodata.com.ro/ Eurodata Serv], IT consulting and service company uses an hCard on every page of the website.&lt;br /&gt;
* [http://www.chipwreck.de/blog/contact/ Mario Fischer] uses a hCard with his contact information&lt;br /&gt;
* [http://joebergantine.com/contact Joe Bergantine] has marked up his contact information with hCard and XFN&lt;br /&gt;
* [http://www.nonleaguegrounds.com nonleaguegrounds.com], a database of English non-league football stadiums, uses hCards on every specific club detail page.  Example: [http://www.nonleaguegrounds.com/gb/london/afc-wimbledon AFC Wimbledon]&lt;br /&gt;
* [http://thetruthaboutabs1.com/ Thetruthaboutabs] uses hcard for their site information.&lt;br /&gt;
* [http://www.simourix.nl/ Simourix Hosting] uses an hCard for contact information on the website.&lt;br /&gt;
* [http://www.aquastop-vochtwering.nl/ Aquastop vochtwering] uses an hCard on every page of the website.&lt;br /&gt;
* [http://www.kennysaunders.com/ Kenny Saunders] uses an hCard on for contact information on this business card website.&lt;br /&gt;
* [http://thesilverfishbug.com/ Silverfish Bug] uses hcard for their site information.&lt;br /&gt;
* [http://annuaire.leperon.fr/ L’Annuaire du Cheval] is a French directory of equestrian professionals. We have just added hCards to all the client pages. Sample one here [http://annuaire.leperon.fr/client/0b1s/tarder-camille-et-frederic Tarder]. We also added an 'add to your address book' button but had to take it out again as some Windows machines choked on the accents, not recognising the UTF-8.&lt;br /&gt;
*[http://www.cheapholidays.com/ Cheap Holidays] uses an hCard on each page footer.&lt;br /&gt;
*[http://www.flightline.co.uk/ Flightline] uses an hCard on each page footer.&lt;br /&gt;
*[http://www.affordablestorage.net.nz/contactus.html Affordable Storage] Uses hCard for contact information.&lt;br /&gt;
* [http://www.norfolkblackhistorymonth.org.uk/contact.html Norfolk Black History Month] - Uses hCard on the Contact page and throughout the site, providing contact information for event locations, organisers and partner organisations.&lt;br /&gt;
* [http://www.veganusofa.com/ VeganUSofA] - Uses hCard for organization and business address. Example: [http://www.veganusofa.com/index.php?listing=4 The All Vegan Store].&lt;br /&gt;
*[http://adrianindo.blogspot.com ADRIAN'S BLOG] have included hCard to introduce myself more closely with the visitors of my blog. the hCard has been listed as a name, blog url and organizations. This hCard you can see on the lower right sidebar of my blog layout. &lt;br /&gt;
* [http://www.canadianpokerexpo.com The Canadian Poker Expo (Toronto)], a Poker Lifestyle Expo focusing specifically on the Toronto market, is using hCard for [http://www.canadianpokerexpo.com/Contact-Us/Contact-Form their contact page] as part of their efforts to increase the site's local relavance.&lt;br /&gt;
* [http://www.semineeas.ro Seminee As], a Romanian fireplace manufacturer, uses hCard for [http://www.semineeas.ro/contact/ contact info] with optional vCard download.&lt;br /&gt;
*[http://www.gastrohep.com/aboutus.asp GastroHep.com] About Us page uses an hCard for the contact address.&lt;br /&gt;
*[http://wedding-slideshows.net/ Wedding Slideshows] uses hCard for business address and contact details.&lt;br /&gt;
*[http://leemannphotography.ca/?p=contact Lee Mann Photography] Uses an hCard on the main Contact page as well as the blog.Ideally it will soon be on the footer of every single page.&lt;br /&gt;
*[http://www.kimburgess.info Kim Burgess] Minimalist info website with hCard markup positioned throughout.&lt;br /&gt;
*[http://www.plumbset.co.uk/ContactUs.asp PlumbSet UK Ltd] Uses hCard for the contact address, including multiple street-address entries.&lt;br /&gt;
*[http://www.manuhealth.com/products/manuka-soap-75gm Manuhealth Natural Remedies] Uses hCard for the return address on product pages.&lt;br /&gt;
*[http://www.farmaciasarria.com/esp/mapa.php Farmàcia Sarrià - Farmàcia Finestres Capdevila] uses an hCard for his contact information.&lt;br /&gt;
*[http://www.naturesbestshot.com Nature's Best Shot Photography] - uses an hcard on the contact page&lt;br /&gt;
*[http://www.noomii.com/life-coach Noomii.com Coach Directory] - each professional life coach in the directory is an hcard&lt;br /&gt;
*[http://www.ethical-junction.org/member/org-2012.html Ethical Junction CIC - Profile page] We use hCard for every organisation on their profile page&lt;br /&gt;
*[http://www.bowtietv.com Bow Tie Television] Uses hCard for contact information on every page and in the contacts section.&lt;br /&gt;
*[http://www.tauruslogistics.co.nz/about/contact Taurus Logistics] Uses hCard for contact information.&lt;br /&gt;
*[http://www.professdiamond.com/ professdiamond] encodes Thai as UTF8 in an inline hCard at the bottom of every page.&lt;br /&gt;
*[http://avonvalleylocalguide.iinet.net.au/ Avon Valley Local Guide] uses hCard for contact information of advertisers.&lt;br /&gt;
*[http://www.arizonafirstresponse.com/ Arizona First Response] uses an hCard on each page footer.&lt;br /&gt;
*[http://dillingham.me.uk/ Iain Dillingham] uses an hCard on each page footer, and has a styled example (with the microformats logo) on his [http://dillingham.me.uk/contact.html contact page].&lt;br /&gt;
*[http://www.pixeflips.com/ Pixelflips Web &amp;amp;amp; Interface Design] hCard is used in the footer of all pages for easy access to contact information.&lt;br /&gt;
*[http://www.herminesperr.at/ Hermine Sperr, Qualified Practitionier of the Grinberg Method&amp;amp;reg; in Wien/Austria] A hcard is used for contact information on every page on her website.&lt;br /&gt;
* [http://www.ivycat.com/ IvyCat Website Services] - Web design &amp;amp; hosting firm uses hCard for business contact info. Example: [http://www.ivycat.com/contact/ Contact Us].&lt;br /&gt;
* [http://www.modeltrainswithlarry.com/ ModelTrainsWithLarry] - Uses hCard for organization and business address. Example: [http://www.modeltrainswithlarry.com/index.php?listing=502 Choo Choo Barn].&lt;br /&gt;
* [http://www.gardeningwithlarry.com/ GardeningWithLarry] - Uses hCard for organization and business address. Example: [http://www.gardeningwithlarry.com/index.php?listing=2681 United States Botanic Garden].&lt;br /&gt;
* [http://abyrvalg.com/ Abyrvalg] - russian city community. Uses hCard to display local businesses address. Example: [http://moscow.abyrvalg.com/biz/faq-cafe FAQ cafe in Moscow].&lt;br /&gt;
* [http://www.jdclark.org/v1 Jordan Clark], from the Swansea area of Wales in the United Kingdom, uses [http://www.jdclark.org/card hcard for contact information].&lt;br /&gt;
* [http://whichtwitterapp.com/ WhichTwitterApp] provides [http://whichtwitterapp.com/reviews/iphone/tweetie reviews of twitter apps] using hCard, hReview, rel-tag and rel-home.&lt;br /&gt;
* [http://www.robinleysen.be/Robin.html Robin Leysen] has a hCard on a separate page. Tried to be as complete as possible. hCard validated with Optimus.&lt;br /&gt;
* [http://www.jay-photographics.de/ Jay Photographics] Photographer from Stuttgart, Germany. The hcard format is used on all pages for contact information.&lt;br /&gt;
* [http://www.uniquesite.co.uk/ UNIQUEsite] Website designer based in Brighton, UK. Uses the hcard format for contact information.&lt;br /&gt;
* [http://www.slideshare.net/ SlideShare] uses hcard to identify its users. see [http://hcard.geekhood.net/?url=http%3A%2F%2Fwww.slideshare.net%2Fkcmani#result Validated hcard] and [http://www.slideshare.net/kcmani Mani's SlideShare profile]&lt;br /&gt;
* [http://chrisruppel.com Chris Ruppel], a web developer in Dallas, TX, uses an hcard for contact information site-wide (as well as XFN)&lt;br /&gt;
* [http://greenspiritgardeners.com/ Green Spirit Gardeners] uses the hCard format throughout the site, including on the portfolio page for [http://greenspiritgardeners.com/portfolio/ commercial clients] and the [http://greenspiritgardeners.com/contact/ contact] page.&lt;br /&gt;
* [http://www.dorettebos.nl/ Dorette Bos Coaching &amp;amp;amp; Training] uses hcard microformat on the [http://www.dorettebos.nl/contact.php contactpage]&lt;br /&gt;
* [http://volunteers.st/ Steffi &amp;amp;amp; the volunteers] is an Austrian band and uses hcards for [http://volunteers.st/ band-contact in the footer] and on the page of the [http://volunteers.st/crew.html crew]&lt;br /&gt;
* Turkish business directory website [http://www.firmasec.com/ firmasec.com] implements valid hCard and hReview-Aggregate for companies, contact information with geo tags and user comments. Example: [http://www.firmasec.com/firma/mmfzz-caprice-palace-hotel-didim/ Caprice palace hotel profile page]&lt;br /&gt;
* [http://www.textundkonzept.at Bernhard Ulrich] an Austrian copywriter uses the hcard format [http://www.textundkonzept.at on all pages of his website] for his contact information&lt;br /&gt;
* [http://www.powerbrand.at/contact.html POWERBRAND] a brand name development agency uses a [http://www.powerbrand.at/contact.html hcard for contact information]&lt;br /&gt;
*[http://www.koerperarbeit.net/ Anita Braunsberger, Qualified Practitionier of the Grinberg Method&amp;amp;reg; in Linz/Austria] A hcard is used for contact information on her website.&lt;br /&gt;
*[http://www.carpetscleansandiego.com Durbin's Carpet Care] displays a vCard for contact information and relevancy&lt;br /&gt;
*[http://www.nationalrural.org/organisation.aspx?id=96a3fc04-5c03-4d31-bb8a-2c55cc29aed4 National Rural Knowledge Exchange] uses an hCard with geo tags when displaying an organisations information&lt;br /&gt;
* [http://www.tinstar.co.uk/about-tinstar-design/contact-tinstar-design.html Tinstar Design] uses an hCard for company contact information.&lt;br /&gt;
* [http://www.interdixit.com/esp/contacto.php Interdixit] uses an hCard for his contact information.&lt;br /&gt;
* [http://www.sisnova.com/ Sisnova] uses hCard for his location pages.&lt;br /&gt;
* [http://www.fenoyarquitectura.com/esp/situacion.php Eduard Fenoy i Associats] uses an hCard.&lt;br /&gt;
* [http://www.deltronic.com/ Deltronic Corporation] of Santa Ana, CA has posted an hCard with geo tags on its [http://www.deltronic.com/contact.shtml Contact] page.  Background image of a contact card reinforces content.  For those without enabling browser extensions, both hCard &amp;quot;logo&amp;quot; and text link make vCard available via external parser.&lt;br /&gt;
* [http://transitionsmft.org/ Transitions Marriage and Family Therapy] has an hCard with geo tags in the footer of each page. There is also an hCard for each counselor on the [http://transitionsmft.org/about.php About] and [http://transitionsmft.org/contact.php Contact]pages.&lt;br /&gt;
* [http://ball.in.th/ ball.in.th] uses hCard to display all usernames.&lt;br /&gt;
* Italian business directory and community portal [http://www.cylex.it/ cylex.it] implements hCard for companies’ contact information with geo tags. Example: [http://www.cylex.it/azienda/computerland-10559319.html company profile]&lt;br /&gt;
* [http://jermy.musicremedy.com/ Jermy Leeuwis MSc] uses an hCard for his contact information.&lt;br /&gt;
* [http://idoinfotech.com Gary Eckstein] uses an hCard for [http://idoinfotech.com/contact contact information].&lt;br /&gt;
* [http://www.drsuarez.net/  Dr. Suarez]  uses hCard on his  [http://www.drsuarez.net/cvitae.html resume page]&lt;br /&gt;
* [http://sourceforge.net/projects/adx/ addressbook.xml] provides hCard support:  [http://elektronengehirn.net/addressbook/addressbook.html adx live example]&lt;br /&gt;
* [http://aplawrence.com APlawrence.com] is using hCard for its [http://aplawrence.com/Links/consultants.html Unix and Linux Consultants Page]&lt;br /&gt;
* [http://www.afonsoduarte.com Afonso Duarte's Portfolio]. Uses an hCard for the contact information.&lt;br /&gt;
* [http://www.rafe.me Web development by Rafe Harwood]. Uses an hCard for the contact line in the footer of every page.&lt;br /&gt;
* [http://www.frogmeat.com Los Angeles Web Design]. Uses an hCard for contact information.&lt;br /&gt;
* [http://www.arbea.basilicata.it/ ARBEA - Agenzia della Regione Basilicata per le Erogazioni in Agricoltura]. hCard is used both for classic [http://www.arbea.basilicata.it/index.php?option=com_contact&amp;amp;view=contact&amp;amp;id=4&amp;amp;Itemid=101 Contact page] and for farms showcase (&amp;quot;Vetrina Aziende Agricole&amp;quot;) available for registered users. I've embedded it modifying Joomla! 1.5 com_contact core component. Users of this CMS can [http://joomlacode.org/gf/project/hcardcontact/ download my patch].&lt;br /&gt;
* [http://trumps.net Los Angeles Search Engine Optimization] Uses hCard in the footer of all pages.&lt;br /&gt;
* [http://www.oasisroofinginc.com/ Seattle Roofing] Uses hCard in the footer of their roofing website see [http://www.oasisroofinginc.com/ Roofing Seattle WA] to see the hcard.&lt;br /&gt;
* [http://reaganvick.com Personal Portfolio of Lance Reagan Vick]. Includes examples of PGP and SSH public keys I have not seen used anywhere else. Hopefully someone finds it helpful!&lt;br /&gt;
* [http://www.fracturedstudios.com Los Angeles Search Engine Optimization] uses hCard to provide address information at bottom of page&lt;br /&gt;
* [http://www.csid.upt.ro/home.php The Distance Learning Center - CSID, &amp;quot;Politehnica&amp;quot; University Timisoara], Romania uses hCard, including geo information, in every page's footer for encoding the University address. hCard is also used for [http://www.csid.upt.ro/personal.php staff] and student contact information.&lt;br /&gt;
* [http://rehabpizza.co.uk Rehab Restaurant] London restaurant, see the sidebar for link to [http://rehabpizza.co.uk/rehab.hcard the hcard].&lt;br /&gt;
* [http://www.outdoorla.org/ Los Angeles Hiking Trails] at the bottom right, our contact information is marked up as an hcard.&lt;br /&gt;
* [http://c7.se Code7 Interactive] uses a hCard for Peter's [http://c7.se/contact contact details].&lt;br /&gt;
* The [http://www.austinartcollective.com Austin Art Collective] is a group dedicated to helping emerging artists sell their artwork online. There is space for users to submit [http://www.austinartcollective.com/gallery/Art-City-Austin.html art gallery reviews] as well, [http://www.austinartcollective.com/austin-galleries/Downtown.html organized by neighborhood] in Austin, TX USA.&lt;br /&gt;
* [http://www.squaremeal.co.uk/ Square Meal Restaurant Guide] uses hCards and hReviews for all restaurant listings and [http://www.squaremeal.co.uk/review/Ristorante_Semplice/1596 visitor reviews].&lt;br /&gt;
* [http://www.vegan-nottingham.co.uk/ Vegan Nottingham Guide] uses hcards, including geo information, for each entry in the guide.&lt;br /&gt;
* [http://www.cgtworld.com/ Cybernation Gamers Tournament] uses hCard in all users profiles like [http://www.cgtworld.com/profile/id-1/ Moonlext's Profile] and in the [http://www.cgtworld.com/about/press.html press page of CGT].&lt;br /&gt;
* [http://fcctlh.org First Christian Church of Tallahassee] Uses hCard in the footer of all pages.&lt;br /&gt;
* [http://www.pseps.com/vc-people/a.cfm The PSEPS Venture Capital and Private Equity Directory] Venture capital and private equity directory using microformats (both for professionals and firms).&lt;br /&gt;
* [http://www.futurix.nl futurix.nl website and webshop development] At the bottom of the pages you'll find the hcard. With a link to technorati the hcard is used to get a vcard out of the hcard.&lt;br /&gt;
* [http://romjon.com/contact-us romjon.com website design &amp;amp;amp; development] Contact Us page using hcard to markup address details. By using Operator, Google Maps and Yahoo! Maps can be made to open with the pointer, respectively, in pretty much and more or less exactly the right place.&lt;br /&gt;
* [http://www.thebeanmachine.nl/ The Bean Machine] at the bottom right, our contact information is marked up as a hcard&lt;br /&gt;
* [http://www.universalmedicalid.com/canada Universal Medical ID Canada] uses hCard to provide address information at bottom of page, as well as on a number of pages within the site.&lt;br /&gt;
* [http://www.floristfullerton.com/ fullerton florsit] uses an hcard for the web site footer [http://www.floristfullerton.com/ florist fullerton].&lt;br /&gt;
* [http://puronicsorangecounty/ Puronics Orange County] uses an hcard for example view footer [http://puronicsorangecounty.com/ water softener orange county].&lt;br /&gt;
* [http://web.mac.com/a.gibson/ Alex Gibson Web Developer] uses hCard for contact info on his homepage.&lt;br /&gt;
* [http://www.wardelldesign.com/html/contact/index.php Wardell Design] uses hCard for contact info with optional vCard download.&lt;br /&gt;
* [http://www.drfosterhealth.co.uk/hospital-guide/  Dr Foster Hospital Guide] uses hCard to mark up hospital addresses. See [http://www.drfosterhealth.co.uk/hospital-guide/hospital/nhs/Basingstoke-and-North-Hampshire-Hospital-366.aspx Basingstoke hospital page] for example.&lt;br /&gt;
* [http://www.drfosterhealth.co.uk/complementary-therapist-guide/ Dr Foster Complementary therapist guide] The [http://www.drfosterhealth.co.uk/complementary-therapist-guide/objectlist.aspx?w=32&amp;amp;p=8&amp;amp;obid=&amp;amp;sub=0 regulatory bodies page] uses hCard for contact details.&lt;br /&gt;
* [http://wayne.edu/ Wayne State University] uses hCard for University address and contact details in the global footer used on most web pages.&lt;br /&gt;
* [http://www.brakemeters.co.nz/ Portable Brake Meters N.Z. Ltd] uses hCard for business address and contact details.&lt;br /&gt;
* [http://www.tallpoppieshamilton.co.nz/ Tall Poppies Florist] uses hCard for business address and contact details.&lt;br /&gt;
* [http://www.livingcolour.co.nz/ Living Colour Florist] uses hCard for business address and contact details. See [http://www.livingcolour.co.nz/Information.aspx Information] page&lt;br /&gt;
* [http://www.dallasfamilyhomes.com/ DallasFamilyHomes.com] uses hCard for property addresses and geo latitude and longitude. See [http://www.dallasfamilyhomes.com/dallas-homes/ Dallas Homes] page for embedded hcards and property detail pages.&lt;br /&gt;
** Pretty good. An improvement might be to use &amp;lt;code&amp;gt;agent&amp;lt;/code&amp;gt; to mark up the agent's contact details, and &amp;lt;code&amp;gt;note&amp;lt;/code&amp;gt; to mark up the property descriptions. [[User:TobyInk|TobyInk]] 16:22, 4 December 2008 (UTC)&lt;br /&gt;
** Thanks for the suggestion Toby.  Added the &amp;lt;code&amp;gt;note&amp;lt;/code&amp;gt; for the description to the homes listings and home detail pages. &lt;br /&gt;
* [http://www.jabz.de/ Jabz | Internet Marketing Agentur] uses hCard for business address and contact details. See [http://www.jabz.de/kontakt/ Contact Page] &lt;br /&gt;
* [http://www.headyperfume.com/ Headyperfume.com] Uses hCard for contact information.&lt;br /&gt;
* [http://sixthirteendesign.com/ Six Thirteen Design] uses an embedded hCard along with other contact details on the footer of each page (http://sixthirteendesign.com/) &lt;br /&gt;
** ''Problems:'' page also includes class=&amp;quot;vcard&amp;quot; used in a non-hCard context (for a VCARD download); types for telephone number and e-mail address are improper. [[User:TobyInk|TobyInk]] 16:22, 4 December 2008 (UTC)&lt;br /&gt;
* [http://www.locanto.com/ Locanto - Free Classifieds] uses hcards to geolocate their classified listings. Visit the ad pages for examples.&lt;br /&gt;
* [http://www.yalwa.com/ Yalwa - Local Directory] uses hcard on their directory listings. Example: [http://wiesbaden.yalwa.de/ID_102318221/Yalwa-GmbH.html Yalwa Address Listing] &lt;br /&gt;
* [http://www.fluendi.com/Contact Fluendi Consulting] uses hcard on their contact page (http://www.fluendi.com/Contact) &lt;br /&gt;
* [http://www.badbedbugs.com/ Bed Bugs] uses hcard for their site information. See the [http://www.badbedbugs.com/about-bad-bed-bugs/ about bed bugs] page. &lt;br /&gt;
* [http://www.lawyer-directory.net/ Lawyer Directory] uses hcard for addresses within the lawyer directory. Example [http://www.lawyer-directory.net/lawyer/Grand-Rapids-Bar-Association-Grand-Rapids-law434032.htm listing]&lt;br /&gt;
* [http://www.hanfmuseum.de/about About Hanf Museum Berlin] uses hcard for addresses and contact informations.&lt;br /&gt;
* [http://maps.google.com/ Google Maps] uses hCards for addresses. See [http://googlemapsapi.blogspot.com/2007/06/microformats-in-google-maps.html Microformats in Google Maps].&lt;br /&gt;
* [http://local.mapquest.com/ MapQuest Local] uses hCards for locations, hCalendar for events and supports the draft Geo format when lat/lng data is provided. See [http://blog.mapquest.com/2008/09/25/microformat-support-on-mapquest-local/ Microformat Support on MapQuest Local] for more information.&lt;br /&gt;
* [http://www.whitepoppy.com/ WhitePoppy.com] uses hCard for business address.  See [http://www.whitepoppy.com/Contact.aspx Contact Page]&lt;br /&gt;
* [http://www.hightechcville.com/ HighTechCville] uses hcard to mark up people and organizations.  See [http://www.hightechcville.com/people/72-eric-pugh Eric Pugh] for an example.&lt;br /&gt;
* [http://www.cleanertoday.com/ Cleaner Today] uses hcard to mark up contact details. (see [http://www.cleanertoday.com/Cleaner-Today-a/1.htm Contact Page])&lt;br /&gt;
* [http://www.aduk.org Audience Data UK] use hcard on their [http://www.aduk.org/contact.php contact page] and [http://www.aduk.org/directory.php directory of related organisations]&lt;br /&gt;
* [http://georgebrock.com georgebrock.com] used hcard for George's contact details&lt;br /&gt;
* [http://suggestionbox.com/ SuggestionBox] uses hcard for companies listed on its site. Example: [http://transfercar.suggestionbox.com/ Transfercar].&lt;br /&gt;
* [http://www.vcventerprise.com/wp/ Christopia] uses hcard to mark up contact details. (see [http://vcventerprise.com/wp/contact/])&lt;br /&gt;
* [http://www.rossirovetti.com/ Rossi &amp;amp; Rovetti Flowers in San Francisco] uses hcard to mark up company details in the about us page of the website. (see [http://www.rossirovetti.com/scripts/aboutus.asp example])&lt;br /&gt;
* [http://youtube.com YouTube] uses hcard to identify video contributors (see [http://www.flickr.com/photos/factoryjoe/2793731119/in/photostream/ screenshot]]&lt;br /&gt;
* [http://sewmyheadon.com/contact sewmyheadon.com] uses hcard to mark up contact details on contact and about pages.&lt;br /&gt;
* [http://www.kleinassoc.com/ Klein &amp;amp; Associates - Estate Planning] used hcard to mark up contact details on law firm's contact page.&lt;br /&gt;
* [http://www.markuspage.com/markus/en/contact Markus Kil&amp;amp;aring;s] uses hCard to mark up his contact details.&lt;br /&gt;
* [http://www.southsidewarriors.com/impressum.cfm Southside Warriors] uses hcard to mark up contact details on the imprint page.&lt;br /&gt;
* [http://applesold.com/ Apple Realty - Bristol Real Estate Company] uses hcard to mark up company details in the footer of website.&lt;br /&gt;
* [http://www.surfcom.co.uk/app/contact/ Surf Commission] uses hcard to mark up company contact details with option to download vcard.&lt;br /&gt;
* [http://www.k9yardpatch.com/contact-us/ K9YardPatch] uses hcard to markup company contact details with option to download.&lt;br /&gt;
* [http://www.ecovian.com Ecovian] uses hCard to mark up eco-friendly business contact details, see [http://www.ecovian.com/l/san-francisco-ca/jardiniere-restaurant example]&lt;br /&gt;
* [http://www.dischord.com/ Dischord Records] uses hCard to mark up company contact details in the footer of the home page.&lt;br /&gt;
* [http://www.thinkambient.co.uk/ ThinkAmbient] uses hCard to mark up company contact details.&lt;br /&gt;
* [http://proofile.org/ Proofile] extensive profiles with hCard, vCard, XFN and FOAF support.&lt;br /&gt;
* [http://www.ebycattle.com/horses/index.html Eby Ranch] uses hCard for the different branches of the company, with option to download the vCard.&lt;br /&gt;
* [http://www.clavex.com/contactus.aspx Clavex - A Latin America Financial Institution ] Uses hCard and geo for the contact information. Simple but effective.&lt;br /&gt;
* [http://www.dancefederation.co.uk Dance Federation Salsa Dancing &amp;amp; Jive Dancing Lessons and Events ] Directory for classes, lessons and events users hcard on its lessons and events -- region and url properties are empty. Is that an error?&lt;br /&gt;
* [http://mop.ardom.co.il/contact.php Southern Arava Research and Development Center] uses hCard for their contact details on their contact page and in sub pages with contact info. -- one card has two fn properties.&lt;br /&gt;
* [http://www.itma.org.uk/find-expert/London] - ITMA Trade Mark Attorney search presents results as hCards&lt;br /&gt;
* [http://interkonect.com Interkonect &amp;gt; Website Application Specialists] Office contact details marked up using vcard.&lt;br /&gt;
* [http://library.christchurch.org.nz/ContactUs/ Christchurch City Libraries (N.Z.)]  contact page plus each of our libraries' individual pages linked from [http://library.christchurch.org.nz/Community/Libraries/ Library Locations map].&lt;br /&gt;
* [http://www.leftclick.com/about-us/ LeftClick] uses hcards for contact information.&lt;br /&gt;
* [http://ideas.veer.com/skinny Veer's Skinny Blog] implements hcard for comments and post authors.&lt;br /&gt;
* [http://wolpy.com/missha Wolpy] Uses hcards for contacts and [http://wolpy.com/missha/profile profile]. &lt;br /&gt;
* [http://www.veganworldorder.com/index.php?m=vegguide Vegan World Order | Restaurants ] Uses hcards for restaurant listings. &lt;br /&gt;
* [http://mahalo.com Mahalo] per the announcement [http://www.seanpercival.com/blog/2008/04/23/mahalo-adds-microformats/]&lt;br /&gt;
* [http://www.buythatlocally.com BuyThatLocally ] uses hcards for local business information. &lt;br /&gt;
* [http://www.firmendb.de Firmendb] uses hCard for individual business contacts, e.g. [http://www.firmendb.de/firmen/15592.php]&lt;br /&gt;
* [http://autopendium.com Autopendium] has resources (e.g. suppliers, clubs) marked up with throughout the site, e.g. [http://autopendium.com/clubs/8-Volvo-Enthusiasts-Club]&lt;br /&gt;
* [http://display-block.co.uk Display-Block] uses hCard contacts for People and Companies on my personal Blog.&lt;br /&gt;
* [http://www.codesignville.com/ Codesignville] uses hCard for his contact details.&lt;br /&gt;
* [http://fan-expo.com/Contactez-nous,2  Forum des Acteurs du NumÃ©rique] (a French trade show and exhibition dedicated to content management) uses hCard for contact information (exhibition staff and exhibitors). It also makes use of hCalendar as well as rel-tag when relevant.&lt;br /&gt;
* [http://www.corewhisperer.com/  The Core Whisperer] (Paul Ransom) Geological Services uses hCard for contact information.&lt;br /&gt;
* [http://chairmanship.mfa.md/en/ The regional presidencies] of Republic of Moldova to the SEECP, CEI, MAG-RACVIAC, SEEHN, CEFTA uses hCard on [http://chairmanship.mfa.md/seecp-contacts/ contacts pages]&lt;br /&gt;
* [http://www.viget.com/about/team Viget Labs] - Team page and Individuals' Pages.&lt;br /&gt;
* [http://www.re3elstance.com RE3EL STANCE] - Entrepreneurship: Rebel Style.&lt;br /&gt;
* [http://www.worldeventsguide.com World Events Guide] - Events occuring around the world marked up with hCard.&lt;br /&gt;
* [http://www.amaliahotel.eu/en/contact.html Amalia Hotel Apartments] uses hCard in the contact-info page.&lt;br /&gt;
* [http://www.sslcertificaten.nl/contact.php Xolphin SSL Certificaten] uses hCard for their contact details&lt;br /&gt;
* [http://examples.tobyinkster.co.uk/hcard hCard + RDFa Example] - raising the bar for parsers...&lt;br /&gt;
* [http://competitiondiva.com/ Competition Diva] uses hCard in its page footer (and plans on it for the upcoming profile pages).&lt;br /&gt;
* [http://sanisoft.com/ SANIsoft] uses hCard in its page footer&lt;br /&gt;
* [http://www.bossalive.com BossaLive] uses [[hcard|hCard]] on user profile pages. &lt;br /&gt;
** Example: [http://www.bossalive.com/user/barry Barry's Profile]&lt;br /&gt;
** Also uses rel-tag microformat for tagging music. Publishes rel-tags for album, artist and genre.&lt;br /&gt;
* [http://hillhursthardware.com/ Hillhurst Hardware's] contact info w.logo uses hcard.&lt;br /&gt;
* Birmingham's [http://bigcityplan.org.uk/ Big City Plan] (England)&lt;br /&gt;
* Producer [http://www.sun-treader.com/contact.html Christopher Davis] uses hCard markup on his contact page.&lt;br /&gt;
* [http://www.tpexpress.co.uk/Liverpool08-Capital-of-Culture/ First TransPennine Express - Liverpool 08, Capital of Culture] - uses hCard to markup suggested venues.&lt;br /&gt;
* [http://anand.ws/ Anand's Musings] uses hCard to mark up authors for comments and posts.&lt;br /&gt;
* [http://www.onyomo.com/ OnYoMo] uses hCard markup for all addresses listed in their local search results.&lt;br /&gt;
* [http://www.dctalks.org/design/ DC Design Talks] used hCard to mark up the speakers for this one-day event.&lt;br /&gt;
* [http://www.entidi.it eNTiDi software] provides a basic hCard sample.&lt;br /&gt;
* [http://quickbase.intuit.com QuickBase] uses hCard markup on our contact us page.&lt;br /&gt;
* [http://www.pixsense.com/contact_us.html PixSense.com] uses hCard markup for addresses across the PixSense website.&lt;br /&gt;
* [http://www.areaguides.net areaguides.net] uses hCard markup for all addresses across the site.&lt;br /&gt;
** Examples: http://chicagoil.areaguides.net/ypcyellowpg/restaurants.html, http://newyorkny.areaguides.net/hotels.html&lt;br /&gt;
* [http://www.ll.georgetown.edu/ Georgetown University Law Library] in Washington, D.C. now uses hCard for our address on all pages.  Also, library staff biography pages use hCard such as [http://www.ll.georgetown.edu/staff/bio.cfm?id_no=105 here] and [http://www.ll.georgetown.edu/staff/bio.cfm?id_no=32 here].&lt;br /&gt;
* [http://www.ll.georgetown.edu/ Georgetown University Law Library] in Washington, D.C. now uses hCard for our address on all pages.  Also, library staff biography pages use hCard such as [http://www.ll.georgetown.edu/staff/bio.cfm?id_no=105 here] and [http://www.ll.georgetown.edu/staff/bio.cfm?id_no=32 here].&lt;br /&gt;
&lt;br /&gt;
* [http://www.mtgd.gov.md/ Ministry of Transport and Road Industry] of Republic of Moldova. First Moldavian governmental site using hCards on [http://www.mtgd.gov.md/ministrul/ staff pages], [http://www.mtgd.gov.md/subdiviziunile-ministerului/ subdivisions page] and in the footer of each page (contact information) &lt;br /&gt;
**Only [http://www.mtgd.gov.md/ Romanian] and [http://www.mtgd.gov.md/ru/ Russian] versions available yet  &lt;br /&gt;
* [http://www.auctionlink.com.au/ AuctionLink] uses hCard for Auctioneer records like [http://www.auctionlink.com.au/Auctioneers/Auctioneer/Cam_Brown_Auctions/ Cam Brown Auctions] (also uses hCalendar)&lt;br /&gt;
* [[User:WebOrganics|User WebOrganics]] The Microformats wiki has hcards on its user pages.&lt;br /&gt;
* [http://www.ontwerpkliniek.nl Ontwerpkliniek - Bureau voor Visuele Identiteit] uses the hCard contact information at the frontpage and the contact page.&lt;br /&gt;
* [http://www.instantdes.com L'instant des...] uses the hCard format for all photographers published on this collective photoblog.&lt;br /&gt;
* the mediadesigner groupblog [http://www.pixeltapete.de Pixeltapete] uses the hCard for the contactinformation of the authorpages of [http://www.pixeltapete.de/alex Alex] and [http://www.pixeltapete.de/carsten Carsten] and also for the [http://www.pixeltapete.de/kontakt imprint]. [http://www.pixeltapete.de Pixeltapete] uses its own  [http://www.pixeltapete.de/2007/11/hcard-sidebarwidget-fuer-wordpress/ hcard widget] for wordpress sidebars. &lt;br /&gt;
* [http://www.thorsten-ott.de Thorsten Ott] uses hCard format for the contact section of his online resume.&lt;br /&gt;
* [http://rosebleed.net/ Rosebleed] supports [[hCard user profiles]] - your profile URL is &amp;lt;nowiki&amp;gt;http://rosebleed.net/users/profile.php/&amp;lt;/nowiki&amp;gt; followed by your username, e.g. [http://rosebleed.net/users/profile.php/silvermoon82 silvermoon82].&lt;br /&gt;
**'''Fixed''' profiles now explicitly mark up 'n' where possible, otherwise omits it&lt;br /&gt;
* [http://www.whitepages.com WhitePages.com] Now WhitePages.com main implemented hCard on all its listings. Over 120 million hCards! Includes work information.&lt;br /&gt;
* [http://www.warmoth.com Warmoth Guitar Products] features hCard contact information in two places, [http://www.warmoth.com/customerservice/customer.cfm?fuseaction=order How To Order] and all of the [http://www.warmoth.com/catalog Warmoth E-Store]&lt;br /&gt;
* [http://www.bbc.co.uk/worldservice/bangladeshboat BBC World Service Bangladesh River Journey] a social network mashup, with hCard &amp;amp; other microformats. See [http://dharmafly.com/blog/bangladeshboat Dharmafly blog discussion].&lt;br /&gt;
* [http://www.amants-du-chocolat.net/ ACCP:Les Amants du Chocolat de la Couronne Parisienne] uses hCard on their contact page and in the chocolate maker they've reviewed.&lt;br /&gt;
* [http://www.accountviewsoftware.nl/ AccountviewSoftware.nl] makes use of hCards for the dealer directory [http://www.accountviewsoftware.nl/dir/ (directory)]&lt;br /&gt;
* [http://www.crystalvision.co.il/ CrystalVision] uses hCard on their contact page and in the footer throughout the site.&lt;br /&gt;
* [http://www.joshuamcginnis.com Joshua McGinnis] uses hCard to display his contact information to potential clients.&lt;br /&gt;
* [http://www.bo.ingv.it/contents/INGV-Bologna/Staff.html INGV Bologna] implemented hCards for staff-members, marked-up as HTML table-rows ([[include-pattern]] also used to add organization-name and fax-number to each hCard).&lt;br /&gt;
* [http://www.lefora.com Lefora] is a free forum hosting site (using custom forum software). Every user's profile contains an hCard. (Example forum for testing: [http://funstuff.lefora.com funstuff.lefora.com])&lt;br /&gt;
* [http://theultimates.whitepages.com WhitePages.com] A special version of whitepages.com has all its listings marked up in hCard.&lt;br /&gt;
* [http://piermontweb.com/contact/ Piermont Web Design] uses hCard on its contact page.&lt;br /&gt;
* [http://www.ie.asm.md/en/ The Institute of Power Engineering] of the Academy of Science of Moldova. First Moldavian site using hCards on staff pages, e.g [http://www.ie.asm.md/employees/oleschuk-valentin/]&lt;br /&gt;
**Also in Russian: [http://www.ie.asm.md/employees-ru/sit-michail-lvovich/] and Romanian: [http://www.ie.asm.md/angajati/chiorsac-mihail/]&lt;br /&gt;
* The good ship [http://styrheim.com/test/leonid.html Leonid Miloslavskiy] spotted in the North Atlantic&lt;br /&gt;
* [http://richi.co.uk/blog/2005/12/structured-blogging.html Richi Jennings] has put up his attempt&lt;br /&gt;
*[http://oberrycavanaugh.com O'Berry|Cavanaugh] has an organization hCard in the footer on every page as while as individual hCards on the [http://oberrycavanaugh.com/team.php Team] page.&lt;br /&gt;
* [http://fortisgc.com Fortis General Counsel], e. g. [http://fortisgc.com/joyce_lan_kim.html Joyce Kim's profile], uses hCard for profile and contact information.&lt;br /&gt;
* [http://peryplo.com Peryplo.com], e. g. [http://peryplo.com/personal/7e6786e711c6d051a39a1b7085f34955 Sample Page], uses hCard for Hotels, Gastronomy Places and services for tourists.&lt;br /&gt;
* [http://www.navitraveler.com/places/629/ NaviTraveler], e. g. [http://www.navitraveler.com/places/629/Lincoln_Memorial.html Lincoln Memorial], including [[geo|Geo]].&lt;br /&gt;
* [http://corewar.atspace.com/about.html sfghoul] has marked her contact info with [[hcard|hCard]]&lt;br /&gt;
* [http://www.zaadz.com Zaadz] uses [[hcard|hCard]] and [http://gmpg.org/xfn XFN] for friends on a user's profile page.&lt;br /&gt;
*[http://www.xoxiety.com/about.html Xoxiety] uses hCards on its about page, linking data from a within a block of text.&lt;br /&gt;
*[http://yedda.com Yedda] - Yedda provides hcard based identities on all of the people's profiles&lt;br /&gt;
*[http://openid.ne.jp OpenID.ne.jp] First OpenID provider service in Japan(æ¥æ¬èª). Each personal  OpenID page (ex:[http://eouia.openid.ne.jp http://eouia.openid.ne.jp]) is marked up as his hCard. And there is a company hCard on every page, too.&lt;br /&gt;
* [http://www.goldenglovepromotions.com/ Golden Glove Promotions] used hcards on the footer of every page to store contact information.&lt;br /&gt;
* Australian national news sites The Australian and Australian IT use hCard on their contact pages: [http://www.theaustralian.com.au/contactus The Australian (contact us)] and [http://www.australianit.news.com.au/contactus Australian IT (contact us)]&lt;br /&gt;
* [http://www.thekiwiholiday.com/ The Kiwi Holiday] uses hCards for [http://www.thekiwiholiday.com/view-hostels New Zealand Hostels], [http://www.thekiwiholiday.com/view-restaurants New Zealand Restaurants], and [http://www.thekiwiholiday.com/view-activities New Zealand Activities]. Also provides hCard &amp;quot;download to address book&amp;quot; functionality on listing detail pages, e.g. [http://www.thekiwiholiday.com/restaurant/tonys-steak Tonys Steak Restaurant]&lt;br /&gt;
* [http://www.qcindustries.com/ QC Industries Conveyors] uses hcards to store contact information in the site footer and in their [http://www.qcindustries.com/news/press-releases/ press releases].&lt;br /&gt;
* [http://www.confuciusinstitute.ac.uk/ The Confucius Institute for Scotland at the University of Edinburgh] has their used a hcard to store contact information in the footer of the page.&lt;br /&gt;
* [http://admnj.com/ Affiliated Direct Mail] is a New Jersey based direct mail company that has their contact information and footer in hCard format.&lt;br /&gt;
* [http://www.golfdigest.com/ Golf Digest] now supports hCard in its [http://www.golfdigest.com/courses/places Course Finder] detail pages. [http://www.golfdigest.com/courses/places/2483 example]&lt;br /&gt;
* [http://dev.opera.com/authors/ Dev Opera] Opera's developer site uses hCards on the author details pages.&lt;br /&gt;
* [http://chrischerry.name/ Chris Cherry's contact page with his hCard]&lt;br /&gt;
* [http://www.kiteboarder.com.au/php/search.php www.kiteboarder.com.au] A new Australian kiteboarding portal.  Microformats have been used so that users can export the shops &amp;lt;s&amp;gt;directly to outlook&amp;lt;/s&amp;gt;. I was able to learn microformats through the Media 2007 conference in London. Author: Damien King&lt;br /&gt;
* [http://krevi.dk/ KREVI] A Danish research institute. Using hCard in the footer of each page and on staff list. This is the first known danish website from the public sector of Denmark using microformats.[http://krevi.dk/om-krevi/organisation/medarbejdere example staff list]&lt;br /&gt;
* [http://www.hss.ed.ac.uk/web-team/ College of Humanities and Social Science Web Team's site], University of Edinburgh uses a hCard in the footer of each page.&lt;br /&gt;
* [http://www.theglobeandmail.com/ globeandmail.com] Canada's National Newspaper uses an hCard for their contact information.&lt;br /&gt;
* [http://www.logisteam.pl/ Krzysztof Rucinski] uses an hCard for his contact details on [http://www.logisteam.pl/kontakt.html Logisteam keylogger contact] page.&lt;br /&gt;
* Creation design &amp;amp; marketing has hCards throughout the site, including the [http://www.creation.uk.com/contact/ contact page], the [http://www.creation.uk.com/company/leigh-scott/ company profile pages] and on the [http://www.creation.uk.com/news/2007/06/06/easy-money/#comments-view comments on articles]&lt;br /&gt;
* [http://www.thomsonlocal.com/ ThomsonLocal.com], major UK business directory publisher, use hcard on the search results and company information pages.&lt;br /&gt;
* [http://www.corissia.com Corissia Group Hotels in Crete Greece] have included contact information as a hCard on the footer of every page of the website. There is a multilingual implementation as well.&lt;br /&gt;
* [http://zucchetti.co.uk/2007/03/06/simple-address-formatting-solution/ Laura Zucchetti] illustrates a simple address formatting solution as a hCard and marked up in a definition list. &lt;br /&gt;
* [http://www.feike.de/Kontakt.html Feike Contact] has a hCard on to top of the page.&lt;br /&gt;
* [http://www.londondrum.com/ London Drum] uses a whole host of microformats - there are hcards and geo's on the hotel pages, events are written up in hcalendar format on the cityguide page, and you can also find some hreviews as well (like on the [http://www.londondrum.com/hotels/athenaeum.php Athenaeum Hotel page]) &lt;br /&gt;
* [http://www.regels-stadskanaal.nl/ Regelingenbank Stadskanaal] has a hCard on each page, containing Geo-information too. &lt;br /&gt;
* [http://www.tomstone.se Tom Stone - Trollkarl] has a hCard in the footer of each page of the site.&lt;br /&gt;
* [http://www.rolandinsh.lv/ Rolands Umbrovskis]'s home page has hCard in [http://www.rolandinsh.lv/?ro=contacts contact page] and all other pages with contact information.&lt;br /&gt;
* [http://twitter.com Twitter] uses hCard for user information (along with [http://ihack.us/2007/05/14/twitter-gets-microformatted/ several other microformats])&lt;br /&gt;
* [http://www.bendodson.com/developer/ Ben Dodson] uses an hCard for his contact details on every page of his site as well as using hCards for any XFN relationships in his blogrolls.&lt;br /&gt;
*[http://www.pats.ua.ac.be/group PATS Group Members] uses hCard to mark up member contact information.&lt;br /&gt;
*[http://couchsurfing.com CouchSurfing] has limited information in hCard available on members' profiles (such as [http://www.couchsurfing.com/people/guaka Guaka's]).&lt;br /&gt;
* [http://kpumuk.info Dmytro Shteflyuk] uses an hCard on his [http://kpumuk.info/contact/ contact] and [http://kpumuk.info/curriculum-vitae/ curriculum vitae] pages.&lt;br /&gt;
* The [http://www.bayofislands.net/ Bay of Islands] site has implemented hCard on all listing pages, eg: [http://www.bayofislands.net/accommodation/backpackers/saltwater-lodge/ Saltwater Lodge]&lt;br /&gt;
* [http://people.cs.uchicago.edu/~mpschaef/index.html Merrick Schaefer] is psyched to use hCard on his homepage for his contact info.&lt;br /&gt;
* Christian Hess (from San JosÃ©, Costa Rica) has an hCard in his [http://www.hess-cr.com home page], [http://www.hess-cr.com/utilidades/correo.shtml#postal contact] and [http://www.hess-cr.com/secciones/curriculum/datos.shtml personal rÃ©sumÃ©] pages (all in Spanish). He also recommends using the [https://addons.mozilla.org/es-ES/firefox/addon/4106 Operator] extension in Firefox to check them out.&lt;br /&gt;
* [http://www.JamPlanet.com Jam Planet] uses hCard in Contact Us page; application can generate hCard for a contact.&lt;br /&gt;
* [http://www.anisfield-wolf.org/ The Anisfield-Wolf Book Awards], designated specifically to recognize works addressing issues of racism and diversity, uses hCard for the author bios of [http://www.anisfield-wolf.org/Winners/PastWinners/ past winners].&lt;br /&gt;
* [http://www.buy-our-honeymoon.com/ Buy Our Honeymoon], a [http://www.buy-our-honeymoon.com/registry honeymoon registry] service, uses hCard in their [http://www.buy-our-honeymoon.com/contact Contact Us] page.&lt;br /&gt;
* [http://www.instalacionesbcn.es/categoria-producto/calderas/ Calderas Terrassa], major instalation and service publisher, use hcard on the search results and company information pages.&lt;br /&gt;
* '''W3C webmaster''' [http://www.w3.org/People/Jean-Gui/ Jean-Guilhem Rouel] now has an hCard.&lt;br /&gt;
* [http://source.ibegin.com/ iBegin Source] - All 10.8+ million business listings have their information marked up in hCard. Example: [http://source.ibegin.com/california/adelanto/aeronautical-supplies/general-atomics-9779-yucca-rd-1.html General Atomics]&lt;br /&gt;
* [http://david.weekly.org/ David Weekly] has added an hCard to his home page for himself.&lt;br /&gt;
* [http://ficlets.com/stories/12 Ficlets] story page uses hCard for author bio.&lt;br /&gt;
* [http://redmonk.com/contact/ RedMonk Contact page] uses hCard for RedMonk firm as well as each analysts.&lt;br /&gt;
* [http://source.ibegin.com/ iBegin Source] uses hCard to identify business information for all 10.5+ million businesses listed.&lt;br /&gt;
* [http://cloudislands.com/contact.php Cloud Islands] uses hCard for our Contact Info.&lt;br /&gt;
* [http://www.international.unt.edu UNT International] uses hCard to mark up contact information sitewide (see esp. [http://www.international.unt.edu/offices/ieli/people/instructors/profiles the IELI instructor profile listing])&lt;br /&gt;
* [http://www.giraffo.de giraffo.de] has different hCards on every page (+ geo in &amp;quot;kontakt&amp;quot;)&lt;br /&gt;
* [http://www.enap.com ENAP, Inc.] lists the HR Contact in hCard format on the [http://www.enap.com/career.aspx Career Opportunities] page.&lt;br /&gt;
* [http://sxsw07.conferenceer.com/people Conferenceer] lists panelists and participants to the 2007 South by Southwest interactive conference in hCard format&lt;br /&gt;
* [http://news.stanford.edu Stanford News] (Redesign)  hCard in the footer on every page as well as markup for every staff member on the Staff page.&lt;br /&gt;
* [http://www.wikiservice.at/fractal/wikidev.cgi?FR/EveMoreau ValÃ©rie-Eve Moreau] has an hCard on her wiki-homepage.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/St_George%27s_Minster%2C_Doncaster St George's Minster, Doncaster, on Wikipedia]&lt;br /&gt;
* AOL Journals publishes hCards for authors. [http://journals.aol.com/carowill/whats-happening Example]&lt;br /&gt;
* Ian McKellar's [http://ian.mckellar.org/ home page] is an hCard that's styled to look like a business card.&lt;br /&gt;
* [[Christophe Ducamp]]'s hCard based on    [http://www.wikiservice.at/fractal/wikidev.cgi?FR/MicroFormats/ChristopheDucamp wiki personal page] of a wiki-branch which could be dedicated to seed a french group to support microformats. Thanks to Laurent Lunati for the CSS. You can [http://www.wikiservice.at/fractal/wikidev.cgi?action=edit&amp;amp;id=FR/MicroFormats/ChristopheDucamp edit it]. Any suggestions welcome.&lt;br /&gt;
* [http://www.matthewwest.co.uk Matthew West] has an hCard on his [http://www.matthewwest.co.uk/email contact] page.&lt;br /&gt;
*[http://www.webmaster.waw.pl PaweÅ Wrzosek] Freelance webdeveloper`s portfolio&lt;br /&gt;
*[http://www.stanford.edu/ Stanford.edu] hCard markup is included in the footer of the homepage and all subsequent pages within the /home directory.&lt;br /&gt;
*[http://openid.ne.jp OpenID.ne.jp] First OpenID provider service in Japan(æ¥æ¬èª). Each personal  OpenID page (ex:[http://eouia.openid.ne.jp http://eouia.openid.ne.jp]) is marked up as his hCard. And there is a company hCard on every page, too.&lt;br /&gt;
* [http://www.qwertycars.co.uk/garages/mechanics-near-tadworth-kt20.aspx UK Car Garages] Address of car mechanics in the UK, in hCard format.&lt;br /&gt;
* [http://www.columbiaautomation.com/sub/contact.php Columbia Automation]'s About Us page every employee marked up as an hCard, as well as having a company hCard with geo information.&lt;br /&gt;
* [http://www.pointermix.com Pointermix Design] uses the hCard format.&lt;br /&gt;
* [http://eight6.com/contact/ eight6]'s contact page uses the hCard format.&lt;br /&gt;
* [http://www.raveaboutit.com.au Rave About It]'s business listings use the hCard format.&lt;br /&gt;
* [http://optics.org/cws/Contact/OurTeam.do optics.org]'s team page.&lt;br /&gt;
* [http://www.robcottingham.ca/contact Rob Cottingham]'s first foray into microformats is an hCard on the contact page of his personal blog. (He was inspired by Tantek Ãelik's presentation at Web Directions North 2007.)&lt;br /&gt;
* [http://seattleu.edu Seattle University] uses hCard on it's front page and most pages that share an official template. &lt;br /&gt;
* [http://www.josemarti.waw.pl Jose Marti XXII Secondary School in Warsaw] includes hCard on Contact and About Author sections&lt;br /&gt;
* [http://www.jaama.co.uk Jaama] have their company details as a vCard download on their [http://www.jaama.co.uk/Contact.aspx contact] page.&lt;br /&gt;
* [http://3amproductions.net 3AM Productions] has company details marked up as hCard all across the site and particularly for [http://3amproductions.net/jason.php Jason] and [http://3amproductions.net/gilbert.php Gilbert]&lt;br /&gt;
* [http://jc-development.co.uk/ JC's Development] has company contact details as hCard.&lt;br /&gt;
* [http://berlin.barwick.de/index.html Berlin Guide] is converting their address markup to hcard, e.g. [http://berlin.barwick.de/shopping/kadewe-kaufhaus-des-westens.html KaDeWe] &lt;br /&gt;
* [http://www.xlntads.com XLNTads] has their contact information marked up in hCard, as well as their development schedule/timeline in hCalendar&lt;br /&gt;
* [http://derrick.pallas.us Derrick Pallas] tells people to look for him here.&lt;br /&gt;
* [http://bluemonkcreative.com/contact/ Bill Turner] adds an hCard to the contact page of his freelance business' website.&lt;br /&gt;
* [http://www.oppenheim.com.au/ James Oppenheim's blog] includes an inline author hCard in the footer of each page and also on the contact page.&lt;br /&gt;
* [http://steinhardt.nyu.edu/ NYU Steinhardt] has [http://steinhardt.nyu.edu/faculty_bios/list/Faculty 240+ faculty bios marked up], e.g. [http://steinhardt.nyu.edu/faculty_bios/view/Susan_Murray].&lt;br /&gt;
* [http://www.boogdesign.com/aboutus.html boogdesign.com] has added hCard markup on the contact page.&lt;br /&gt;
* [http://www.gptg.org/ Great Places To Golf], hCards for golf clubs around the world, e.g. [http://www.gptg.org/club/12/]&lt;br /&gt;
*[http://www.travellerspoint.com/ The Travellerspoint Travel Community] has added hCards to all of their member profiles (e.g. [http://www.travellerspoint.com/member_profile.cfm?user=jax_07]). Details include name, photo, location, notes and url. &lt;br /&gt;
* The [http://www.westmidlandbirdclub.com/ West Midland Bird Club] in the English Midlands uses hCard on its [http://www.westmidlandbirdclub.com/ home page], [http://www.westmidlandbirdclub.com/diary/ events diary], [http://www.westmidlandbirdclub.com/club/contact.htm contact pages], [http://www.westmidlandbirdclub.com/site/links.htm links page], [http://www.westmidlandbirdclub.com/club/older.htm list of the world's oldest bird clubs] and in a page footer which is gradually being rolled out across the whole site. {{UpdateMarker}} Page-footer's hCard now has logo, using [[include-pattern]].&lt;br /&gt;
*[http://wizardishungry.com/blog/ wizardishungry/blog] has the author's hCard in the footer of every page with a link to X2V.&lt;br /&gt;
* [http://www.walkerfineart.com Walker Fine Art Gallery] Most pages contain an hCard in the footer.&lt;br /&gt;
* [http://chewbittel.com/contact.php Chew Bittel Assoc., Inc.] is an organization hCard. It's got abbr's in there, and a duplicate telephone field, and some hidden things. I'm really pushing things to the limit here. This should be a great test for your parser.&lt;br /&gt;
* Scott Allan Wallick's hCard is [[User:ScottWallick|his user page]] and on his blog, [http://www.plaintxt.org/about/2/ plaintxt.org]&lt;br /&gt;
* [[User:Bob_Jonkman|Bob Jonkman's hCard]] '''on this 'wiki'''' &lt;br /&gt;
* [http://thetenwordreview.com The Ten Word Review] simply contains ten word long reviews. All reviews are marked up as [[hreview|hReviews]], and user information is marked up as hCards.&lt;br /&gt;
*OffshoreAgile.com, a subsite of Starsoft Development Labs, uses hCard in the [http://www.offshoreagile.com/company/contact/ Starsoft Contacts] and Media Inquiries sections&lt;br /&gt;
*T-Mobile uses hCard for the [http://t-mobilepressoffice.co.uk/press/contact-details/ T-Mobile UK Press Contact Details page], as well as for some of the latest press releases&lt;br /&gt;
* Psychology Press and Routledge's Behavioral Sciences' publishing division have implemented hCard on their contact pages on 17 of their websites (example on the contact page on their [http://www.clinicalpsychologyarena.com/contact/ Clinical Psychology Arena])&lt;br /&gt;
*[http://72ppi.us 72ppi], uses hCard in the footer.&lt;br /&gt;
*[http://www.csarven.ca Sarven Capadisli] uses hCard throughout the site (including user comments in articles).&lt;br /&gt;
* [https://www.urbanbody.com/information/contact-us Urban Body Men's Clothing] uses hCard for business locations and hCalendar for business hours.&lt;br /&gt;
* [http://www.iqair.us/ IQAir North America], uses hCard for contact information.&lt;br /&gt;
* [http://www.infoiasi.ro/ The website of the Faculty of Computer Science], &amp;quot;A. I. Cuza&amp;quot; University Ia&amp;amp;#351;i, Romania uses hCard for each staff member.&lt;br /&gt;
* [http://www.finds.org.uk/ The Portable Antiquities Scheme at the British Museum] hCards added to footer of every page and to contacts section. Working on adding more and getting it right.&lt;br /&gt;
* In [http://www.ideasfornet.com/ IdeasForNet.com - the ideas repository] hCards were implemented partially in the footer of each page, and more comprehensively in the contact and about pages.&lt;br /&gt;
* The [http://www.cst.ed.ac.uk/ Centre of Canadian Studies] at the University of Edinburgh use hCards for contact information in the footer of their site.&lt;br /&gt;
* [http://www.theatrestudies.llc.ed.ac.uk/ Theatre Studies: European Theatre] at the University of Edinburgh use hCards for contact information on their home page&lt;br /&gt;
* [http://www.carolinemockett.com/design/about.aspx Caroline Mockett] has an hCard on her About Me page&lt;br /&gt;
* [http://wait-till-i.com Christian Heilmann] has a footer address using hCard&lt;br /&gt;
*[http://www.audience-response-rentals.com/ Audience Response System Rentals] uses hcard as a popup in the site accessibility area (lower right) for easy copy and paste of address by customers.&lt;br /&gt;
* [http://www.fischsolutions.com/ Fisch Internet Solutions] uses an embedded hCard and a vCard download to provide customers an easy way to contact them on their [http://fischsolutions.com/contactus.html Contact Us] section of the website.&lt;br /&gt;
* [http://www.micatholicconference.org/ Michigan Catholic Conference] uses hCard for contact information in the sidebar.&lt;br /&gt;
* [http://www.adambunn.co.uk/ Adam Bunn] provides contact details in the sidebar using hCard.&lt;br /&gt;
* [http://www.belkin.com/pressroom/releases/uploads/10_10_06NotebookExpansionDock.html Belkin Press Releases] are using hCards for PR contacts and corporate offices.&lt;br /&gt;
* [http://mybank.com myBank.com] uses hCard for its listings of every branch of every FDIC-insured bank in the United States.&lt;br /&gt;
* [http://leftlogic.com Left Logic] uses hCard for embedded contact information.&lt;br /&gt;
* [http://inga-art.co.uk/artist Inga Scholes] uses hCard for contact information in the sidebar.&lt;br /&gt;
* [http://www.lussumo.com/ Lussumo] uses hCards on user profile pages in its open-source [http://www.getvanilla.com/ Vanilla] Discussions Forum software.&lt;br /&gt;
* [http://www.creative-ways.nl/ Ron Kok] uses hCards to mark-up the names and URLs of commentors on his blog. He also uses hCards in combination with XFN in his blogposts to refer to friends, and has an hCard for himself on every page on his blog.&lt;br /&gt;
* [http://tagg.no Tagg Media] uses hCard for [http://heine.tagg.no/contact.php contact information] and provide link to vCard download in the contact section.&lt;br /&gt;
* The article about the fictitious Matrix character [http://en.wikipedia.org/wiki/Neo_%28The_Matrix%29 Thomas A Anderson in Wikipedia] is now marked up with hCard.&lt;br /&gt;
* [http://dconstruct06.madgex.com/ d.Construct 2006 Backnetwork] uses hCards for conference delegates (and provides the markup so that delegates can copy and paste cards into their own sites).&lt;br /&gt;
* [http://www.brown.edu Brown University] now uses hCard on the front page&lt;br /&gt;
* [http://www.wideblueyonderweb.co.uk Dunks at Wide Blue Yonder Web Design] has added hCard markup on his [http://www.wideblueyonderweb.co.uk/wbyw/pages/contact.htm contact page] and is looking to implement it on all past &amp;amp; future contact pages for clients.&lt;br /&gt;
* [http://southamptonrubberstamp.com Southampton Rubber Stamp Company] now has hCard markup with a vCard download link on every page.&lt;br /&gt;
* [http://barefoot-ceramics.com Barefoot Ceramics paint your own pottery studio] (in Newport, South Wales) has added hCard markup to its [http://barefoot-ceramics.com/find#address &amp;quot;Find&amp;quot;] page and other address instances. They hopes to implement hCalendar event lists as soon as an ics to hCalendar PHP class can be found or written.&lt;br /&gt;
* [http://dsingleton.co.uk/ David Singleton] has added a hCard to his blog.&lt;br /&gt;
* [http://www.thestreet.org.au The Street Theatre (Canberra, Australia)] has added hCard markup to its [http://www.thestreet.org.au/contact.htm Contact Us] page. hCalendar markup will soon be added for all of our performances.&lt;br /&gt;
* [http://www.informatik.uni-hamburg.de/SVS/personnel/henrich/index.php Henrich C. P&amp;amp;ouml;hls] has marked up his about page using hcard, including his PGP-Key that is stored in an abbr title, using class=key.&lt;br /&gt;
* [http://www.yalf.de Yalf Webentwicklung] has [http://www.yalf.de/kontakt contact information] available as hCard (and vCard).&lt;br /&gt;
* [http://www.zeldman.com/about/ Jeffrey Zeldman]. Jeffrey Zeldman has marked up his about page using hcard.&lt;br /&gt;
* [http://WhereAreYouCamping.com Where Are You Camping]. hCards for all members and camps, employing the include pattern as well. AFAIK this is the first Burning Man related microformats implementation, not to mention addresses in Black Rock City.&lt;br /&gt;
* [http://www.clacksweb.org.uk Clackmannanshire Council ]. hCard is implemented for all contact details across the site, and for specific individuals such as elected members (Councillors).&lt;br /&gt;
* [http://www.webdirections.org Web Directions]. hCard is used as contact information for the conference, while speakers are marked up with hCard.&lt;br /&gt;
* [http://www.markthisdate.com/contactform.html MarkThisDate.com]. An hCard is implemented on our contact form. For our calendars hCalendars will follow as soon as possible.&lt;br /&gt;
* [http://www.msiinet.com/contact/ MSI Systems Integrators] has its &amp;amp;quot;Contact MSI&amp;amp;quot; page encoded with hCards.&lt;br /&gt;
* [http://www.coolblue.nl/ Corporate website of Coolblue BV]. hCards were implemented in both the footer of each page, and in the &amp;quot;News&amp;quot; section for press contact information.&lt;br /&gt;
* [http://www.besancon.fr/index.php?p=32 Official site of BesanÃ§on (France)] uses hCard for each page concerning the small towns surrounding BesanÃ§on.&lt;br /&gt;
* [http://2006.dconstruct.org/speakers/ d.Construct 2006 conference speakers list] is implemented using hCards.&lt;br /&gt;
* [http://local.yahoo.com Yahoo Local] now supports hCards for business and places in the search results&lt;br /&gt;
* [http://learningtheworld.eu/imprint/ Learning the World] has hcard information on the imprint, alas we didn't succeed to mark-up the work phone and fax numbers properly.&lt;br /&gt;
* The [http://www.fuckparade.org Fâparade] website uses hCard, though I didn't find a type to distinguish mobile and landline phone numbers.&lt;br /&gt;
**Use &amp;lt;code&amp;gt;cell&amp;lt;/code&amp;gt; for mobiles.&lt;br /&gt;
* [http://www.miranet.nl/contact.htm Miranet Webdesign] have added a hcard to their [http://www.miranet.nl/contact.htm 'contact' page]&lt;br /&gt;
* [http://weblog.200ok.com.au/ Ben Buchanan] has added a vCard to the [http://weblog.200ok.com.au/about/ 'About' page on The 200ok Weblog]&lt;br /&gt;
* [http://www.radiantcore.com Radiant Core] has their contact information [http://www.radiantcore.com/contact/ available in hCard].&lt;br /&gt;
* [http://www.mikerumble.co.uk/ Mike Rumble] has [http://www.mikerumble.co.uk/contact.html uploaded his hCard].&lt;br /&gt;
* [http://www.saumag.edu/ Southern Arkansas University] has its contact footer encoded as hCard&lt;br /&gt;
* [http://main.uab.edu/ University of Alabama at Birmingham] has its contact footer encoded as hCard&lt;br /&gt;
* [http://www.capital.edu Capital University] has contact footer and bloggers' names encoded as hCard. Also, all page-specific contact information is encoded as hCards (see [http://www.capital.edu/Internet/Default.aspx?pid=67 Admissions] page for an example)&lt;br /&gt;
* [http://main.uab.edu/shrp/ UAB School of Health Professions] uses hCard in its contact footer&lt;br /&gt;
* [http://green.carisenda.com/ Stephen Stewart] has his hCard on the front page of his weblog ('You are here' section)&lt;br /&gt;
* [http://www.direction.es/ Direction] uses hCard for contact information.&lt;br /&gt;
* [http://audiobank.tryphon.org AudioBank] uses hCard to display member informations.&lt;br /&gt;
* [http://www.vivabit.com/atmedia2006/speakers/ @media speakers] are marked up with hCard (photos depend on BASE tag support which makes this a good test case)&lt;br /&gt;
* [http://www.dougransom.com Doug Ransom] uses hCard for his financial advisory practice. &lt;br /&gt;
* [http://rubyandrails.org/usergroups/newcastle/members.html ncl.rb] uses hCard for contact information.&lt;br /&gt;
* [http://www.snowinteractive.com/ Snow Interactive] uses hCard for contact information.&lt;br /&gt;
* [http://flickr.com Flickr] now supports [[hcard|hCard]] and [http://gmpg.org/xfn XFN] on profile pages.  See [http://flickr.com/photos/factoryjoe/113866484/ screenshot of Flickr UI in Flock browser using Flocktails extension - March 17th 2006].&lt;br /&gt;
* [http://www.ndiyo.org/contact Contact information for the Ndiyo project]&lt;br /&gt;
* [http://www.pixelenvy.co.uk/ Pixel Envy] uses hCard for contact information on every page&lt;br /&gt;
* [http://stilbuero.de/contact/ Klaus Hartl] uses hCard in the sidebar for contact information (maybe easier to parse through delivering xhtml as xml).&lt;br /&gt;
* [http://charlvn.virafrikaans.com/contact Charl van Niekerk's hCard]&lt;br /&gt;
* [http://billy-girlardo.com/WP/ BillyBLOGirlardo] uses hCard for contact information.&lt;br /&gt;
* [http://www.hicksdesign.co.uk/ Hicksdesign] uses hCard for contact information.&lt;br /&gt;
* http://www.gr0w.com/articles/press/growsearch_launched_press_release/ - hCard in a press release for the press contact info&lt;br /&gt;
* http://www.redmonk.com/cote/archives/2006/03/testing_out_mic.html - hCard with explanation&lt;br /&gt;
* [http://andy.ciordia.info/ it's my island], personal blog, hcard on the ''[http://andy.ciordia.info/pages/about_me About the Writer]'' page. [[User:Ciordia9|Andy Ciordia]]&lt;br /&gt;
* [http://www.windowonwoking.org.uk/ Window on Woking], a local community site in the UK, uses hCard in the homepage of each member organisation and local Councillor.&lt;br /&gt;
* [http://ChunkySoup.net/ ChunkySoup.net] has redesigned using hAtom 0.1 and hCards on the entire site -- by [[User:ChrisCasciano|Chris Casciano]]&lt;br /&gt;
* [http://www.30boxes.com/ 30 Boxes],a social calendar application and digital lifestyle aggregator, automatically creates an hcard for you with your account.  It is found under Settings &amp;gt; Syndication.&lt;br /&gt;
* [http://www.nearwhere.com/ Nearwhere.com] allow you to put an hcard on an interactive map.&lt;br /&gt;
* [http://www.brentozar.com/ Brent Ozar] added a [http://www.brentozar.com/contact.php contact] page hCard.&lt;br /&gt;
* [http://www.kerihenare.com/ Keri Henare] has rewritten his [http://www.kerihenare.com/contact/ contact] page hCard. Now using &amp;lt;code&amp;gt;&amp;lt;object&amp;gt;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&amp;lt;img&amp;gt;&amp;lt;/code&amp;gt; for photo. (Thanks Brian Suda for updating the vCard converter)&lt;br /&gt;
* [http://michaelraichelson.com/contact/ Michael Raichelson] had an hCard on his contact page before SXSW, but never thought to add it here until Tantek requested it.&lt;br /&gt;
* [http://www.commoner.com/~lsimon/lindsey_simon_hcard.html Lindsey Simon] has added an hCard to his website as per Tantek's SXSW request for folks to try it &lt;br /&gt;
* [http://www.davidgagne.net/ David Gagne] has an hCard in his sidebar.&lt;br /&gt;
* [http://www.churchzip.com/map/ Churchzip.com/map] and [http://www.skiwhere.com/map/ Skiwhere.com/map], provide churches, hotels, and ski resorts on the same maps.  Locations are formatted as hCards.&lt;br /&gt;
* All [http://www.iqdir.com/ IQ Directory Solutions] Yellow Pages web portals use [[hcard|hCard]] markup on listings. For example [http://www.yellowpages-cambodia.com/ Cambodia Yellow Pages] and [http://www.superpages.com.my/ Malaysia Super Pages]&lt;br /&gt;
* Ning's cloneable Group app uses fuzzy matching to map custom fields to [[hcard|hCard]] markup on its [http://group.ning.com/index.php?controller=person&amp;amp;action=view&amp;amp;content=JonathanAquino profile] pages.&lt;br /&gt;
* [http://claimid.com/factoryjoe Chris Messina' ClaimID hCard]&lt;br /&gt;
* [http://factoryjoe.com/ Chris Messina' homepage]&lt;br /&gt;
* [http://flock.com/about Flock About]&lt;br /&gt;
* [http://tantek.com/microformats/2006/03-01-TechPlenAgenda.html Agenda: W3C Technical Plenary Day, March 1 2006] has [[hcard|hCard]] and [[hcalendar|hCalendar]] markup. ([http://www.w3.org/2006/03/01-TechPlenAgenda.html original here]).&lt;br /&gt;
* [http://www.gr0w.com/articles/press/growsearch_launched_press_release/ GrowSearch Launched (Press Release)] uses an hCard to provide Press Contact Point.&lt;br /&gt;
* The [http://www.arborday.org/ National Arbor Day Foundation] has started using hCards for their [http://arborday.org/programs/conferences/communityforestry/index.cfm upcoming] [http://arborday.org/programs/conferences/hazardtrees-treeplanting/ conferences].&lt;br /&gt;
* [http://www.multipack.co.uk The Multipack] has numerous hCards, especially on the [http://www.multipack.co.uk/members/ members page], as well as the next meeting information.&lt;br /&gt;
* [http://deadringrancor.livejournal.com/ Justin McDowell] used an hCard when [http://deadringrancor.livejournal.com/221332.html referring to a person in his blog post]&lt;br /&gt;
* [http://davecardwell.co.uk/cv/ Dave Cardwell] has included his hCard in his Curriculum Vitae.&lt;br /&gt;
* [http://blog.usweb.com/ Shaun Shull] has written a great post on [http://blog.usweb.com/archives/how-microformats-affect-search-engine-optimization-seo How Microformats Affect SEO], and has included his [[hcard|hCard]] as one of the examples.&lt;br /&gt;
* [http://www.thefutureoftheweb.com/ Jesse Skinner] has written a simple [http://www.thefutureoftheweb.com/blog/2006/1/hcard tutorial with examples]&lt;br /&gt;
* [http://www.w3.org/2005/12/allgroupoverview.html 2006 W3C Technical Plenary Week] has marked up the venue, contacts, and program committee members all with hCard.&lt;br /&gt;
* [http://www.avf-nexus.co.uk AVF-Nexus] have a hCard on their [http://www.avf-nexus.co.uk/contact/ contact page] - (by [http://creation.uk.com Creation&amp;quot;])&lt;br /&gt;
* [http://www.thefantasticos.com/andrew/ Andrew White] posted [http://www.thefantasticos.com/andrew/index.php/my-hcard/ his hCard] and [http://www.thefantasticos.com/andrew/index.php/62/microformats-the-should-have-been-obvious-web-dev-tool/ blogged about it].&lt;br /&gt;
* [http://www.2sheds.ru Oleg &amp;quot;2sheds&amp;quot; Kourapov] in his [http://www.2sheds.ru/blog/ blog] ([http://suda.co.uk/projects/X2V/get-vcard.php?uri=http://www.2sheds.ru/blog X2V]) has turned personal profile into hCard ([http://suda.co.uk/projects/X2V/get-vcard.php?uri=http://www.2sheds.ru/blog/hcard.html X2V]) and his blogroll - into combination XFN/hCards ([http://suda.co.uk/projects/X2V/get-vcard.php?uri=http://www.2sheds.ru/blog/friends.html X2V])&lt;br /&gt;
* [http://www.approveddesign.co.uk Approved Design Consultancy] have a hCard on their [http://www.approveddesign.co.uk/about/contact/ contact page] as well as on their [http://www.approveddesign.co.uk/about/people/ people section] - (by [http://creation.uk.com Creation&amp;quot;])&lt;br /&gt;
* [http://weblog.200ok.com.au/ Ben Buchanan] and [http://www.griffith.edu.au/cgi-bin/phone_search.pl?string=colin+morris&amp;amp;format=search Colin Morris] have [http://weblog.200ok.com.au/2006/01/griffith-phonebook-adds-hcard-and.html implemented hCards and vCards] for the [http://www.griffith.edu.au Griffith University] [http://www.griffith.edu.au/find/content_phonebook.html online phone book]. Eg. [http://www.griffith.edu.au/cgi-bin/phone_search.pl?string=ben+buchanan&amp;amp;format=search Ben's vCard] and [http://www.griffith.edu.au/cgi-bin/phone_search.pl?string=colin+morris&amp;amp;format=search Colin's vCard]&lt;br /&gt;
* WWF-Australia [http://wwf.org.au/about/contactdetails/ contact details page]&lt;br /&gt;
* [http://rasterweb.net/raster/ Pete Prodoehl] used the hCard format on his [http://rasterweb.net/raster/contact.html Contact page] and his [http://rasterweb.net/portfolio/ Portfolio]&lt;br /&gt;
* [http://amette.eu amette] uses the hCard format in a module of his TikiWiki powered blog and a more complete hCard on his [http://amette.eu/contact contact page]&lt;br /&gt;
* [http://staff.washington.edu/oren/weblog2/ Oren Sreebny] has an hcard on his blog main index template &lt;br /&gt;
* [http://www.cs.brandeis.edu/~zippy/ Patrick Tufts] has an hCard on his homepage.&lt;br /&gt;
* [http://ascii20.blogspot.com/ Mathias Kolehmainen and Jamie Taylor] have hCards on their weblog.&lt;br /&gt;
* [http://www.hoppsan.org/jamesb/blogger/ Barnaby James] has a hCard on his weblog.&lt;br /&gt;
* [http://esa-education.com/schools/map ESA Education] Uses hCards for their 100+ schools and each of the individual school sites.&lt;br /&gt;
* [http://www.thereisnocat.com/#vcard Ralph Brandi] has added an hCard to the sidebar of his weblog as a result of Tantek Ãelik's portion of the Microformats presentation at SXSW 2006.&lt;br /&gt;
* [http://www.pierce.ctc.edu/ephone/ Pierce College] -- community college directory uses hCard on all individual directory entries.&lt;br /&gt;
* [http://www.ukoln.ac.uk/web-focus/events/workshops/webmaster-2006/ the Institutional Web Management Workshop 2006] have marked up all their [http://www.ukoln.ac.uk/web-focus/events/workshops/webmaster-2006/committee/ speakers with hCard].&lt;br /&gt;
* http://wikitravel.org/en/Singapore/Sentosa. Wikitravel is experimenting with hcard on its travel guides. This guide uses hcard for all its business listings. More info on http://wikitravel.org/en/Wikitravel_talk:Listings.&lt;br /&gt;
* [http://www.musik-erber.de/ Musik-Erber] uses to present contact information at the sidebar&lt;br /&gt;
* [http://cdevroe.com/about/#contact Colin D. Devroe] uses hCard to display his contact information on his about page&lt;br /&gt;
* The ECS (Scool of Electronics and Computer Science  at the University of Southampton) [http://www.ecs.soton.ac.uk/people People Pages] use vCard. Contact cjg@ecs.soton.ac.uk if there's any bugs.&lt;br /&gt;
* [http://www.southwestern.edu/~ramseyp Pat Ramsey] has his contact information on his blog marked up with hCard. Contact [mailto:ramsey.pat@gmail.com ramsey.pat@gmail.com] if there are any bugs there.&lt;br /&gt;
* [http://www.vyre.com/company/contact-us/ VYRE] is a CMS development company with a &amp;quot;contact us&amp;quot; hCard&lt;br /&gt;
* [http://www.lefdal.cc/info.php Alf KÃ¥re Lefdal] uses hCard in the markup of his contact information&lt;br /&gt;
* [http://www.pignwhistle.com.au/ Pig N Whistle, a chain of pubs in Brisbane, Australia] is using hcard to mark up all the contact pages for its outlets and head office&lt;br /&gt;
* [http://www.applianceman-repair-fortbend.com/ac-air-conditioning-repair-katy-tx.html Air Conditioning Katy TX] uses hCard in the footer of the air conditioning repair website. To view an example visit [http://www.applianceman-repair-fortbend.com/sugar-land-appliance-repair.html Appliance Repair Sugar Land]&lt;br /&gt;
* [http://kollitsch.de/ Patrick Kollitsch] has built his personal Profil as hCard&lt;br /&gt;
* [http://www.audiophile.pl/ Car Audio] uses the hCard in his contacts section.&lt;br /&gt;
* [http://www.hbs.edu/faculty/dspar/ Harvard Business School] has hCards on their faculty pages&lt;br /&gt;
* [http://openmikes.org/ openmikes.org] uses hCards for open mike venue addresses in its listing detail pages.&lt;br /&gt;
* [http://www.intertecnollc.com/ InterTecno, LCC] publishes an hCard on the home page and contact page.&lt;br /&gt;
* [http://canaltcm.com/ver/sobre-tcm Turner Classic Movies TCM Spanish website] has published contact details as a hCard&lt;br /&gt;
* [http://rejuvenation.com/ Rejuvenation] is now using hCard for contact information.&lt;br /&gt;
* [http://www.mattash.com/contact/ Matthew Ash] uses the hCard in his contacts section.&lt;br /&gt;
* [http://yarmouthguide.com/business.php Yarmouth Guide] uses hCard for each business details page.&lt;br /&gt;
* [http://www.merchantcircle.com MerchantCircle] has embedded an hCard in every one of their 15+ million US business listings.&lt;br /&gt;
* [http://citizenspace.us/citizens Citizen Space Citizens] is a list of tenants for a coworking space in San Francisco. The issue was raised that ''nicknames'' are usually located in the middle of ''fn'', which is not valid as per the [http://microformats.org/wiki/hcard-brainstorming#Implied_FN_from_N Implied_FN_from_N] rule. It seems that it should be possible, however, to include a ''nickname'' in the middle of an FN or even between a ''given-name'' and a ''family-name''.&lt;br /&gt;
&lt;br /&gt;
* [http://www.brownbook.net The Brownbook - the open yellow pages] The Brownbook is a peer-produced (like a wiki, but not a using a wiki engine) local business search website.  It Uses hCard to allow users to export local business contact details to Outlook or other desktop apps, plus for providing detailed maps from Google. &lt;br /&gt;
** Example of a search results page: [http://www.brownbook.net/business/search/?tag=hair+in+egham&amp;amp;x=21&amp;amp;y=4 Hairdressers in Egham]&lt;br /&gt;
*** '''suboptimal''': Adresses, e.g &amp;quot;2 Station Rd North, Egham, Surrey&amp;quot;, are marked up as &amp;lt;code&amp;gt;street-address&amp;lt;/code&amp;gt;&lt;br /&gt;
** Example of a single business's details [http://www.brownbook.net/business/view/122516 The Hair Emporium].&lt;br /&gt;
*** '''suboptimal''': Adresses, e.g &amp;quot;2 Station Rd North, Egham, Surrey&amp;quot;, are marked up as &amp;lt;code&amp;gt;street-address&amp;lt;/code&amp;gt;&lt;br /&gt;
* [http://www.Sylphen.com Sylphen] is a IT-solutions-provider and uses hCards on the [http://www.sylphen.com/content/kontakt/kontakt.htm Contact]&lt;br /&gt;
** '''invalid''' two of the three examples lack the required &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;fn org&amp;lt;/code&amp;gt; property&lt;br /&gt;
* [http://www.cosmotourist.com www.cosmotourist.com] and [http://www.cosmotourist.de www.cosmotourist.de] A new German and English portal around travel tips. Using hidden hCard for hotel listings, wherever address data is available. &lt;br /&gt;
**Hidden.&lt;br /&gt;
* [http://www.venncommunications.com/contact/ Venn] uses a hidden hCard on the contact page. &lt;br /&gt;
**Hidden.&lt;br /&gt;
* [http://www.last.fm Last FM] has hCards hidden on their profile pages e.g. [http://www.last.fm/user/Crok/?scrobbling=t1].&lt;br /&gt;
**Hidden.&lt;br /&gt;
* [http://krisswatt.co.uk/ Kriss Watt] has hidden an hCard his blog footer.&lt;br /&gt;
**Hidden.&lt;br /&gt;
* [http://www.fberriman.com/ Frances Berriman] has a hidden vCard in the footers of her website.&lt;br /&gt;
**Hidden.&lt;br /&gt;
* [http://www.candlescience.com/ CandleScience Candle Supply] added a hidden hcard sitewide.&lt;br /&gt;
**Hidden.&lt;br /&gt;
* [http://www.meryl.net/ Meryl K. Evans] has a hidden hCard on her homepage.&lt;br /&gt;
**Hidden.&lt;br /&gt;
* [http://www.highflyerscareers.com High Flyers Careers], India's first flight-crew placement agency uses microformats for their [http://www.highflyerscareers.com/corporate/ corporate information] page. Using standards couldn't be easier or better.&lt;br /&gt;
**Has honorific prefixes as part of &amp;quot;fn&amp;quot;, rather than marked up separatley.&lt;br /&gt;
* Spotstor.com eg - [http://spotstor.com/] uses hCard on profile pages (where user has elected to show contact information).&lt;br /&gt;
&lt;br /&gt;
* [http://www.naturalengland.org.uk/press/default.htm Natural England] (new UK government agency, formed 2006-10-01). &lt;br /&gt;
** No &amp;quot;fn&amp;quot; - which makes it invalid.&lt;br /&gt;
*[http://drop-off.co.uk G3:2] uses hCard with geo tags in the copyright and on the about me page&lt;br /&gt;
** Address data is hidden using CSS. &lt;br /&gt;
* [http://zdnet.co.uk/misc/contact/ ZDnet Contact Us Page] supports [[hcard|hCard]].&lt;br /&gt;
** by [http://www.subtleasafish.com/ James Myers] and [http://www.fromthefrontend.co.uk/2006/11/23/zdnet-uses-microformats/ David Long]&lt;br /&gt;
**Images and e-mail addresses are hidden; telephone numbers do not comply with [http://en.wikipedia.org/wiki/E.123 E.123]&lt;br /&gt;
* [http://gbraad.nl/ Gerard Braad] has published an example on his [http://gbraad.nl/site/?p=profile profile] page that is almost consistent with his original [http://gbraad.nl/files/gbraad.vcf vCard] file. Also progress is made for transforming his [http://files.gbraad.nl/foaf.rdf FoaF] file to a hCard encoded representation (also done for my spouse:[http://spouse.gbraad.nl/site/?p=profile Yong Yuan])&lt;br /&gt;
** (2005-09-27) PASSED, PASSED&lt;br /&gt;
** WARNINGS&lt;br /&gt;
*** uses 'n given-name' and 'n family-name' instead of nesting the given- and family- names inside the 'n'&lt;br /&gt;
*** has one 'tel' value with a bunch of values stuffed in&lt;br /&gt;
*** probably more problems --[[User:RyanKing|RyanKing]] 17:19, 5 Jan 2006 (PST)&lt;br /&gt;
* [http://kinrowan.net/ Cori Schlegel] [http://kinrowan.net/blog/wp/archives/2005/07/08/a-problem-with-the-structured-blogging-plug-in-for-wordpress/ discusses how he has updated] [http://kinrowan.net/blog/contact his contact page with hCard]&lt;br /&gt;
** INVALID - using 'prefix' instead of 'honorific-prefix' and type's in classnames (in both adr and tel) and has two photo's (the second could be 'logo') --[[User:RyanKing|RyanKing]] 15:15, 5 Jan 2006 (PST)&lt;br /&gt;
* [http://landsbank.fo/#hCard Landsbanki FÃ¸roya]&lt;br /&gt;
** INVALID - using embedded RDF/XML invalidly&lt;br /&gt;
&lt;br /&gt;
* [http://www.yellowpencil.com/contact/ Yellow Pencil] Using microformats to present company contact information&lt;br /&gt;
** First hcard has empty &amp;quot;fn&amp;quot; and no &amp;quot;n&amp;quot;. &amp;quot;fn&amp;quot; should be with &amp;quot;org&amp;quot; -- [[User: ScottReynen |ScottReynen]] 21:29, 19 Jun 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
* [http://www.art-switch.com/ArtSwitch/contactUs.html Art-Switch Exchange Limited] uses hCard for their contact details on their contact page.&lt;br /&gt;
* [http://onyomo.com/ OnYoMo] uses hCard markup for all addresses listed in their local search results.&lt;br /&gt;
* [http://vcardplus.info/show.asp?uid=Z9959-06323 Greg Bays], the author of vCardPlus! has made his sites vCard display page hCard complaint.&lt;br /&gt;
* [http://www.rosenblittdentistry.com/contact.php Dr. Jon Rosenblitt] uses hCard icon with '''Add to Address Book''' link. &lt;br /&gt;
* [http://www.nfwebsolutions.com/ New Frontier Web Solutions] uses hCard on their front page along with a link pointing to Brian Suda's [http://suda.co.uk/projects/X2V/get-vcard?uri=http://www.nfwebsolutions.com/ X2V].&lt;br /&gt;
* [http://shiftingpixel.com/about/the-artist shifting pixel photoblog] has published an hCard.&lt;br /&gt;
* [http://thoughtport.blogspot.com/ Aiden Kenny] hasn't published his hCard yet, but he has [http://thoughtport.blogspot.com/2005/07/elemental-particles-of-web.html published his hCard icon]: http://photos1.blogger.com/blogger/4224/444/320/AK-Hcard-icon.gif&lt;br /&gt;
* [http://thedredge.org Andy Hume] uses hCards to mark-up the names and URLs of commentors on his blog, e.g. his [http://thedredge.org/2005/06/using-hcards-in-your-blog/ blog post on &amp;quot;Using hCards in your blog&amp;quot;]. &lt;br /&gt;
* [http://www.bidclix.com/ BidClix]'s [http://www.bidclix.com/AboutContact.html Contact BidClix] page has it's ''contact info'' marked up with an hCard.&lt;br /&gt;
* [http://suda.co.uk/ Brian Suda] has managed to embed a photo in [http://suda.co.uk/contact/ his hCard] through the [http://www.ietf.org/rfc/rfc2397.txt data URI scheme] by converting the image to BASE64 code. View the Source to see how this is accomplished. [http://suda.co.uk/projects/X2V/get-vcard.php?uri=http%3A//suda.co.uk/contact/ The X2V link] will extract the image and encode it for a vCard which will be displayed in some address book applications.&lt;br /&gt;
** Inspired by this I thought to try the same for SVG at [http://barefoot-ceramics.com/find Barefoot] ...&lt;br /&gt;
** &amp;amp;lt;img class=&amp;quot;photo&amp;quot; style=&amp;quot;display:none;&amp;quot; src=&amp;quot;data:image/svg+xml;text,&amp;amp;lt;?xml version='1.0' encoding='UTF-8' standalone='no'?&amp;amp;gt;&amp;amp;lt;svg xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg' version='1.0' width='50' height='80' id='svg3957'&amp;amp;gt;&amp;amp;lt;defs id='defs3959' /&amp;gt;&amp;amp;lt;path d='M 28.91433,...32.192802 z' style='fill:#cc4d00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1' id='path9551' /&amp;amp;gt;&amp;amp;lt;/svg&amp;amp;gt;&amp;quot; alt=&amp;quot;Barefoot&amp;quot;&amp;amp;gt;&lt;br /&gt;
** Does it work?? Well it parses OK. Some automated tools replace the &amp;amp;lt; with %3C (etc., e.g. Brian Suda's vCard form). Unfortunately Kontact (KDE contacts tool) doesn't handle SVG as a vCard photo or logo format - I don't know if this is a standard. It seems it could work and maybe even does somewhere. Maybe the text field needs to be Base64 encoded? ... see [http://slashdot.org/~pbhj/journal/142382 pbhj's slashdot journal] for a bit more on this.&lt;br /&gt;
* [http://cinematreasures.org Cinema Treasures] uses hCard to markup venue information for 10,000+ movie theaters.&lt;br /&gt;
* [http://www.w3.org/People/Connolly/events/ Dan Connolly's index of events and talks] has hCards for many of the people he has met at those events. In Mar 2006, he moved a bunch of hotel contact info from his PDA to this page; it's now up to 32 hCards.&lt;br /&gt;
* [http://doncrowley.blogspot.com/ Don Crowley] has published [http://www.crowley.nl/hcard.html his hCard] as well as a nifty hCard button: http://www.crowley.nl/images/hcard.png&lt;br /&gt;
* [http://loadaveragezero.com/hnav/contact.php Douglas W. Clifton] added all types of contact information&lt;br /&gt;
* [http://eventful.com Eventful] publishes all of its venue information pages with embedded hCards.&lt;br /&gt;
* [http://www.iowamilitaryveteransband.com/members/ Iowa Military Veterans Band Contacts] - 95 hCards [http://weblog.randomchaos.com/archive/2005/10/24/Microformats/ marked up by Scott Reynen]&lt;br /&gt;
* [http://JackWolfgang.blogspot.com Jack L. Wolfgang II] has [http://jack.randomata.com/resume/ converted the addresses in his resume to hCards].&lt;br /&gt;
* [http://www.efas.fupl.asso.fr/efas/_Mathieu-Drouet_.html Mathieu Drouet] and [http://www.efas.fupl.asso.fr/efas/_Annie-Leger_.html Annie Leger] both have hCards&lt;br /&gt;
* [http://www.oliverbrown.me.uk/ Oliver Brown] has published his hCard.&lt;br /&gt;
* [http://www.paradigmproductions.org/contact/ Paradigm Productions] published a vCard as a &amp;lt;code&amp;gt;ul&amp;lt;/code&amp;gt; (marked up by [http://www.linkingarts.com/ Peter Jacobson])&lt;br /&gt;
* [http://www.splintered.co.uk/ Patrick H. Lauke] has marked up [http://www.splintered.co.uk/about/ his contact info with hCard].&lt;br /&gt;
* [http://blah Paul Schreiber has published his hCard on [http://paulschreiber.com/about/?contact his about page].&lt;br /&gt;
* [http://paulschreiber.com/blog/ Paul Schreiber]'s [http://concerts.shrub.ca/ Sunnyvale House Concerts] site publishes hCards for upcoming artists, as well as an hCard for the page itself.  In addition the [http://concerts.shrub.ca/shows Past Shows] page contains hCards for all past artists.&lt;br /&gt;
* [http://www.paulmichaelsmith.com/blog/hcard.htm Paul Smith] has created an hCard page which is Human Readable, and a link to X2V passing the same hCard page to generate a vCard.&lt;br /&gt;
* [http://www.windley.com/archives/2005/07/hcards_trying_o.shtml Phil Windley has published] [http://phil.windley.org/hcard.html his hCard].&lt;br /&gt;
* [http://www.go-curiosity.com/about.htm Piercarlo Slavazza] has published an hCard.&lt;br /&gt;
* [http://zooibaai.nl/ Rob Mientjes] has published his hCard on [http://zooibaai.nl/about/ his about page].&lt;br /&gt;
* [http://rbach.priv.at/Contact Robert Bachmann] has published his hCard and [http://rbach.priv.at/Images/hcard a button].&lt;br /&gt;
* [http://blah Scott Reynen has published his hCard on [http://www.randomchaos.com/document.php?source=scott_reynen his profile page].&lt;br /&gt;
* [http://www.stackframe.com/ StackFrame, LLC] has published [http://www.stackframe.com/people/ employee] and [http://www.stackframe.com/contact/ general] contact information as hCards.&lt;br /&gt;
* [http://www.wolfsreign.com Steven Ametjan] has published his hCard on [http://www.wolfsreign.com/about/ his about page].&lt;br /&gt;
* [http://tantek.com/microformats/2005/syndicate/speakers-list.html Syndicate - Speaker List] as a set of hCards&lt;br /&gt;
* [http://tagcamp.org/index.cgi?ContactList TagCamp contact list]&lt;br /&gt;
* [http://www.deadringerart.com/ The Brothers McDowell] have hCards at their Contact page.&lt;br /&gt;
* [http://twinsparc.com/ Twinsparc] put an hCard in the header and footer of all their pages.&lt;br /&gt;
* [http://tantek.com/microformats/2005/web2/speakers.html Web 2.0 Conference speakers page marked up with hCard]&lt;br /&gt;
* [http://www.uoguelph.ca/directory/ The University of Guelph] includes hCard info in its directory.&lt;br /&gt;
* [http://www.echildcare.com.au/ The Australian Child Care Index] has over 3000 entries listing child care services across Australia - and every single one is marked up with an hCard!&lt;br /&gt;
* [http://www.cadforless.com/partners/ CADforless, Inc.] we listed our partners using hCard&lt;br /&gt;
* [http://avon.com/ Avon] - publishes all 40,000+ Avon representatives' contact info with hCard.&lt;br /&gt;
* [http://flock.com/about Flock About] page supports hCard microformat.&lt;br /&gt;
** by [[implementations#Flock|Flock]]&lt;br /&gt;
* [http://www.iowamilitaryveteransband.com/members/ Iowa Military Veterans Band]&lt;br /&gt;
* [http://www.nature.com/ Nature homepage], uses [[XOXO]].&lt;br /&gt;
** by [[implementations#Nature Publishing Group|Nature Publishing Group]]&lt;br /&gt;
* [http://concerts.shrub.ca/shows Sunnyvale House Concerts] supports hCard and [[hcalendar|hCalendar]].&lt;br /&gt;
* [http://www.bath.ac.uk/ University of Bath] [http://www.bath.ac.uk/contact/ Person Finder] supports hCard, e.g. see [http://www.bath.ac.uk/person/139897 Mr T Natt] page.&lt;br /&gt;
* [http://www.monster-prague.cz/ Monster Prague Openings] supports hCard, e.g. home page, contact list to come.&lt;br /&gt;
* [http://www.vogelelaw.com/contact.html Colette Vogele] has an hCard on her contact page with many types of name and contact information. (Marked up by [http://www.talkingtiger.net Naomi Raine]).&lt;br /&gt;
* [http://www.fixya.com/repair/cars/us/ca/san_francisco FixYa] (the troubleshooting site) has an hCard (vCard) in the repair directory displaying information about all kinds service providers.&lt;br /&gt;
* [http://www.alive77.cn/ z.Yleo77] it's my blog, from now on,supports hCard, eg: article pages..&lt;br /&gt;
* [http://www.wfl-networks.co.uk/ WFL-Networks Computer Repair in Aylesbury] a localised IT Support company in Buckinghamshire, UK supporting hCard on its contact pages.&lt;br /&gt;
* [http://www.elcafedelcentre.com/index.html El Cafè del Centre] uses an hCard for his contact information in firts place.&lt;br /&gt;
* [http://www.petardos.org/index.php Petardos 4x4] uses an hCard for his contact information at the footer in all pages.&lt;br /&gt;
* [http://www.artimap.com artimap.com] uses vCards for helping the javascript in-page local search-engine.&lt;br /&gt;
* [http://www.handballkreis-koeln-rheinberg.de Handballkreis Köln/Rheinberg] uses hCard for contact informations of officials&lt;br /&gt;
* [http://www.evopapetarie.ro] uses hCard for contact page.&lt;br /&gt;
* [http://www.musiktagespflege-leichlingen.de Musiktagespflege Leichlingen] uses hCard for imprint and contact informations.&lt;br /&gt;
* [http://www.atbbuildinginc.com/ ATB Building Royal Oak MI] is using hCard on the contact page of their website.&lt;br /&gt;
* [http://www.badspiderbites.com/ Bad Spider Bites] uses hCard on their about page for customer submissions and contact information.&lt;br /&gt;
* [http://www.xn--mxacivya8br.net/ Φαψεβοοκ] Φαψεβοοκ uses hCard on their [http://www.xn--mxacivya8br.net/about-us/ Φαψεβοοκ about page] for customer contact information.&lt;br /&gt;
* [http://www.xn--oxaagxsa.com.gr/ Γοογλε] Γοογλε uses hCard on their [http://www.γοογλε.com.gr/terms/about-us/ Γοογλε about page] for customer contact information.&lt;br /&gt;
* [http://www.gogole.us.com/ Gogole] Gogole uses hCard on their [http://www.gogole.us.com/terms/about-us/ Gogole about page] for customer contact information.&lt;br /&gt;
* [http://www.gogle.us.com/ Gogle] Gogle uses hCard on their [http://www.gogle.us.com/terms/about-us/ Gogle about page] for customer contact information.&lt;br /&gt;
* [http://www.gooogle.us.com/ Gooogle] Gooogle uses hCard on their [http://www.gooogle.us.com/terms/about-us/ Gooogle about page] for customer contact information.&lt;br /&gt;
* [http://www.zappbug.com/ ZappBug] uses hCard markup on [http://www.zappbug.com/contact/ their contact page].&lt;br /&gt;
* [http://www.kalayaffa.co.il/ Kala Yaffa] uses hCard in front page describing the business.&lt;br /&gt;
* [http://www.cartuse-imprimante.com/ Cartuse Imprimante], printer cartridges supplier, printers, uses an hCard on home page and contact page of the website.&lt;br /&gt;
* [http://www.xn--rgba6eo.sa.com/ جوجل] Google Arabic uses hCard on their [http://www.جوجل.sa.com/terms/about-us/ جوجل about page] for customer contact information.&lt;br /&gt;
* [http://www.appliancerepairforless.com/ Appliance Repair For Less] uses hCard on our footer page.&lt;br /&gt;
* [http://www.appliancerepairproatlanta.com/ Atlanta Appliance Repair] uses hCard on the bottom of homepage.&lt;br /&gt;
&lt;br /&gt;
== examples by category ==&lt;br /&gt;
'''Want hCard?''' Get started with writing an [[hcard|hCard]] using the [http://microformats.org/code/hcard/creator hCard creator] to write up some contact information, [[validators#hCard|validate]] and publish it, or following the [[hcard-authoring|hCard authoring tips]] to add hCard markup to your current site.  Check out this section for similar examples of types of pages that benefit from hCard markup.&lt;br /&gt;
&lt;br /&gt;
This section organizes examples into several rough categories as follows. If an example fits in more than one category, use the *last* matching category in this list that matches the specific hCard example(s) in the wild that you are trying to categorize.&lt;br /&gt;
# '''[[hcard-examples-in-wild#Individuals|Individuals]]''' - one card per person, perhaps sort alphabetically by &amp;quot;family-name&amp;quot;.  People with their own hCards (typically) on their own site.&lt;br /&gt;
# '''[[hcard-examples-in-wild#Organizations|Organizations]]''' - one card per organization, alphabetical by &amp;quot;fn&amp;quot;. Organizations with their own hCard(s) (typically) on their own site.&lt;br /&gt;
# '''[[hcard-examples-in-wild#Institutions|Institutions]]''' - which list more than one person, with a count estimating the # of hCards, e.g. 40k for Avon. Also indicate complexity of information supplied, eg. just name+number vs. complete details.  Alphabetically sorted by &amp;quot;org&amp;quot; with perhaps a few individuals listed in a single sub-bullet, comma delimited, sorted by &amp;quot;family-name&amp;quot;.&lt;br /&gt;
# '''[[hcard-supporting-user-profiles|Online Profiles]]''' - which host profiles for more than one person, with a count estimating the # of hCards, e.g. 10m+ for Flickr.com.  Alphabetically sorted by company / service name.&lt;br /&gt;
# '''[[hcard-examples-in-wild#Online_Venues|Online Venues]]''' - which provide listings for businesses or organizations, with a count estimating the # of venues, e.g. ~10k for Upcoming.org. Alphabetically sorted by service/site name, with perhaps a few specific venues listed in a single sub-bullet, comma delimited, sorted by &amp;quot;fn&amp;quot;.&lt;br /&gt;
# '''[[hcard-examples-in-wild#Event_Speakers|Event Speakers]]''' - event pages where the speaker for the event is marked up with hCard.&lt;br /&gt;
# '''[[hcard-examples-in-wild#Speakers_Listings|Speakers Listings]]''' - event sites' speakers pages where the speakers are marked up with hCard.  Sort by date, sub-grouped by year.  Most recent first.  Perhaps a few individuals listed in a single sub-bullet each event, comma delimited, sorted by &amp;quot;family-name&amp;quot;.&lt;br /&gt;
# '''[[hcard-examples-in-wild#Group_Blogs|Group Blogs]]''' - blogs with multiple authors marked up with hCard&lt;br /&gt;
# '''[[hcard-examples-in-wild#Wiki_Templates|Wiki templates]]''' - community wikis that have templates that automatically generate hCards on pages&lt;br /&gt;
# '''[[hcard-examples-in-wild#Authors|Authors]]''' - pages about some other thing, such as books, perhaps reviews etc., which have marked up their authors with hCard&lt;br /&gt;
# '''[[hcard-examples-in-wild#Search_Results|Search Results]]''' - results pages from search engines (either generic or for people/organizations) that return people marked up with hCards.&lt;br /&gt;
# '''[[hcard-examples-in-wild#Listing_Contact|Listing Contact]]''' - contact information for a listing like a job posting, for sale offering, etc.&lt;br /&gt;
&lt;br /&gt;
In addition there is a separate &amp;quot;[[hcard-examples-in-wild#UTF8_Examples|UTF8 Examples]]&amp;quot; section that can be used to put another link to any hCard examples in the wild which exercise various non-ASCII7 / non-english characters for various property values.&lt;br /&gt;
&lt;br /&gt;
As each section itself become quite large (we might be there already, once we sort through the above &amp;quot;Reviewed Examples&amp;quot;), it will probably be moved to a separate page, leaving its heading here in place, and replacing its contents here with a link to the separate page and perhaps a stats summary.&lt;br /&gt;
&lt;br /&gt;
=== Individuals ===&lt;br /&gt;
Groupings alphabetically by &amp;quot;family-name&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Nicely styled:&lt;br /&gt;
* [http://npdoty.name/ Nick Doty]'s home page has a very cleanly designed hCard with a map background indicating his current general geographic location.&lt;br /&gt;
* [http://www.jaredhanson.net/ Jared Hanson]'s home page has a beautiful hCard with numerous ways of contacting him, and live updating of his online status on various messaging networks (uses javascript).&lt;br /&gt;
* [https://mowens.com Michael K. Owen]'s home page has a beautiful and exceptionally detailed hCard (click &amp;quot;Show Detailed Bio&amp;quot; at the bottom).&lt;br /&gt;
&lt;br /&gt;
Simple web pages (sorted by family name)&lt;br /&gt;
&lt;br /&gt;
B:&lt;br /&gt;
* [http://dbaron.org/ David Baron]'s home page is marked up with hCard.&lt;br /&gt;
* [http://abernier.name Antoine Bernier]'s UID hcard:&lt;br /&gt;
** Dynamic VCF download link (through [http://suda.co.uk/projects/microformats/hcard/get-contact.php?uri= hcard parser])&lt;br /&gt;
** Dynamic QRcode (through [http://microform.at/hcard2qrcode/ hcard2qrcode])&lt;br /&gt;
** Dynamic avatar (through [http://www.gravatar.com/ Gravatar])&lt;br /&gt;
** [http://wiki2008.openid.net/Delegation openID] ready&lt;br /&gt;
** [http://hcard.geekhood.net/?url=http%3A%2F%2Fabernier.name valid]&lt;br /&gt;
* [http://www.eugenbusoiu.com Eugen Busoiu]'s home page marked up with hCard&lt;br /&gt;
C/Ç:&lt;br /&gt;
* [http://tantek.com/ Tantek Çelik]'s home page includes an inline author hCard at the bottom of the page.&lt;br /&gt;
* [http://www.vipulschawathe.ind.in/ Chawathe, Vipul] hosts barely (in(head)line CSS) styled resume where hCard is part of by default visible bio-data section, and other (ancestral)sections may be kept visible by user.&lt;br /&gt;
* [http://christycollins.net/ Christy Collins]'s home page is a detailed profile hCard.&lt;br /&gt;
* [http://christophertcressman.com/ Christopher T. Cressman] put his contact details on [http://christophertcressman.com/ Who is Chris Cressman?] and marked them up with hCard.&lt;br /&gt;
I:&lt;br /&gt;
* [http://monkinetic.com/ Steve Ivy] with hCard and [http://monkinetic.com/about-this-site.html about page] with the usual suspects + XFN on 'url's, photo.&lt;br /&gt;
J:&lt;br /&gt;
* [http://www.ryanmjones.com Ryan Jones]'s home page is also an hCard.&lt;br /&gt;
M:&lt;br /&gt;
* [http://factoryjoe.com/hcard.html Chris Messina] has a page set aside with his contact details.&lt;br /&gt;
* [http://madebyjordan.com/ Jordan Moore]'s blog contains an inline hCard.&lt;br /&gt;
R:&lt;br /&gt;
* [http://blog.roub.net/ Paul Roub] has an hCard for himself on his blog's home page.&lt;br /&gt;
S:&lt;br /&gt;
* [http://www.w3.org/People/Smith/hcard/ Michael(tm) Smith has an hCard] on a page linked from [http://www.w3.org/People/Smith/ his W3C staff page]&lt;br /&gt;
** note lack of 'n' property but explicit use of 'given-name' and 'family-name' - more evidence we should drop the 'n' requirement (flatter is better) [[User:Tantek|Tantek]] 04:10, 6 May 2011 (UTC)&lt;br /&gt;
T:&lt;br /&gt;
* [http://paultarjan.com Paul Tarjan]'s home page has hCard and is a rel=&amp;quot;me&amp;quot; hub&lt;br /&gt;
** needs a few minor fixes: http://tr.im/hctvd (links to hCard validator results)&lt;br /&gt;
* Patrick Trettenbrein is the operator of [http://skateboardspot.info/ skateboardspot.info] and uses hCard on its [http://skateboardspot.info/cat/about#operator &amp;quot;about&amp;quot; page] for his contact info.&lt;br /&gt;
W:&lt;br /&gt;
* [http://blogs.msdn.com/cwilso/ Chris Wilson] has an hCard for himself on [http://blogs.msdn.com/cwilso/about.aspx his about page].&lt;br /&gt;
* ...&lt;br /&gt;
Z:&lt;br /&gt;
* [http://www.afteru.co.il/?p=919 Aviran Zazon] has an hCard on his company personal webpage (Staff).&lt;br /&gt;
Hidden! Invisible data is strongly discouraged, these examples have been grouped here in the hopes that the authors will someday make their hCards visible:&lt;br /&gt;
* [http://ajbrown.org/ A.J. Brown]'s home page includes a hidden hCard at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
Former. URLs that seem to have broken.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;http://rogieking.com/#contact&amp;lt;/nowiki&amp;gt; Rogie King's contact info was marked up with hCard and very nicely styled. (missing as of 2013-03-15)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;http://tomleo.com/about.html&amp;lt;/nowiki&amp;gt; Tom Leo's about page had an hCard. (missing as of 2009-08-23)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;http://bogomil.info?l=en/&amp;lt;/nowiki&amp;gt; Bogomil Shopov had an hCard for himself (missing as of 2011-125)&lt;br /&gt;
&lt;br /&gt;
=== Organizations ===&lt;br /&gt;
Sites for specific organizations with their own hCard on home page, or contact/about page(s). Grouped by country, sorted alphabetically (US first by convention). When this section gets too big we can make a separate business directory page.&lt;br /&gt;
&lt;br /&gt;
==== US orgs ====&lt;br /&gt;
* [http://www.pinewoodgroup.com/ Pinewood Shepperton plc] includes an hCard on their home page, and several more upon clicking their &amp;quot;Contact Us&amp;quot; button (found via [http://www.thedrum.co.uk/news/2011/09/07/25776-pinewood-studios-launch-website-created-by-multiply/ 2011-09-07 Pinewood Studios launch website created by Multiply] [[press]] article).&lt;br /&gt;
* [http://www.primerica.com/public/contact.html Primerica] uses hCard on &amp;quot;Contact Primerica&amp;quot; page for home office address.&lt;br /&gt;
* [http://RippleFxInc.com/ RippleFxInc.com] including both [http://blog.RippleFxInc.com/ Ideas Blog @ Ripple FX] and [http://wiki.RippleFxInc.com/ Knowledge Wiki @ Ripple FX] use hCard markup and allows for vCard download on their page footers; because they care, the same is standard on every site they design.&lt;br /&gt;
* [http://www.sfmoma.org/ San Francisco Museum of Modern Art] (SFMOMA)'s home page and pages in general have their address marked up in hCard.&lt;br /&gt;
* [http://www.unisonarts.org/ Unison Arts Center] home page has an hCard with [[adr]], [[geo]], tel, email, and shows up with a [https://www.google.com/search?q=unisonarts search result rich-snippet] with map pin &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;http://www.google.com/intl/en_us/mapfiles/ms/icons/red-dot.png address&amp;lt;/span&amp;gt; underneath, and call out map box using lat/long. ([https://twitter.com/anewc2/status/225592163109584899 as tweeted 2012-07-18])&lt;br /&gt;
* [http://www.juixing.com Juixing.com - juice recipes] uses hCard markup on recipe pages.&lt;br /&gt;
&lt;br /&gt;
==== Australia orgs ====&lt;br /&gt;
* [http://www.brdatasystems.com.au/contact-us.html B&amp;amp;R Data Systems] is an organisation hCard. We have also used the technorati tool to download as a vCard, which I think is useful for a business.&lt;br /&gt;
&lt;br /&gt;
==== England orgs ====&lt;br /&gt;
* [http://www.alexandersremovals.co.uk/ Alexanders Removals] uses hCard for business address and contact details.&lt;br /&gt;
* [http://www.confidence2smile.co.uk/ Confidence 2 Smile] uses hCard for business address and contact details.&lt;br /&gt;
* Counselling Psychologist London (counsellingpsychologistlondon.com) uses hCard for practice contact details for the page [http://counsellingpsychologistlondon.com/londonpsychologist.html private psychologists in london]&lt;br /&gt;
* [http://www.dovetaildental.co.uk/ Dovetail Dental] uses hCard for business address and contact details.&lt;br /&gt;
* [http://www.electricalcerts.co.uk/ Electrical Certs] uses hCard for business address and contact details.&lt;br /&gt;
* [http://www.guaranteemyrent.com/ Guarantee My Rent] uses hCard on their [http://www.guaranteemyrent.com/contact/ Contact us page]&lt;br /&gt;
&lt;br /&gt;
==== France orgs ====&lt;br /&gt;
* [http://www.fnacspectacles.com fnacspectacles], (online ticket office) uses hCard (vcard) and hCalendar (vevent) on events. Example [http://www.fnacspectacles.com/place-spectacle/manifestation/Film-PIERRE-RABHI---AU-NOM-DE-LA-TERRE-PRAB.htm Film Pierre Rahbi - Au nom de la Terre] (note the english section on http://www.fnactickets.com/ does not support microformats)&lt;br /&gt;
* [http://www.vtcreative.fr/ Vtcreative] uses hCard in the footer on the home page.&lt;br /&gt;
&lt;br /&gt;
==== Spain orgs ====&lt;br /&gt;
* [https://qoolife.com Qoolife] uses hCard for the hospitals, medical centres and online practices in their directory. E.g. [https://qoolife.com/s/instituto-andaluz-de-neurologia-pediatrica Inst. Andaluz Neurología Pediátrica].&lt;br /&gt;
&lt;br /&gt;
==== Germany orgs ====&lt;br /&gt;
* [http://www.hsg-kl.de/impressum/index.php Hohenstaufen Gymnasium Kaiserslautern] has hCard contact info&lt;br /&gt;
** '''suboptimal''': &amp;lt;code&amp;gt;adr&amp;lt;/code&amp;gt; subproperties are not recognized due to lack of explicit &amp;quot;adr&amp;quot; property.&lt;br /&gt;
*** evidence that has helped drive the flatter design of [[microformats-2]] including h-card which permits adr properties, e.g. 'street-address' directly inside the hCard instead of requiring an explicit 'adr' in the hierarchy. - [[User:Tantek|Tantek]] 01:46, 17 May 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Georgia orgs ====&lt;br /&gt;
* [http://www.serviceklimatistikon.gr/contact/ magiClima's contact page] uses for customer contact information.&lt;br /&gt;
&lt;br /&gt;
==== Israel orgs ====&lt;br /&gt;
* [http://artprints.co.il/contact.html Art Prints contact information]&lt;br /&gt;
* [http://printsolution.ro reincarcari cartuse] uses hCard on contact listings.&lt;br /&gt;
* [http://www.troya-garden.co.il Troya Garden wedding hall contact information]&lt;br /&gt;
* [http://www.taim.co.il/%D7%A4%D7%A8%D7%98%D7%99-%D7%94%D7%AA%D7%A7%D7%A9%D7%A8%D7%95%D7%AA Sandwich Bar contact information]&lt;br /&gt;
&lt;br /&gt;
==== Italy orgs ====&lt;br /&gt;
* [http://www.webmotion.it Webmotion - Siti internet] uses hCard markup on their [http://www.webmotion.it/contatti contact page].&lt;br /&gt;
* [http://www.numidia.it Numidia.it] uses hCard markup for their [http://www.numidia.it/#/direzioni contact info].&lt;br /&gt;
&lt;br /&gt;
==== Netherlands orgs ====&lt;br /&gt;
* [http://www.kdvkabouterbos.nl/ Kinderdagverblijf Kabouterbos], a day care / nursery that uses an hCard for their contact information (footer).&lt;br /&gt;
* [http://www.simourix.nl Simourix] At the top of each page you'll find our hcard. Only the address, phone number and email address are visible, but the actual hcard contains much more info.&lt;br /&gt;
&lt;br /&gt;
Mis-sorted - this should be moved to a search results section:&lt;br /&gt;
* [http://www.michrome.com Michrome Marketing Lists (UK)] use hCard on all their search result data.  For example, [http://michrome.com/free-leads/162-Bradford-BD9 Startup Companies in Bradford].&lt;br /&gt;
&lt;br /&gt;
Old: (these sites used to have hCard, some may have gone offline)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;http://technorati.com Technorati&amp;lt;/nowiki&amp;gt; (2004-2011)&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;http://technorati.com/about/ about, http://technorati.com/press/ press, and http://technorati.com/about/contact.html contact&amp;lt;/nowiki&amp;gt; pages with hCard and have &amp;quot;Add to Address Book&amp;quot; links with the &amp;lt;nowiki&amp;gt;http://feed.technorati.com/contacts/ Technorati Contacts Feed service&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;http://technorati.jp Technorati Japan&amp;lt;/nowiki&amp;gt; (2004-2011)&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;http://technorati.jp/about/contact.html contact&amp;lt;/nowiki&amp;gt; page marked up with hCard.&lt;br /&gt;
&lt;br /&gt;
==== Romanian orgs ====&lt;br /&gt;
* [http://www.myman.ro MyMan.ro - online store] uses hCard markup on product pages.&lt;br /&gt;
&lt;br /&gt;
==== Russia orgs ====&lt;br /&gt;
* [http://xn----dtbqhchsfl0ah.xn--p1ai/ Buy Rockwool] uses hCard markup on its [http://xn----dtbqhchsfl0ah.xn--p1ai/%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D1%8B/ contact page].&lt;br /&gt;
&lt;br /&gt;
==== Scotland orgs ====&lt;br /&gt;
* [http://www.fdantiques.com/contact.asp Hannies Antiques Ltd contact page] has an hCard with geo too.&lt;br /&gt;
&lt;br /&gt;
==== Uruguay orgs ====&lt;br /&gt;
* [http://blog.cuboxlabs.com/ Cubox labs] has a nice contact info hCard on their blog home page with address, email, telephone, twitter, github.&lt;br /&gt;
&lt;br /&gt;
=== Institutions ===&lt;br /&gt;
* Mozilla's WebFWD [https://webfwd.org/about/experts/ experts] and [https://webfwd.org/about/team/ team] pages have hCards, including [[microformats-2]] h-card markup.&lt;br /&gt;
* [http://conferences.oreillynet.com/contacts.csp O'Reilly's Conferences Team page] has hCards for their team (~14) with a link to &amp;quot;Download the below contact info in vcf format&amp;quot; that uses the old Technorati contacts feed service to convert the hCards into vCards.&lt;br /&gt;
** needs updating to use [[H2VX]] instead of Technorati&lt;br /&gt;
** '''suboptimal''': The &amp;quot;org&amp;quot; shouldn't be hidden with &amp;quot;display:none&amp;quot;. Instead, use the [[include-pattern]] to include the &amp;quot;org&amp;quot; from text elsewhere on the page (to avoid duplicating the text).&lt;br /&gt;
&lt;br /&gt;
'''with some problems:'''&lt;br /&gt;
* The [http://www.ibm.com/contact/employees/ IBM Employee Directory] returns hCards in its query results&lt;br /&gt;
** E.g. [http://www.ibm.com/contact/employees/servlets/lookup?country=us&amp;amp;language=en&amp;amp;search_country=all&amp;amp;lastname=Kaply&amp;amp;firstname=Michael search for Michael Kaply], &lt;br /&gt;
** but with some problems: &lt;br /&gt;
*** '''invalid''': no &amp;quot;fn&amp;quot; (would be addressed by the [[hcard-brainstorming#Implied_FN_from_N|implied fn from n proposal]]) &lt;br /&gt;
*** '''suboptimal''': adr has no children and thus is not providing any data (may be addressed by the [[hcard-brainstorming#implied_adr_subproperties|implied adr subproperties proposal]])&lt;br /&gt;
* [http://www.boltonmuseums.org.uk Bolton Museum and Archive Service] uses hCard on its&lt;br /&gt;
**[http://www.boltonmuseums.org.uk/about/contact/ Contacts] page&lt;br /&gt;
***'''invalid''': Several have no &amp;quot;fn&amp;quot;&lt;br /&gt;
**and on each of its visitor attractions pages e.g. on the [http://www.boltonmuseums.org.uk/visiting/findhallthwood/ Hall i' th' Wood location page].&lt;br /&gt;
***'''suboptimal''': &amp;quot;email&amp;quot; and &amp;quot;tel&amp;quot; properties mistakenly include &amp;quot;Email:&amp;quot; and &amp;quot;Telephone:&amp;quot; labels.&lt;br /&gt;
* [http://soap.stanford.edu/ Stanford Online Accessibility Program] has implemented hCard on every page&lt;br /&gt;
** '''suboptimal''': positioned off screen via CSS&lt;br /&gt;
* [http://www.belkin.com/pressroom/releases/uploads/10_09_06SportCommand.html Belkin Press Release] - All Belkin  press releases since October 2006 use hCard and vCard for company contact info.&lt;br /&gt;
** '''invalid''': Example has 1 (out of 3) invalid hCard due to lack of &amp;quot;fn&amp;quot;.&lt;br /&gt;
* [http://www.alexa.com Alexa Internet] marked up its [http://www.alexa.com/site/company/managers managers' page] with hCard.&lt;br /&gt;
** '''suboptimal''': job &amp;quot;title&amp;quot; is included inside within &amp;quot;fn&amp;quot; property.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
old:&lt;br /&gt;
* 2005-2010(?) &amp;lt;nowiki&amp;gt;http://technorati.com/about/staff.html Technorati's Staff page had hCards for its employees (~31)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** E.g. &amp;lt;nowiki&amp;gt;http://technorati.com/about/staff.html?s=matthew_levine#matthew_levine Matthew Levine, http://technorati.com/about/staff.html?s=ryan_king#ryan_king Ryan King, etc.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Online Profiles ===&lt;br /&gt;
* See [[hcard-supporting-profiles]].&lt;br /&gt;
&lt;br /&gt;
=== Online Venues ===&lt;br /&gt;
* [http://www.airfix.com/stockists-and-distributors/ Airfix Stockists and Distributors], e.g. [http://www.airfix.com/stockists-and-distributors/?postcode=b1+1bb&amp;amp;root_rid=1&amp;amp;search.x=0&amp;amp;search.y=0&amp;amp;search=search]&lt;br /&gt;
**'''suboptimal''': &amp;lt;code&amp;gt;street-address&amp;lt;/code&amp;gt; contains street address, locality and region (e.g. &amp;quot;99 Hobs Moat Rd, Solihull, W. Midlands&amp;quot;)&lt;br /&gt;
**'''suboptimal''': &amp;lt;code&amp;gt;postal-code&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;country-name&amp;lt;/code&amp;gt; include preprended commas&lt;br /&gt;
**'''suboptimal''': &amp;lt;code&amp;gt;fn&amp;lt;/code&amp;gt; is used; should be &amp;lt;code&amp;gt;fn org&amp;lt;/code&amp;gt;&lt;br /&gt;
* [http://citysearch.com/ Citysearch] supports hCard (e.g. [http://seattle.citysearch.com/profile/10767458/seattle_wa/tulio_ristorante.html Tulio Ristorante in Seattle] and [http://sanfrancisco.citysearch.com/profile/46396865/san_francisco_ca/four_barrel_coffee.html Four Barrel in SF]) nested inside an [[hreview-aggregate]].&lt;br /&gt;
* [http://www.easthampshire.org/ easthampshire.org] - hCard on events and events map - e.g. http://easthampshire.org/eventdetail/wine_society_evening/1372606 and http://easthampshire.org/eventmap/wine_society_evening/1372606 built by [http://www.callendercreates.com Callender Creates]&lt;br /&gt;
* [http://foursquare.com Foursquare] supports hCard on venue pages, e.g. [https://foursquare.com/v/four-barrel-coffee/480d1a5ef964a520284f1fe3 Four Barrel Coffee]&lt;br /&gt;
* [http://rinklinks.ca/ RinkLinks.ca: A Comprehensive Rinks and Arenas Directory for North America] supports an hCards for listings in their directory.&lt;br /&gt;
* [http://www.sydneydirectory.org/ Sydney Directory Wiki] supports hCard and geographical coordinates for locations, e.g. the [http://www.sydneydirectory.org/index.php/Opera_House Sydney Opera House].&lt;br /&gt;
* [http://webmaker.org Webmaker] (by Mozilla) supports hCard (and [[uf2]] h-card) on venues of events, e.g. [https://webmaker.org/en-US/events/192f56eb9/ IndieWebCamp 2012] (as [https://twitter.com/microformats/status/212207925643587585 tweeted 2012-06-12]).&lt;br /&gt;
&lt;br /&gt;
=== Event Venues ===&lt;br /&gt;
* [http://eventbrite.com Eventbrite] events all have their venues/locations marked up with hCard, e.g. [http://csswgtucson.eventbrite.com Meet The W3C CSS Working Group!]&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Event Speakers ===&lt;br /&gt;
* [http://fluentconf.com/fluent2012 O'Reilly fluent conference 2012] sessions, e.g. [http://fluentconf.com/fluent2012/public/schedule/detail/25831 Federated Wiki Mashes Data in Your Browser] have speakers marked up with hCard.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Speakers Listings ===&lt;br /&gt;
* ... lots more to add from events since 2007, e.g. every dConstruct etc.&lt;br /&gt;
&lt;br /&gt;
==== 2007 ====&lt;br /&gt;
[[to-do]]: check 2007 [[presentations]] as they likely contain links to conferences that marked up their speakers page(s) with hCard.&lt;br /&gt;
* 09: [http://2006.dconstruct.org/speakers/ d.Construct 2007 speakers]&lt;br /&gt;
==== 2006 ====&lt;br /&gt;
[[to-do]]: check 2006 [[presentations]] as they likely contain links to conferences that marked up their speakers page(s) with hCard.&lt;br /&gt;
* 09: [http://2006.dconstruct.org/speakers/ d.Construct 2006 speakers]&lt;br /&gt;
==== 2005 ====&lt;br /&gt;
[[to-do]]: check 2005 [[presentations]] as they likely contain links to conferences that marked up their speakers page(s) with hCard.&lt;br /&gt;
* 12: [http://tantek.com/microformats/2005/syndicate/speakers-list.html Syndicate - Speaker List] (hCarded version hosted at tantek.com)&lt;br /&gt;
* 10: [http://tantek.com/microformats/2005/web2/speakers.html Web 2.0 Conference 2005 -- Speakers] (hCarded version hosted at tantek.com)&lt;br /&gt;
* 09: [http://web.archive.org/web/20051102094339/we05.com/ Web Essentials 05] - [http://web.archive.org/web/20051102094339/we05.com/presenters.cfm The Presenters]  &amp;lt;nowiki&amp;gt;original URL: http://we05.com/presenters.cfm&amp;lt;/nowiki&amp;gt; (appears to have stopped working as of 2007-12-18, perhaps earlier). Web Essentials 2005 (we05) was the [http://tantek.com/log/2005/10.html#d06t1720 first conference to adopt hCard and hCalendar] on their website and marked up all their presenters with hCard.&lt;br /&gt;
&lt;br /&gt;
=== Group Blogs === &lt;br /&gt;
* The [http://www.ibm.com/shortcuts/ IBM Shortcuts Podcast] has authors marked up with hCard but has some problems:&lt;br /&gt;
** '''hidden''': The root hCard element as well as every property contained therein is made invisible through a style attribute containing &amp;quot;position:absolute; visibility:hidden&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Wiki Templates ===&lt;br /&gt;
* Wikipedia&lt;br /&gt;
**Wikipedia-EN&lt;br /&gt;
*** People. starting to roll-out on articles about people, for example [http://en.wikipedia.org/wiki/Albert_einstein Albert Einstein]. The nature of Wikipedia means that there are a large number of templates to update (Albert's is &amp;quot;infobox scientist; there's also &amp;quot;infobox military people&amp;quot;, &amp;quot;infobox musician&amp;quot; and so on, almost ad infinitum). DoB is only included if it's entered using a birth-date template, not as raw text. &lt;br /&gt;
*** Places/orgs. starting to roll-out on articles about places, for example on UK Railway station template, e.g. [http://en.wikipedia.org/wiki/Birmingham_New_Street Birmingham New Street station] (includes Geo); and  cities, for example [http://en.wikipedia.org/wiki/New_York_City New York]. See above for note on Wikipedia templates.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Category:Templates_generating_Geo Wikipedia templates generating Geo]&lt;br /&gt;
****'''hidden''' - for example [http://en.wikipedia.org/wiki/List_of_Minnesota_State_Parks List of Minnesota state parks]; [http://en.wikipedia.org/w/index.php?title=Alberta_Highway_60&amp;amp;diff=prev&amp;amp;oldid=157308650 Alberta Highway 60]&lt;br /&gt;
****Note also removal of hCard properties, e.g. [http://en.wikipedia.org/w/index.php?title=List_of_Gaudi_Buildings&amp;amp;diff=prev&amp;amp;oldid=157704557 List_of_Gaudi_Buildings]&lt;br /&gt;
*** Any Wikipedia editors willing to assist with updating templates should see [http://en.wikipedia.org/wiki/Wikipedia:WikiProject_Microformats Wikipedia's microformat project]; [http://en.wikipedia.org/wiki/Category:Templates_generating_hCards Wikipedia templates generating hCards]&lt;br /&gt;
***Unfortunately, [http://en.wikipedia.org/w/index.php?title=Template:Infobox_Protected_area&amp;amp;diff=prev&amp;amp;oldid=152308153 other editors are already breaking some of the implementations on Wikipedia]; e.g. [http://en.wikipedia.org/wiki/Grand_Canyon_National_Park Grand Canyon National Park]; [http://en.wikipedia.org/w/index.php?title=List_of_islands_of_Argentina&amp;amp;diff=prev&amp;amp;oldid=155590535 removal of &amp;quot;region&amp;quot; attributes]&lt;br /&gt;
*** &amp;lt;s&amp;gt; Wikipedia now has a template, [http://en.wikipedia.org/wiki/Template:Hcard-geo hcard-geo], for in-line hCards with coordinates, such as that on [http://en.wikipedia.org/wiki/Engine_Arm Engine Arm]&amp;lt;/s&amp;gt;&lt;br /&gt;
**Wikipedia-UK (Ukranian) starting to roll out on biographies e.g. [http://uk.wikipedia.org/wiki/%D0%93%D0%B5%D1%82%D1%8C%D0%BC%D0%B0%D0%BD_%D0%92%D0%B0%D0%B4%D0%B8%D0%BC_%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B8%D1%87 Vadym Hetman]&lt;br /&gt;
* Wikiqueer&lt;br /&gt;
** [http://www.wikiqueer.org/w/Category:Templates_generating_hCards Wikiqueer templates generating hCards]&lt;br /&gt;
** [http://www.wikiqueer.org/w/Category:Templates_generating_microformats Wikiqueer templates generating microformats] in general&lt;br /&gt;
&lt;br /&gt;
=== Authors ===&lt;br /&gt;
* [http://time.com TIME.com] marks up articles with hAtom including authors with hCard, e.g. [http://techland.time.com/2012/05/10/like-to-brag-on-facebook-or-twitter-thats-because-self-disclosure-is-like-eating-and-sex-says-study/ Like to Brag on Facebook or Twitter? That’s Because Self-Disclosure Is like Eating and Sex, Says Study]&lt;br /&gt;
* [http://lazylibrary.com LazyLibrary] uses author hCard's on every book page. Example: [http://lazylibrary.com/book/0751370576]&lt;br /&gt;
** '''suboptimal''' [http://lazylibrary.com/book/0751370576 Example] has an fn of &amp;quot;Dorling Kindersley, David West Reynolds&amp;quot; which should be split into two hCards! (site would also benefit from hReview).&lt;br /&gt;
* ... many more (e.g. see unsorted list above, verify and move here)&lt;br /&gt;
&lt;br /&gt;
=== Search Results ===&lt;br /&gt;
* [http://www.bath.ac.uk/contact/ University of Bath] Person Finder results are encoded with hCards so you can easily create a vCard from any result. &lt;br /&gt;
** '''invalid''': attempt to use Implied-N optimization where that's not possible,&lt;br /&gt;
** '''suboptimal''': honorific-prefix could be explicitly marked up&lt;br /&gt;
*** Error appears for external users only. Won't be fixed any time soon. -- [[User:PhilWilson|PhilWilson]] 00:03, 28 Jan 2006 (GMT)&lt;br /&gt;
* [http://www.yourtraces.com/social_index.php YourTraces SocialSearch] Try ''high results'' (hohe Relevanz) to get only websites marked with hcard as a person.&lt;br /&gt;
&lt;br /&gt;
=== Listing Contact ===&lt;br /&gt;
Contact information for listings, e.g. job postings, items for sale, etc.&lt;br /&gt;
* [http://bestsecurityjobs.co.uk/ Best Security Jobs] is a UK jobs board that uses hCard on the homepage for job listings.&lt;br /&gt;
* [http://printsolution.ro reincarcari cartuse] uses hCard on contact listings.&lt;br /&gt;
* [http://seogadget.co.uk/search-marketing-executive-upto-30k-portsmouth/ search marketing executive] published by [http://seogadget.co.uk/ SEOgadget].&lt;br /&gt;
** '''invalid url property''' - href of the url property element lacks &amp;lt;nowiki&amp;gt;http://&amp;lt;/nowiki&amp;gt;, thus being invalid and linking to a non-existent relative URL.&lt;br /&gt;
** '''invalid XHTML''' - W3C validator reports this page as [http://validator.w3.org/check?uri=http://seogadget.co.uk/search-marketing-executive-upto-30k-portsmouth/ XHTML 1.0 Transitional] (109 errors as of 2009-08-20).&lt;br /&gt;
&lt;br /&gt;
===UTF8 Examples===&lt;br /&gt;
These examples all contain one or more characters in UTF8 that are outside the ASCII7 range and make for excellent test cases to make sure you are handling UTF8 properly throughout your hCard parsing and transforming. And especially if you are generating vCards, these test cases will help you make sure you are generating UTF8 vCards in such a way that can be recognized by UTF8 supporting vCard applications. Sorted roughly alphabetically (per Unicode).&lt;br /&gt;
* [http://imageconcept.ru/contacts.html ImageConcept (ИмиджКонцепт)] embedded UTF8 encoded hCard with Russian characters in «Contacts» page of website.&lt;br /&gt;
* [http://sphinx.net.ru/author/ Dmitry Dzhus] embedded his UTF8 encoded hCard with Russian characters in Â«AuthorÂ» page of his website.&lt;br /&gt;
* [http://ecdlweb.com/ ECDLWeb.com] encodes hCard and Geo information of ECDL and ICDL test centres in UTF-8. Test case for Central European ([http://ecdlweb.com/en/czech-republic/sps-ceska-lipa Czech], [http://ecdlweb.com/en/hungary/athene-idegenforgalmi-informatikai-es-uzletemberkepzo-szakkozepiskola Hungarian] etc.) and [http://ecdlweb.com/en/belarus/belhard Cyrillic] characters.&lt;br /&gt;
* [http://tantek.com/ Tantek's Thoughts] encodes Ãelik as inline UTF8.&lt;br /&gt;
* [http://technorati.jp/about/contact.html Technorati Japan contact information] encodes Japanese as inline UTF8.&lt;br /&gt;
* [http://uk.wikipedia.org/wiki/%D0%93%D0%B5%D1%82%D1%8C%D0%BC%D0%B0%D0%BD_%D0%92%D0%B0%D0%B4%D0%B8%D0%BC_%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B8%D1%87 Vadym Hetman] (Wikipedia-UK (Ukranian))&lt;br /&gt;
&lt;br /&gt;
==== nickname only ====&lt;br /&gt;
These UTF8 examples only have UTF8 for the &amp;quot;nickname&amp;quot; property and are thus are a bit easier for testing than the previous examples.&lt;br /&gt;
* Various Wikipedia-EN articles, e.g. the &amp;quot;nickname&amp;quot; in: [http://en.wikipedia.org/wiki/Noyabrsk Noyabrsk] (Russian), [http://en.wikipedia.org/wiki/Thessaloniki Thessaloniki] (Greek), [http://en.wikipedia.org/wiki/Kyoto Kyoto] (Japanese) and [http://en.wikipedia.org/wiki/Beijing Beijing] (Chinese)&lt;br /&gt;
&lt;br /&gt;
===non-HTML examples===&lt;br /&gt;
* [http://dannyayers.com/misc/microformats/hcard-svg Danny Ayers' SVG hCard demo]&lt;br /&gt;
&lt;br /&gt;
=== missing ===&lt;br /&gt;
Examples that used to have one or more hCards but now don't seem to have any. If you do find one, please include direct links to at least two (assuming there are two or more) pages at the referenced site that have one or more hCards.&lt;br /&gt;
* [http://mapquest.com Mapquest] now supports hCards for business and places in the search results (e.g. [http://www.mapquest.com/maps/map.adp?searchtype=address&amp;amp;country=US&amp;amp;searchtab=home&amp;amp;formtype=address&amp;amp;cat=Whole+Foods&amp;amp;city=san+francisco&amp;amp;state=ca search for Whole Foods in San Francisco])&lt;br /&gt;
** appears to be missing hCards as of 2008-09-07&lt;br /&gt;
&lt;br /&gt;
== related pages ==&lt;br /&gt;
{{hcard-related-pages}}&lt;br /&gt;
* [[hcalendar-examples-in-wild|hCalendar examples in the wild]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=events/2015-01-20-sf-meetup&amp;diff=64760</id>
		<title>events/2015-01-20-sf-meetup</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=events/2015-01-20-sf-meetup&amp;diff=64760"/>
		<updated>2015-01-07T09:51:38Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Details */ add link to indie event&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats dev meetup - San Francisco&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
One of several microformats [[meetup]] [[events]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div class=&amp;quot;event-page h-event vevent&amp;quot;&amp;gt;&lt;br /&gt;
== Details ==&lt;br /&gt;
;When&lt;br /&gt;
:&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;&amp;lt;time class=&amp;quot;value&amp;quot;&amp;gt;2015-01-20&amp;lt;/time&amp;gt; from &amp;lt;time class=&amp;quot;value&amp;quot;&amp;gt;19:00&amp;lt;/time&amp;gt;&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;dt-end dtend&amp;quot;&amp;gt;&amp;lt;time class=&amp;quot;value&amp;quot;&amp;gt;21:00&amp;lt;/time&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
;Where&lt;br /&gt;
:&amp;lt;span class=&amp;quot;p-location location h-card vcard&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;p-name fn p-org org&amp;quot;&amp;gt;La Boulange du Dome&amp;lt;/span&amp;gt;, 4th floor at Westfield San Francisco Centre, &amp;lt;span class=&amp;quot;p-adr adr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;p-street-address street-address&amp;quot;&amp;gt;845 Market st.&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;p-locality locality&amp;quot;&amp;gt;San Francisco&amp;lt;/span&amp;gt;, &amp;lt;abbr class=&amp;quot;p-region region&amp;quot; title=&amp;quot;California&amp;quot;&amp;gt;CA&amp;lt;/abbr&amp;gt; &amp;lt;span class=&amp;quot;p-postal-code postal-code&amp;quot;&amp;gt;94103&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
;What&lt;br /&gt;
:&amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;San Francisco microformats meetup&amp;lt;/span&amp;gt;&lt;br /&gt;
;Web&lt;br /&gt;
:&amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2015-01-20-sf-meetup&amp;lt;/span&amp;gt;&lt;br /&gt;
:indie-event: &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;https://kylewm.com/2015/01/microformats-dev-meetup-2015-01-20&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;!-- :&amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://plancast.com/p/c9c9/html5-microformats-2-meetup-san-francisco&amp;lt;/span&amp;gt;&lt;br /&gt;
:&amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;https://www.facebook.com/events/411130418923711&amp;lt;/span&amp;gt;&lt;br /&gt;
:&amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;https://plus.google.com/events/cdlruh63bku92dvtl3aetpn1ln0/109182513536739786206&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;!-- ; Upcoming --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
'''[http://dev.h2vx.com/ics/microformats.org/wiki/events/2015-01-20-sf-meetup Add this event to your calendar]''' http://www.boogdesign.com/images/buttons/microformat_hcalendar.png&lt;br /&gt;
&lt;br /&gt;
== Meetup ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;p-description description&amp;quot;&amp;gt;The microformats community has grown and stablized over the past few years. Most recently we've been iterating a lot on microformats2, especially parsing details in real world use-cases.&lt;br /&gt;
 &lt;br /&gt;
Meet up with the microformats community in San Francisco and help resolve and finalize [[microformats2]] [[microformats2-parsing-issues|parsing issues]] and [[microformats2-parsing-brainstorming|brainstorming]] proposals.&lt;br /&gt;
&lt;br /&gt;
In another city? Check out [[weekly-meetup#Other_Cities|Weekly Meetup: Other Cities]] and help organize one in your own city!&amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Tags ==&lt;br /&gt;
Use the following tags on related content (blog posts, photos, [http://twitter.com tweets]):&lt;br /&gt;
tags:&lt;br /&gt;
&amp;lt;kbd class=&amp;quot;tags&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;'''microformats-dinner'''&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;microformats-meetup&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;microformats&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;san-francisco&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;la-boulange&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;la-boulange-du-dome&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;westfield&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;westfield-dome&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;''microformats-meetup-2015-01-20''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;''upcoming:event=00000000''&amp;lt;/span&amp;gt; &amp;lt;!-- Add/update this tag when you create the respective upcoming.org event --&amp;gt;&lt;br /&gt;
&amp;lt;/kbd&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
If you use Twitter, mention '''@microformats''' in tweets about the event, and track them on [http://search.twitter.com/search?q=microformats Twitter Search].&lt;br /&gt;
 &lt;br /&gt;
== Attendees ==&lt;br /&gt;
Add yourself alphabetically sorted by family name if you plan on attending or attended this event.&lt;br /&gt;
&lt;br /&gt;
* [[User:Tantek|Tantek Çelik]]&lt;br /&gt;
* [[User:Kylewm|kylewm]]&lt;br /&gt;
* … add yourself here!&lt;br /&gt;
&lt;br /&gt;
=== Remote Participants ===&lt;br /&gt;
Remote participation via IRC.&lt;br /&gt;
&lt;br /&gt;
* [[User:Aaronpk|aaronpk]]&lt;br /&gt;
* … add yourself here!&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
Topics:&lt;br /&gt;
 &lt;br /&gt;
* &amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;[[microformats2]]&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;[[microformats2-parsing]]&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;[[microformats2-parsing-issues]]&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span class=&amp;quot;p-category category&amp;quot;&amp;gt;[[microformats2-parsing-brainstorming]]&amp;lt;/span&amp;gt;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Photographs ==&lt;br /&gt;
&amp;lt;!-- Event Author: Update the following URL to use this event's tag --&amp;gt;&lt;br /&gt;
* Search for photographs from this event on Flickr: [http://flickr.com/photos/tags/microformats-meetup-2015-01-20 Photographs tagged microformats-meetup-2015-01-20] or for [http://flickr.com/photos/tags/microformats-meetup all photographs from microformats meetups].&lt;br /&gt;
&lt;br /&gt;
''Add photographs from this event here''.&lt;br /&gt;
 &lt;br /&gt;
== Articles and Blog Posts ==&lt;br /&gt;
Articles and blog posts following up on the meetup. Add a link to your post in the list below:&lt;br /&gt;
 &lt;br /&gt;
* …&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- End of h-event --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Related Pages==&lt;br /&gt;
{{events-related-pages}}&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=User:Kylewm&amp;diff=64758</id>
		<title>User:Kylewm</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=User:Kylewm&amp;diff=64758"/>
		<updated>2015-01-06T22:55:00Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: add some links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Kyle Mahan ([https://kylewm.com kylewm.com]) is working on personal site software [https://indiewebcamp/Red_Wind Red Wind]. I also contribute to [https://github.com/tommorris/mf2py mf2py] and [https://brid.gy Bridgy].&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=64744</id>
		<title>microformats2-parsing-brainstorming</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=64744"/>
		<updated>2015-01-06T08:05:07Z</updated>

		<summary type="html">&lt;p&gt;Kylewm: /* Nested h-* objects' &amp;quot;value&amp;quot; property */ minor copy editing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing brainstorming&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is for brainstorming, discussion, and other questions and explorations about [[microformats2]] parsing.&lt;br /&gt;
&lt;br /&gt;
For the microformats2 parsing algorithm, see:&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Nested h-* objects' &amp;quot;value&amp;quot; property ==&lt;br /&gt;
&lt;br /&gt;
If a child element has a microformat (h-*) and is a property element (p-*, u-*, dt-*, e-*), the parser will add a &amp;quot;value&amp;quot; property to the resulting object. The value should attempt to be a useful representation of the object for consumers that do not have semantic knowledge of the particular h-* type. Ref: [[microformats2-parsing#parse_an_element_for_class_microformats]].&lt;br /&gt;
&lt;br /&gt;
To determine the &amp;quot;value&amp;quot;, we parse the property element simply (as if it did not have a h-* class), which works well for simple h-* objects, e.g. &amp;lt;code&amp;gt;&amp;lt;a class=&amp;quot;u-like-of h-cite&amp;quot; href=&amp;quot;...&amp;quot;&amp;gt;...&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To handle more complex microformats, I propose that &amp;quot;value&amp;quot; for a p-* property element take on the first explicit &amp;quot;name&amp;quot; property of the nested microformat, and for a u-* property, the first explicit &amp;quot;url&amp;quot; property. Parsing will fall back on the current rules if an explicit property does not exist.&lt;br /&gt;
&lt;br /&gt;
* A similar (possibly simpler?) formulation would use the implied name and url rules to determine the &amp;quot;value&amp;quot; for p-* and u-* properties respectively&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-entry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;u-in-reply-to h-cite&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-author h-card&amp;quot; href=&amp;quot;http://example.com&amp;quot;&amp;gt;Example Author&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-name u-url&amp;quot; href=&amp;quot;http://example.com/post&amp;quot;&amp;gt;Example Post&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nested u-in-reply-to object would parse as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;in-reply-to&amp;quot;: [{ &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&amp;quot;h-cite&amp;quot;],&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: [&amp;quot;Example Post&amp;quot;],&lt;br /&gt;
    &amp;quot;url&amp;quot;: [&amp;quot;http://example.com/post&amp;quot;],&lt;br /&gt;
    &amp;quot;author&amp;quot;: [{&lt;br /&gt;
      &amp;quot;type&amp;quot;:[&amp;quot;h-card&amp;quot;],&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;url&amp;quot;: [&amp;quot;http://example.com&amp;quot;], &lt;br /&gt;
        &amp;quot;name&amp;quot;: [&amp;quot;Example Author&amp;quot;],&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Example Author&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }],&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;value&amp;quot;: &amp;quot;http://example.com/post&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the outer &amp;quot;value&amp;quot; gets the in-reply-to h-cite's u-url property, and the inner &amp;quot;value&amp;quot; gets the author's p-name property.&lt;br /&gt;
&lt;br /&gt;
Because there are no implied properties of the dt-* and e-* types, and no obvious defaults, the value rules for these types would not change.&lt;br /&gt;
&lt;br /&gt;
== Canonicalization of datetime output ==&lt;br /&gt;
&lt;br /&gt;
It would be useful to choose a (more) uniform output format for datetimes to make it easier for users of the parser to consume datetimes. Microformats2 parsers already do sophisticated pattern matching to recognize date vs. time vs. datetimes, so converting this to any specific format should not add overhead.&lt;br /&gt;
&lt;br /&gt;
Specifically: &lt;br /&gt;
* Choose either 'T' or space as the date/time separator.&lt;br /&gt;
* Choose either +XXYY or +XX:YY as the timezone specification (and convert 'Z' to +0000).&lt;br /&gt;
&lt;br /&gt;
Parsers should ''not'' attempt make datetimes more exact than specified. They should not add time, seconds, or timezone if omitted in the original. [[User:Kylewm|Kylewm]] 04:02, 14 May 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
Counterpoint: PHP's builtin date parsing does not require strict formatting. And the equivalent functionality for Python is provided by the widely used python-dateutil library. [[User:Kylewm|Kylewm]] 19:02, 14 May 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Add meta http-equiv to microformats2 parsing model ==&lt;br /&gt;
Similar to document level parsing of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, it makes sense simultaneously to parse &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv&amp;amp;gt;&amp;lt;/code&amp;gt; elements, perhaps treating &amp;quot;Status&amp;quot; in a special way (only using first number (sequence of digits) for its &amp;quot;value&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Use case: IndieWeb &amp;quot;deleted&amp;quot; indication inline in content for static file services that don't support HTTP return codes.&lt;br /&gt;
* http://indiewebcamp.com/deleted#HTML_meta_http-equiv_for_status&lt;br /&gt;
&lt;br /&gt;
HTTP Header example:&lt;br /&gt;
* &amp;lt;samp&amp;gt;Content-Type: text/html; charset=utf-8&amp;lt;/samp&amp;gt;&lt;br /&gt;
HTML equivalent: &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Related:&lt;br /&gt;
* https://www.w3.org/International/O-HTTP-charset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Other Interpretation Parsing Notes==&lt;br /&gt;
Note: most of these need to be written up as separate [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
Author: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
[[microformats-2|Microformats 2]] proposes a new, all encompassing syntax modification of [[microformats-2-prefixes|prefixes]] that will allow microformats to be parsed from pages by processors without prior knowledge of a vocabulary. The core components of this model are quite simple, are quite simple to implement, but there are a number of conflicts that emerge with the functionality of existing microformats parsers that need to be handled. This page documents a proposed model to separate these concerns clearly in a way that can be applied to the documentation of generic microformats parsing rules, and the documentation of individual vocabularies.&lt;br /&gt;
&lt;br /&gt;
Collection of other unresolved parsing issues in a generic model:&lt;br /&gt;
&lt;br /&gt;
This is good material for documenting as [[microformats-2-issues]], [[microformats-2-faq]], and perhaps some of the more technical details in [[microformats-2-parsing-faq]].&lt;br /&gt;
&lt;br /&gt;
* The include pattern references other elements from elsewhere in a document. A generic parser needs to track IDs and fill them in after walking the DOM. (also, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; if adopted.)&lt;br /&gt;
** The current thinking per [[microformats-2-brainstorming]] is to adopt &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; and drop the [[include-pattern]]. [[User:Tantek|Tantek]]&lt;br /&gt;
* Will &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; always map to an &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; property name?&lt;br /&gt;
** No, &amp;lt;code&amp;gt;itemref&amp;lt;/code&amp;gt; maps to one or more elements by ids, and their children. Those referenced elements may have property class names themselves, or they may contain elements that do. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] implies &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; from an hCard in a page that uses an &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt; element. This requires format knowledge, but a generic parser does not currently track the element type of a property node. Should it?&lt;br /&gt;
** It should not. element-specific handling (e.g. using &amp;quot;alt&amp;quot; from img, and &amp;quot;title&amp;quot; from abbr) is completely done at parse time. The JSON data model does not reflect which element type or attribute the value came from. Additionally, [[hAtom]] is an example where we created far too many vocabulary-specific rules, in practice they're not necessary, and only complicate the microformat for both publisher understanding and parser implementation. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that the highest level heading within an entry implies &amp;lt;code&amp;gt;entry-title&amp;lt;/code&amp;gt;. This particular optimisation might be better off dead.&lt;br /&gt;
** Agreed, this is gone in microformats 2. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[hAtom]] defines that permalinks be parsed from &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; attributes, not &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;&lt;br /&gt;
** In practice this has been one of the more problematic/error prone aspects of hAtom implementations, and it's also inconsistent with other microformats (although [[hReview]] tried to use both rel permalinks and &amp;quot;url&amp;quot;). The dependence upon [[rel-bookmark]] for permalinks is dropped in h-atom in preference to re-using &amp;quot;u-url&amp;quot; and &amp;quot;u-uid&amp;quot;. [[User:Tantek|Tantek]]&lt;br /&gt;
* [[XFN]] is entirely built on &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; (although, has various other differences from structural microformats, as do vote-links, so perhaps are excluded from this discussion and will always be handled by dedicated parsers/queries regardless?)&lt;br /&gt;
** The best (easiest and most reliable) use of 'rel' microformats in practice is when they are orthogonal to 'class' microformats. This is true both with [[XFN]] and some newer [[existing-rel-values|rel values]] like [[rel-author]]. In addition, it was very clear at the recent [[schema.org]] workshop's syntax session that RDFa's decision to apparently arbitrarily mix use of 'rel' and 'property' attributes for specifying different types of properties (it wasn't clear to people in the room when you use which for what) has caused a high degree of confusion among publishers and thus high error-rates. Thus if anything we should learn from both the mistakes of RDFa and our own experiences with even very deliberate/specific mixing of rel microformats in class microformats, and keep them defined as separate orthogonal building blocks that work together, but don't depend on each other. [[User:Tantek|Tantek]]&lt;br /&gt;
*** Relatedly to this: &amp;lt;code&amp;gt;rel-tag&amp;lt;/code&amp;gt; in hAtom. --[[User:BenWard|BenWard]] 06:50, 5 October 2011 (UTC)&lt;br /&gt;
**** Yes, and two related things here. First, despite my (and others') objection and (past) interoperable post/entry-specific treatment by Technorati and Ice Rocket, Hixie has redefined rel-tag in [[HTML5]] to mean applying to the whole page, not a single post. Second, I've explicitly added 'p-category' to the draft 'h-atom' vocabulary in [[microformats-2]]. [[User:Tantek|Tantek]] 07:12, 5 October 2011 (UTC)&lt;br /&gt;
* HTML's &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; element includes an optional &amp;lt;code&amp;gt;pubdate&amp;lt;/code&amp;gt; attribute. Simply: We should parse this as &amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;. --[[User:BenWard|BenWard]] 06:12, 10 October 2011 (UTC)&lt;br /&gt;
** *If* there is even some reasonable data on actual use of the &amp;quot;pubdate&amp;quot; attribute (I don't think there is, frankly, especially with the removal of the algorithm to produce Atom from HTML5), then we could consider parsing &amp;quot;pubdate&amp;quot; as backwards compatible option for &amp;quot;dt-published&amp;quot;. As a general rule, however, it is bad (demonstrably/experienced) design to depend on additional attributes (c.f. RDFa confusion over &amp;quot;property&amp;quot; vs. &amp;quot;rel&amp;quot;), especially for an instance where no additional attribute is necessary. I would leave this out for now until there is non-trivial (more than just test pages or folks who've written HTML5 books, ahem) use in the wild. When there is such use in the wild, it should be documented on a wiki page. We don't want to encourage more complex (additional attribute) publishing as a result of supporting it. [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
* [[value-class-pattern]]: In microformats-2, since there are no sub-properties, there will presumably no-longer be a 'value' property in any parsed model. Properties such as 'tel &amp;gt; type' in hCard are, as I recall, deprecated due to underuse anyway, so 'tel &amp;gt; value' becomes redundant. (There's also potentially some clarification around 'price &amp;gt; value' in hListing, whereby value was used in a pattern. So, what does this mean for value class parsing, with regard to value-title patterns and date separation patterns. Are we looking for a 'p-value' and 'p-value-title' classname, but treating them specially (excluding them from regular property parsing.) Or, are we giving them a special prefix (v-text, v-title? That seems confusing, but could be a concept.) I'm fine with p- for both, and just having the parser ignore them since they're special, but need clarification and naming confirmation. --[[User:BenWard|BenWard]] 09:35, 10 October 2011 (UTC)&lt;br /&gt;
** A few things:&lt;br /&gt;
*** 1. Yes, no more subproperties. 'tel' becomes just 'p-tel'. If there is demand for a structured 'tel' value, then we can use that demand (and research into publishing in practice) to brainstorm and create an 'h-tel' structured telephone number (with perhaps fields like 'type', 'extension', some indication of it being local dialing (an extra 0 in some countries) or international dialing, etc.) Or, we address the different 'tel' types as their own flat properties (again as justified by research), e.g. perhaps 'p-tel-fax', or 'p-tel-mobile'. Something for hcard-2-brainstorming.&lt;br /&gt;
*** 2. For prices, e.g. hListing, either we're going to need to encode how to parse monetary amounts including monetary symbols, or consider creating an 'h-price' structured price. Not sure what the right answer is here, again, will need to be informed by analysis of documented actual price publication practices.&lt;br /&gt;
*** 3. We should avoid introducing a new prefix 'v-' just for value-class-pattern. As we've noted elsewhere, each new prefix adds complexity and should be avoided without substantial advantage.&lt;br /&gt;
*** 4. Using 'p-value-title' is strange, as it would be an exception to 'p-' parsing, since it would get the value from the 'title' attribute whereas 'p-' properties don't normally do that (exception: abbr).&lt;br /&gt;
*** 5. Using 'p-value' is also strange, as it wouldn't generate a 'value' property in the JSON data model.&lt;br /&gt;
*** 6. Class name 'value-title' is already sufficiently prefixed - we've found or even heard of no collisions in practice.&lt;br /&gt;
*** 7. Class name 'value' can, by its simpler naming nature, be expected to potentially collide with other web designer class name usage though we have no documentation/mention thereof. We could consider a renaming, or providing of alternative, such as 'value-string', or 'value-content', etc. However, let's keep that as a backup plan to use only if/when evidence is presented that we need to.&lt;br /&gt;
** Conclusions: for now, in microformats-2, keep using 'value' and 'value-title' as defined in the [[value-class-pattern]], and add the additional (obvious) interpretation that [[value-class-pattern#Date_and_time_parsing|value class pattern: date and time parsing]] applies to all 'dt-' properties. - [[User:Tantek|Tantek]] 12:12, 10 October 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-brainstorming]]&lt;br /&gt;
* [[microformats2-prefixes]]&lt;br /&gt;
* [[microformats2-faq]]&lt;br /&gt;
* [[microformats2-issues]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;/div&gt;</summary>
		<author><name>Kylewm</name></author>
	</entry>
</feed>