<?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=GlennJones</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=GlennJones"/>
	<link rel="alternate" type="text/html" href="https://microformats.org/wiki/Special:Contributions/GlennJones"/>
	<updated>2026-04-26T12:17:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65517</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=65517"/>
		<updated>2016-05-09T09:13:40Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: use poster if no src on video for u props&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:Tantek|Tantek]] definitely value class pattern/assembling dates from components should use &amp;quot; &amp;quot; instead of &amp;quot;T&amp;quot; as separator.&lt;br /&gt;
** +0 [[User:Tantek|Tantek]] slight pref (but unsure) for replace a &amp;quot;T&amp;quot; separator with a single space in other dt-* parsing.&lt;br /&gt;
** +1 [[User:GlennJones|Glenn]] happy to move to single space separator for dates built from the value-class pattern. &lt;br /&gt;
** -1 [[User:GlennJones|Glenn]] I think we should pass through the authored format of a date as default output. We should process the content as little as possible, so it is as authored. We can then add parser options to force one of the date formats such as ISO profiles HTML5 or W3C if we need consistency. This is the approach I have taken.&lt;br /&gt;
** See related specific issue: [[microformats2-parsing-issues#Standard_datetime_format]]&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] on not implying seconds. Authored level of specificity should always be kept in dates.&lt;br /&gt;
&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;
* +1 [[User:GlennJones|Glenn]] This is often define by the underlying HTML parsing library which will remove attributes that do not have a values.&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:&lt;br /&gt;
&lt;br /&gt;
Proposal: &lt;br /&gt;
* 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;
* +1 [[User:Tantek|Tantek]] agreed with reasoning&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;
* -1 [[User:Tantek|Tantek]] on de-duping for mf2 json. jf2 can do what it prefers, no specific opinion on that.&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] for both the reasons mentioned already&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;
* +1 [[User:GlennJones|Glenn]] agreed, a simple change which should help 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;
* 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;
* +1 [[User:GlennJones|Glenn]]&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;
* +1 [[User:GlennJones|Glenn]]&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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65516</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=65516"/>
		<updated>2016-05-09T09:10:51Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: exclude style elements before parsing&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:Tantek|Tantek]] definitely value class pattern/assembling dates from components should use &amp;quot; &amp;quot; instead of &amp;quot;T&amp;quot; as separator.&lt;br /&gt;
** +0 [[User:Tantek|Tantek]] slight pref (but unsure) for replace a &amp;quot;T&amp;quot; separator with a single space in other dt-* parsing.&lt;br /&gt;
** +1 [[User:GlennJones|Glenn]] happy to move to single space separator for dates built from the value-class pattern. &lt;br /&gt;
** -1 [[User:GlennJones|Glenn]] I think we should pass through the authored format of a date as default output. We should process the content as little as possible, so it is as authored. We can then add parser options to force one of the date formats such as ISO profiles HTML5 or W3C if we need consistency. This is the approach I have taken.&lt;br /&gt;
** See related specific issue: [[microformats2-parsing-issues#Standard_datetime_format]]&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] on not implying seconds. Authored level of specificity should always be kept in dates.&lt;br /&gt;
&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;
* +1 [[User:GlennJones|Glenn]] This is often define by the underlying HTML parsing library which will remove attributes that do not have a values.&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:&lt;br /&gt;
&lt;br /&gt;
Proposal: &lt;br /&gt;
* 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;
* +1 [[User:Tantek|Tantek]] agreed with reasoning&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;
* -1 [[User:Tantek|Tantek]] on de-duping for mf2 json. jf2 can do what it prefers, no specific opinion on that.&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] for both the reasons mentioned already&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;
* +1 [[User:GlennJones|Glenn]] agreed, a simple change which should help 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;
* 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;
* +1 [[User:GlennJones|Glenn]]&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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65515</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=65515"/>
		<updated>2016-05-09T08:56:15Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: 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:Tantek|Tantek]] definitely value class pattern/assembling dates from components should use &amp;quot; &amp;quot; instead of &amp;quot;T&amp;quot; as separator.&lt;br /&gt;
** +0 [[User:Tantek|Tantek]] slight pref (but unsure) for replace a &amp;quot;T&amp;quot; separator with a single space in other dt-* parsing.&lt;br /&gt;
** +1 [[User:GlennJones|Glenn]] happy to move to single space separator for dates built from the value-class pattern. &lt;br /&gt;
** -1 [[User:GlennJones|Glenn]] I think we should pass through the authored format of a date as default output. We should process the content as little as possible, so it is as authored. We can then add parser options to force one of the date formats such as ISO profiles HTML5 or W3C if we need consistency. This is the approach I have taken.&lt;br /&gt;
** See related specific issue: [[microformats2-parsing-issues#Standard_datetime_format]]&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] on not implying seconds. Authored level of specificity should always be kept in dates.&lt;br /&gt;
&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;
* +1 [[User:GlennJones|Glenn]] This is often define by the underlying HTML parsing library which will remove attributes that do not have a values.&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:&lt;br /&gt;
&lt;br /&gt;
Proposal: &lt;br /&gt;
* 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;
* +1 [[User:Tantek|Tantek]] agreed with reasoning&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;
* -1 [[User:Tantek|Tantek]] on de-duping for mf2 json. jf2 can do what it prefers, no specific opinion on that.&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] for both the reasons mentioned already&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;
* +1 [[User:GlennJones|Glenn]] agreed, a simple change which should help 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;
* 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65514</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=65514"/>
		<updated>2016-05-09T08:49:56Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: de-dupe URLs?&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:Tantek|Tantek]] definitely value class pattern/assembling dates from components should use &amp;quot; &amp;quot; instead of &amp;quot;T&amp;quot; as separator.&lt;br /&gt;
** +0 [[User:Tantek|Tantek]] slight pref (but unsure) for replace a &amp;quot;T&amp;quot; separator with a single space in other dt-* parsing.&lt;br /&gt;
** +1 [[User:GlennJones|Glenn]] happy to move to single space separator for dates built from the value-class pattern. &lt;br /&gt;
** -1 [[User:GlennJones|Glenn]] I think we should pass through the authored format of a date as default output. We should process the content as little as possible, so it is as authored. We can then add parser options to force one of the date formats such as ISO profiles HTML5 or W3C if we need consistency. This is the approach I have taken.&lt;br /&gt;
** See related specific issue: [[microformats2-parsing-issues#Standard_datetime_format]]&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] on not implying seconds. Authored level of specificity should always be kept in dates.&lt;br /&gt;
&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;
* +1 [[User:GlennJones|Glenn]] This is often define by the underlying HTML parsing library which will remove attributes that do not have a values.&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:&lt;br /&gt;
&lt;br /&gt;
Proposal: &lt;br /&gt;
* 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;
* +1 [[User:Tantek|Tantek]] agreed with reasoning&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;
* -1 [[User:Tantek|Tantek]] on de-duping for mf2 json. jf2 can do what it prefers, no specific opinion on that.&lt;br /&gt;
* -1 [[User:GlennJones|Glenn]] for both the reasons mentioned already&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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65513</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=65513"/>
		<updated>2016-05-09T08:40:51Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: implied name when alt=&amp;quot;&amp;quot;&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:Tantek|Tantek]] definitely value class pattern/assembling dates from components should use &amp;quot; &amp;quot; instead of &amp;quot;T&amp;quot; as separator.&lt;br /&gt;
** +0 [[User:Tantek|Tantek]] slight pref (but unsure) for replace a &amp;quot;T&amp;quot; separator with a single space in other dt-* parsing.&lt;br /&gt;
** +1 [[User:GlennJones|Glenn]] happy to move to single space separator for dates built from the value-class pattern. &lt;br /&gt;
** -1 [[User:GlennJones|Glenn]] I think we should pass through the authored format of a date as default output. We should process the content as little as possible, so it is as authored. We can then add parser options to force one of the date formats such as ISO profiles HTML5 or W3C if we need consistency. This is the approach I have taken.&lt;br /&gt;
** See related specific issue: [[microformats2-parsing-issues#Standard_datetime_format]]&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] on not implying seconds. Authored level of specificity should always be kept in dates.&lt;br /&gt;
&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;
* +1 [[User:GlennJones|Glenn]] This is often define by the underlying HTML parsing library which will remove attributes that do not have a values.&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:&lt;br /&gt;
&lt;br /&gt;
Proposal: &lt;br /&gt;
* 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;
* +1 [[User:Tantek|Tantek]] agreed with reasoning&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;
* -1 [[User:Tantek|Tantek]] on de-duping for mf2 json. jf2 can do what it prefers, no specific opinion on that.&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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65512</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=65512"/>
		<updated>2016-05-09T08:33:58Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: parsing a dt- property&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:Tantek|Tantek]] definitely value class pattern/assembling dates from components should use &amp;quot; &amp;quot; instead of &amp;quot;T&amp;quot; as separator.&lt;br /&gt;
** +0 [[User:Tantek|Tantek]] slight pref (but unsure) for replace a &amp;quot;T&amp;quot; separator with a single space in other dt-* parsing.&lt;br /&gt;
** +1 [[User:GlennJones|Glenn]] happy to move to single space separator for dates built from the value-class pattern. &lt;br /&gt;
** -1 [[User:GlennJones|Glenn]] I think we should pass through the authored format of a date as default output. We should process the content as little as possible, so it is as authored. We can then add parser options to force one of the date formats such as ISO profiles HTML5 or W3C if we need consistency. This is the approach I have taken.&lt;br /&gt;
** See related specific issue: [[microformats2-parsing-issues#Standard_datetime_format]]&lt;br /&gt;
* +1 [[User:Kylewm|Kylewm]] on not implying seconds&lt;br /&gt;
* +1 [[User:GlennJones|Glenn]] on not implying seconds. Authored level of specificity should always be kept in dates.&lt;br /&gt;
&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:&lt;br /&gt;
&lt;br /&gt;
Proposal: &lt;br /&gt;
* 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;
* +1 [[User:Tantek|Tantek]] agreed with reasoning&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;
* -1 [[User:Tantek|Tantek]] on de-duping for mf2 json. jf2 can do what it prefers, no specific opinion on that.&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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65237</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=65237"/>
		<updated>2015-09-25T11:24:25Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Updated comment Noscript skip/parse&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;
=== 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 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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65236</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=65236"/>
		<updated>2015-09-25T11:12:39Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Commented on Noscript skip/parse&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;
=== 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;
&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[User:GlennJones|Glenn]] This subject does need to be address but I see it a little bit wider than one tag. 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. I am about to build a helper library to do this based on the Readability code to post process e-* html.  &lt;br /&gt;
&lt;br /&gt;
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;
=== 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 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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65235</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=65235"/>
		<updated>2015-09-25T09:56:17Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Added comment to default generated HTML&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;
=== 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;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&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 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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=parsers&amp;diff=65185</id>
		<title>parsers</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=parsers&amp;diff=65185"/>
		<updated>2015-08-21T13:20:07Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Added URL for testing microformat-shiv&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;Microformats Parsers&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
;shortlink&lt;br /&gt;
:http://ufs.cc/w/ufprs&lt;br /&gt;
This page lists libraries that consume, transform or convert microformats. This is only a partial list. If you know of other such tools for microformats, please add them and list what specific microformats they support. There is a separate page for [[validators]].&lt;br /&gt;
&lt;br /&gt;
Alphabetical listing by programming language:&lt;br /&gt;
&lt;br /&gt;
= microformats2 parsers =&lt;br /&gt;
{{main|microformats2#Parsers}}&lt;br /&gt;
&lt;br /&gt;
These are modern and maintained [[microformats2]] parsers and are suitable for use in modern web applications.&lt;br /&gt;
&lt;br /&gt;
== Go ==&lt;br /&gt;
* [https://github.com/andyleap/microformats andyleap/microformats] - Golang microformats2 parser&lt;br /&gt;
** live textarea entry: http://mf2.vendaria.net&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
* [https://github.com/kylewm/mf2j mf2j] - An early-stage Java microformats2 parser&lt;br /&gt;
* live: https://mf2j.herokuapp.com/?url={http://example.com}&lt;br /&gt;
&lt;br /&gt;
== Javascript ==&lt;br /&gt;
=== Microformat Node ===&lt;br /&gt;
* [http://github.com/glennjones/microformat-node microformat-node] microformat-node is a microformat parser for node.js. It is built using a well tested JavaScript parsing engine which already powers a number of browser extensions. Supports microformat v1 and v2. Try it out at http://glennjones.net/tools/microformats/&lt;br /&gt;
&lt;br /&gt;
=== Microformat Shiv ===&lt;br /&gt;
* [http://microformatshiv.com/ Microformat Shiv] The microformat shiv provides a simple to use JavaScript microformats parsing library. It can also be used in browser extensions and the web site has example code for Chrome, Firefox and Opera. Try it out http://microformatshiv.com/editor.html&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
=== php-mf2 ===&lt;br /&gt;
* PHP generic microformats2 parser&lt;br /&gt;
** source: https://github.com/indieweb/php-mf2&lt;br /&gt;
&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;
== Python ==&lt;br /&gt;
* [[mf2py]]&lt;br /&gt;
** on PyPI: [https://pypi.python.org/pypi/mf2py/]&lt;br /&gt;
** source: [https://github.com/tommorris/mf2py github.com/tommorris/mf2py]&lt;br /&gt;
** bleeding edge development: [https://github.com/kartikprabhu/mf2py github.com/kartikprabhu/mf2py]&lt;br /&gt;
&lt;br /&gt;
= past parsers =&lt;br /&gt;
These are past parsers of classic microformats some of which have not been maintained.&lt;br /&gt;
&lt;br /&gt;
They may be useful as starting points for developing additional microformats2 parsers.&lt;br /&gt;
&lt;br /&gt;
== .Net ==&lt;br /&gt;
[http://ufxtract.com/ UfXtract] is an open source .Net microformats parser. It can parse microformats from URLs or HTML strings. The extracted data can be used directly in .Net or converted into JSON, JSON-P or XML. Currently Supports 16 microformats and can easily be extended with new definitions.&lt;br /&gt;
&lt;br /&gt;
== More Java ==&lt;br /&gt;
* [[any23]] (Anything to Triples)] parses microformats into RDF triples: http://any23.apache.org&lt;br /&gt;
** '''MAINTAINED''' but '''[https://issues.apache.org/jira/browse/ANY23-207 not yet supporting Microformats2]''' (&amp;amp;lt;-- help welcome! comment there.)&lt;br /&gt;
&lt;br /&gt;
* [http://zwitserloot.com/org.microformats.hCard/ org.microformats.hCard] by Reinier Zwitserloot&lt;br /&gt;
&lt;br /&gt;
== More Javascript ==&lt;br /&gt;
=== Sumo ===&lt;br /&gt;
* [http://www.danwebb.net/2007/2/9/sumo-a-generic-microformats-parser-for-javascript Sumo! A Generic Microformats Parser For JavaScript]&lt;br /&gt;
&lt;br /&gt;
== Perl ==&lt;br /&gt;
=== Data::Microformat ===&lt;br /&gt;
* [http://search.cpan.org/~ussjoin/Data-Microformat-0.01/lib/Data/Microformat/hCard.pm Data::Microformat] is a CPAN module to parse and create hCard, adr, and geo.&lt;br /&gt;
** By Brendan O'Connor / Six Apart&lt;br /&gt;
&lt;br /&gt;
=== HTML::Microformats ===&lt;br /&gt;
Perhaps we can capture and update this info on a page like [[perl-html-microformats-parser]].&lt;br /&gt;
[http://search.cpan.org/~tobyink/HTML-Microformats/ HTML::Microformats] is a CPAN module that has support for: &lt;br /&gt;
* input:&lt;br /&gt;
** rel: [[rel-enclosure]], [[rel-license]], [[rel-tag]], [[VoteLinks]], [[XFN]].&lt;br /&gt;
** class: [[adr]], [[figure]], [[geo]], [[hAtom]], [[hAudio]], [[User:TobyInk/hcalendar-1.1|hCalendar]], [[hCard]], [[hListing]], [[hNews]], [[hProduct]], [[hRecipe]], [[hResume]], [[hReview]], [[hReview-aggregate]], [[xFolk]], [[XMDP]], [[XOXO]].&lt;br /&gt;
*** highly experimental: [[measure]], [[species]].&lt;br /&gt;
** poshformats: [http://ocoins.info/ OpenURL COinS].&lt;br /&gt;
* output:&lt;br /&gt;
** RDF: RDF/XML, Turtle, N-Triples, RDF/JSON, etc.&lt;br /&gt;
** JSON&lt;br /&gt;
** domain specific: vCard (3.0, 4.0 and XML), iCalendar, Atom, KML.&lt;br /&gt;
* By [[User:TobyInk|Toby Inkster]].&lt;br /&gt;
&lt;br /&gt;
Versions and releases notes:&lt;br /&gt;
* 2011-02-05 [http://microformats.org/discuss/mail/microformats-dev/2011-February/000667.html 0.102]&lt;br /&gt;
* 2010-12-22 0.101&lt;br /&gt;
* 2010-12-16 [http://microformats.org/discuss/mail/microformats-discuss/2010-December/013363.html 0.100]&lt;br /&gt;
* 2010-10-18 0.00_13&lt;br /&gt;
* 2010-06-25 0.00_12&lt;br /&gt;
* 2010-06-23 0.00_11&lt;br /&gt;
* 2010-05-13 0.00_10&lt;br /&gt;
* 2010-05-12 0.00_09&lt;br /&gt;
* 2010-04-29 0.00_08&lt;br /&gt;
* 2010-04-28 0.00_07&lt;br /&gt;
* 2010-04-16 [http://microformats.org/discuss/mail/microformats-dev/2010-April/000651.html 0.00_06]&lt;br /&gt;
* 2010-04-16 0.00_05&lt;br /&gt;
* 2010-03-20 [http://microformats.org/discuss/mail/microformats-dev/2010-March/000647.html 0.00_04]&lt;br /&gt;
* 2010-03-09 [http://microformats.org/discuss/mail/microformats-dev/2010-March/000642.html 0.00_03]&lt;br /&gt;
* 2010-02-28 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000641.html 0.00_02]&lt;br /&gt;
* 2010-02-24 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000640.html 0.00_01]&lt;br /&gt;
* 2010-02-20 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000639.html 0.00_00]&lt;br /&gt;
* see also the &amp;quot;Changes&amp;quot; file included in the CPAN distribution.&lt;br /&gt;
&lt;br /&gt;
==== XML::Atom::Microformats ====&lt;br /&gt;
&lt;br /&gt;
[http://search.cpan.org/~tobyink/XML-Atom-Microformats/ XML::Atom::Microformats] provides the same functionality for Atom. It finds microformats in Atom entry content elements.&lt;br /&gt;
&lt;br /&gt;
===Swignition ===&lt;br /&gt;
* [http://buzzword.org.uk/swignition/ Swignition] is a parser for both “upper case Semantic Web” (RDF, RDFa) and “lower case semantic web” (microformats) technologies. It includes modules for exporting parsed data in a variety of formats, including RDF, vCard, iCalendar, Atom and KML.&lt;br /&gt;
** By Toby Inkster&lt;br /&gt;
** Active development has moved to HTML::Microformats (see above).&lt;br /&gt;
&lt;br /&gt;
=== Text::Microformat ===&lt;br /&gt;
* Text::Microformat is a microformats parser hosted on [http://code.google.com/p/ufperl/ Google Code] that supports:&lt;br /&gt;
** [[hCard]], [[hCalendar]], [[rel-tag]]&lt;br /&gt;
&lt;br /&gt;
== More PHP ==&lt;br /&gt;
=== XMFP ===&lt;br /&gt;
&amp;lt;span id=&amp;quot;xmfp&amp;quot;&amp;gt;[http://code.google.com/p/xmfp/ XMFP]&amp;lt;/span&amp;gt; (eXtensible MicroFormats Parser for PHP 5) by [http://www.metonymie.com Emiliano Martínez Luque] is a set of PHP 5 classes providing a simple API for extracting Microformated Content either from a URI or a String representing HTML/XML. It can return the results as a PHP associative array, a JSON definition or an XML representation of the data. It supports most of the currently accepted microformats and can be easily extended to add new ones, it also has full support of the include pattern and provides basic validation of microformated data.&lt;br /&gt;
&lt;br /&gt;
=== hKit Microformats Toolkit for PHP5 ===&lt;br /&gt;
[http://allinthehead.com/hkit hKit Microformats Toolkit for PHP5] as [http://allinthehead.com/retro/291/hkit-microformats-toolkit-for-php announced by Drew McLellan]. See also [[hkit|hKit on this wiki]].&lt;br /&gt;
&lt;br /&gt;
===PHP Microformats parser===&lt;br /&gt;
[http://www.phpclasses.org/browse/package/3597.html Microformats parser] is a PHP package for extracting the microformats data embedded into HTML. The gathered data is stored as an xArray of objects - one for each microformat type container found. [http://malatestapunk-stuff.blogspot.com/2007/01/php-microformats-parser.html Announcement]. The parser supports most of the hCard (missing SOUND), hCalendar, hReview (missing item info; spec really needs some clarification) and rel elements, according to their respective specification on microformats Wiki.&lt;br /&gt;
&lt;br /&gt;
===Transformr===&lt;br /&gt;
A Simple set of XSLT and PHP tools for Transforming Microformats Source [http://github.com/WebOrganics/TransFormr available from github] Live webservice available at [http://microform.at/ microform.at].&lt;br /&gt;
&lt;br /&gt;
=== hCard Validator ===&lt;br /&gt;
[http://code.google.com/p/hcardvalidator/ Source code] of the [http://hcard.geekhood.net/ hCard Validator] contains XSLT and PHP code for hCard and include microformats.&lt;br /&gt;
&lt;br /&gt;
=== ARC2 ===&lt;br /&gt;
[http://arc.semsol.org/ ARC2] is a semantic web toolkit which includes support for hCard, adr, geo, XFN, hCalendar, hAtom, hResume, hReview, xFolk, rel-license and rel-tag. It's tri-licensed under the GPL 2 and 3, and the W3C Software licence.&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
===AUMP===&lt;br /&gt;
* [http://aump.googlecode.com AUMP] is a parser written by David Janes. It supports hCard, hCalendar, hAtom, hReview and hListing.&lt;br /&gt;
** Uses Python's [http://docs.python.org/library/xml.dom.minidom.html xml.dom.minidom] after cleaning input through [http://www.w3.org/People/Raggett/tidy/ HTML Tidy].&lt;br /&gt;
&lt;br /&gt;
===Microtron===&lt;br /&gt;
{{main|Microtron}}&lt;br /&gt;
* [[Microtron]] is a general-purpose microformat parser/transformer.  &lt;br /&gt;
&lt;br /&gt;
It can operate on the definition file included in [[Optimus]], making it a close replacement for certain tasks, and can easily be extended with new formats without modifying the source.  The primary advantages are speed (&amp;gt; 100x faster that [[Optimus]] for some operations), simplicity (single file) and small code size (currently &amp;lt; 150 lines).&lt;br /&gt;
&lt;br /&gt;
=== python-hcalendar ===&lt;br /&gt;
[http://pypi.python.org/pypi/python-hcalendar/0.1dev python-hcalendar] is a basic hCalendar parser.&lt;br /&gt;
&lt;br /&gt;
== More Ruby ==&lt;br /&gt;
===Prism ===&lt;br /&gt;
* [[Prism]]&lt;br /&gt;
** by [[implementors#Mark_Wunsch|Mark Wunsch]]&lt;br /&gt;
** Library and command line tool for parsing POSH/Microformats&lt;br /&gt;
** Uses the [http://nokogiri.org/ Nokogiri] HTML, XML, SAX, and Reader parser&lt;br /&gt;
&lt;br /&gt;
=== mofo ruby microformats parser===&lt;br /&gt;
* [http://mofo.rubyforge.org/ mofo], [http://groups.google.com/group/mofo-rb mofo Google Group], [http://github.com/defunkt/mofo/tree/master GitHub repository]&lt;br /&gt;
** by [[implementors#Chris Wanstrath|Chris Wanstrath]]&lt;br /&gt;
** Uses the [http://wiki.github.com/why/hpricot Hpricot] HTML/XML parser&lt;br /&gt;
&lt;br /&gt;
=== Microformat Parser for Ruby ===&lt;br /&gt;
* [http://blog.labnotes.org/2005/11/20/microformat-parser-for-ruby/ Microformat Parser for Ruby]&lt;br /&gt;
** by [[implementors#Assaf Arkin|Assaf Arkin]]&lt;br /&gt;
&lt;br /&gt;
=== uformats ===&lt;br /&gt;
* [http://rubyforge.org/projects/uformats uformats]&lt;br /&gt;
&lt;br /&gt;
=== scrAPI ===&lt;br /&gt;
* [http://rubyforge.org/projects/scrapi scrAPI]&lt;br /&gt;
&lt;br /&gt;
== XSLT ==&lt;br /&gt;
===Optimus===&lt;br /&gt;
* [[Optimus]] is open source XSLT that parses microformats, converts them into JSON or XML, and validates them too.&lt;br /&gt;
&lt;br /&gt;
===X2V===&lt;br /&gt;
* [[X2V]] is [http://hg.microformats.org/ open source XSLT for extracting microformats].&lt;br /&gt;
** by Brian Suda&lt;br /&gt;
&lt;br /&gt;
== editing this page ==&lt;br /&gt;
For now, this page ''copies'' (rather than ''moves'') information from the existing [[implementations | Implementations]] page.&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[implementations]]&lt;br /&gt;
* [[implementors]]&lt;br /&gt;
* [[open-source]]&lt;br /&gt;
* [[user-interface]]&lt;br /&gt;
* [[validators]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65184</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=65184"/>
		<updated>2015-08-21T13:10:42Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Implemented: implied date for dt properties both mf2 and backcompat&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;
&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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65183</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=65183"/>
		<updated>2015-08-21T13:07:27Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Implemented consensus option for:  implied properties on backcompat parsing unlikely to be intended&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;
&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;
&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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65182</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=65182"/>
		<updated>2015-08-21T13:01:59Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: mplemented consensus option for: microformats2 root class names should only see microformats2 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;
=== 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;
&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;
=== 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;
&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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65181</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=65181"/>
		<updated>2015-08-21T13:00:23Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Implemented consensus option for: backcompat classic microformats should only see backcompat 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;
=== 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;
&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;
=== 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;
=== 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;
&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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65180</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=65180"/>
		<updated>2015-08-21T12:49:54Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Implemented consensus option for: uf2 children inside a classic microformats root class name&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;
&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;
=== 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;
=== 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;
=== 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;
&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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65179</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=65179"/>
		<updated>2015-08-21T12:46:04Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /*Implemented option for: 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;
=== 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;
&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;
=== 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;
=== 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;
=== 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;
=== 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;
&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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=parsers&amp;diff=65155</id>
		<title>parsers</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=parsers&amp;diff=65155"/>
		<updated>2015-07-29T13:13:01Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* Microformat Node updated url to online parser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;Microformats Parsers&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
;shortlink&lt;br /&gt;
:http://ufs.cc/w/ufprs&lt;br /&gt;
This page lists libraries that consume, transform or convert microformats. This is only a partial list. If you know of other such tools for microformats, please add them and list what specific microformats they support. There is a separate page for [[validators]].&lt;br /&gt;
&lt;br /&gt;
Alphabetical listing by programming language:&lt;br /&gt;
&lt;br /&gt;
= microformats2 parsers =&lt;br /&gt;
{{main|microformats2#Parsers}}&lt;br /&gt;
&lt;br /&gt;
These are modern and maintained [[microformats2]] parsers and are suitable for use in modern web applications.&lt;br /&gt;
&lt;br /&gt;
== Go ==&lt;br /&gt;
* [https://github.com/andyleap/microformats andyleap/microformats] - Golang microformats2 parser&lt;br /&gt;
** live textarea entry: http://mf2.vendaria.net&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
* [https://github.com/kylewm/mf2j mf2j] - An early-stage Java microformats2 parser&lt;br /&gt;
* live: https://mf2j.herokuapp.com/?url={http://example.com}&lt;br /&gt;
&lt;br /&gt;
== Javascript ==&lt;br /&gt;
=== Microformat Node ===&lt;br /&gt;
* [http://github.com/glennjones/microformat-node microformat-node] microformat-node is a microformat parser for node.js. It is built using a well tested JavaScript parsing engine which already powers a number of browser extensions. Supports microformat v1 and v2. Try it out at http://glennjones.net/tools/microformats/&lt;br /&gt;
&lt;br /&gt;
=== Microformat Shiv ===&lt;br /&gt;
* [http://microformatshiv.com/ Microformat Shiv] The microformat shiv provides a simple to use JavaScript microformats parsing library. It can also be used in browser extensions and the web site has example code for Chrome, Firefox and Opera.&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
=== php-mf2 ===&lt;br /&gt;
* PHP generic microformats2 parser&lt;br /&gt;
** source: https://github.com/indieweb/php-mf2&lt;br /&gt;
&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;
== Python ==&lt;br /&gt;
* [[mf2py]]&lt;br /&gt;
** on PyPI: [https://pypi.python.org/pypi/mf2py/]&lt;br /&gt;
** source: [https://github.com/tommorris/mf2py github.com/tommorris/mf2py]&lt;br /&gt;
** bleeding edge development: [https://github.com/kartikprabhu/mf2py github.com/kartikprabhu/mf2py]&lt;br /&gt;
&lt;br /&gt;
= past parsers =&lt;br /&gt;
These are past parsers of classic microformats some of which have not been maintained.&lt;br /&gt;
&lt;br /&gt;
They may be useful as starting points for developing additional microformats2 parsers.&lt;br /&gt;
&lt;br /&gt;
== .Net ==&lt;br /&gt;
[http://ufxtract.com/ UfXtract] is an open source .Net microformats parser. It can parse microformats from URLs or HTML strings. The extracted data can be used directly in .Net or converted into JSON, JSON-P or XML. Currently Supports 16 microformats and can easily be extended with new definitions.&lt;br /&gt;
&lt;br /&gt;
== More Java ==&lt;br /&gt;
* [[any23]] (Anything to Triples)] parses microformats into RDF triples: http://any23.apache.org&lt;br /&gt;
** '''MAINTAINED''' but '''[https://issues.apache.org/jira/browse/ANY23-207 not yet supporting Microformats2]''' (&amp;amp;lt;-- help welcome! comment there.)&lt;br /&gt;
&lt;br /&gt;
* [http://zwitserloot.com/org.microformats.hCard/ org.microformats.hCard] by Reinier Zwitserloot&lt;br /&gt;
&lt;br /&gt;
== More Javascript ==&lt;br /&gt;
=== Sumo ===&lt;br /&gt;
* [http://www.danwebb.net/2007/2/9/sumo-a-generic-microformats-parser-for-javascript Sumo! A Generic Microformats Parser For JavaScript]&lt;br /&gt;
&lt;br /&gt;
== Perl ==&lt;br /&gt;
=== Data::Microformat ===&lt;br /&gt;
* [http://search.cpan.org/~ussjoin/Data-Microformat-0.01/lib/Data/Microformat/hCard.pm Data::Microformat] is a CPAN module to parse and create hCard, adr, and geo.&lt;br /&gt;
** By Brendan O'Connor / Six Apart&lt;br /&gt;
&lt;br /&gt;
=== HTML::Microformats ===&lt;br /&gt;
Perhaps we can capture and update this info on a page like [[perl-html-microformats-parser]].&lt;br /&gt;
[http://search.cpan.org/~tobyink/HTML-Microformats/ HTML::Microformats] is a CPAN module that has support for: &lt;br /&gt;
* input:&lt;br /&gt;
** rel: [[rel-enclosure]], [[rel-license]], [[rel-tag]], [[VoteLinks]], [[XFN]].&lt;br /&gt;
** class: [[adr]], [[figure]], [[geo]], [[hAtom]], [[hAudio]], [[User:TobyInk/hcalendar-1.1|hCalendar]], [[hCard]], [[hListing]], [[hNews]], [[hProduct]], [[hRecipe]], [[hResume]], [[hReview]], [[hReview-aggregate]], [[xFolk]], [[XMDP]], [[XOXO]].&lt;br /&gt;
*** highly experimental: [[measure]], [[species]].&lt;br /&gt;
** poshformats: [http://ocoins.info/ OpenURL COinS].&lt;br /&gt;
* output:&lt;br /&gt;
** RDF: RDF/XML, Turtle, N-Triples, RDF/JSON, etc.&lt;br /&gt;
** JSON&lt;br /&gt;
** domain specific: vCard (3.0, 4.0 and XML), iCalendar, Atom, KML.&lt;br /&gt;
* By [[User:TobyInk|Toby Inkster]].&lt;br /&gt;
&lt;br /&gt;
Versions and releases notes:&lt;br /&gt;
* 2011-02-05 [http://microformats.org/discuss/mail/microformats-dev/2011-February/000667.html 0.102]&lt;br /&gt;
* 2010-12-22 0.101&lt;br /&gt;
* 2010-12-16 [http://microformats.org/discuss/mail/microformats-discuss/2010-December/013363.html 0.100]&lt;br /&gt;
* 2010-10-18 0.00_13&lt;br /&gt;
* 2010-06-25 0.00_12&lt;br /&gt;
* 2010-06-23 0.00_11&lt;br /&gt;
* 2010-05-13 0.00_10&lt;br /&gt;
* 2010-05-12 0.00_09&lt;br /&gt;
* 2010-04-29 0.00_08&lt;br /&gt;
* 2010-04-28 0.00_07&lt;br /&gt;
* 2010-04-16 [http://microformats.org/discuss/mail/microformats-dev/2010-April/000651.html 0.00_06]&lt;br /&gt;
* 2010-04-16 0.00_05&lt;br /&gt;
* 2010-03-20 [http://microformats.org/discuss/mail/microformats-dev/2010-March/000647.html 0.00_04]&lt;br /&gt;
* 2010-03-09 [http://microformats.org/discuss/mail/microformats-dev/2010-March/000642.html 0.00_03]&lt;br /&gt;
* 2010-02-28 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000641.html 0.00_02]&lt;br /&gt;
* 2010-02-24 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000640.html 0.00_01]&lt;br /&gt;
* 2010-02-20 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000639.html 0.00_00]&lt;br /&gt;
* see also the &amp;quot;Changes&amp;quot; file included in the CPAN distribution.&lt;br /&gt;
&lt;br /&gt;
==== XML::Atom::Microformats ====&lt;br /&gt;
&lt;br /&gt;
[http://search.cpan.org/~tobyink/XML-Atom-Microformats/ XML::Atom::Microformats] provides the same functionality for Atom. It finds microformats in Atom entry content elements.&lt;br /&gt;
&lt;br /&gt;
===Swignition ===&lt;br /&gt;
* [http://buzzword.org.uk/swignition/ Swignition] is a parser for both “upper case Semantic Web” (RDF, RDFa) and “lower case semantic web” (microformats) technologies. It includes modules for exporting parsed data in a variety of formats, including RDF, vCard, iCalendar, Atom and KML.&lt;br /&gt;
** By Toby Inkster&lt;br /&gt;
** Active development has moved to HTML::Microformats (see above).&lt;br /&gt;
&lt;br /&gt;
=== Text::Microformat ===&lt;br /&gt;
* Text::Microformat is a microformats parser hosted on [http://code.google.com/p/ufperl/ Google Code] that supports:&lt;br /&gt;
** [[hCard]], [[hCalendar]], [[rel-tag]]&lt;br /&gt;
&lt;br /&gt;
== More PHP ==&lt;br /&gt;
=== XMFP ===&lt;br /&gt;
&amp;lt;span id=&amp;quot;xmfp&amp;quot;&amp;gt;[http://code.google.com/p/xmfp/ XMFP]&amp;lt;/span&amp;gt; (eXtensible MicroFormats Parser for PHP 5) by [http://www.metonymie.com Emiliano Martínez Luque] is a set of PHP 5 classes providing a simple API for extracting Microformated Content either from a URI or a String representing HTML/XML. It can return the results as a PHP associative array, a JSON definition or an XML representation of the data. It supports most of the currently accepted microformats and can be easily extended to add new ones, it also has full support of the include pattern and provides basic validation of microformated data.&lt;br /&gt;
&lt;br /&gt;
=== hKit Microformats Toolkit for PHP5 ===&lt;br /&gt;
[http://allinthehead.com/hkit hKit Microformats Toolkit for PHP5] as [http://allinthehead.com/retro/291/hkit-microformats-toolkit-for-php announced by Drew McLellan]. See also [[hkit|hKit on this wiki]].&lt;br /&gt;
&lt;br /&gt;
===PHP Microformats parser===&lt;br /&gt;
[http://www.phpclasses.org/browse/package/3597.html Microformats parser] is a PHP package for extracting the microformats data embedded into HTML. The gathered data is stored as an xArray of objects - one for each microformat type container found. [http://malatestapunk-stuff.blogspot.com/2007/01/php-microformats-parser.html Announcement]. The parser supports most of the hCard (missing SOUND), hCalendar, hReview (missing item info; spec really needs some clarification) and rel elements, according to their respective specification on microformats Wiki.&lt;br /&gt;
&lt;br /&gt;
===Transformr===&lt;br /&gt;
A Simple set of XSLT and PHP tools for Transforming Microformats Source [http://github.com/WebOrganics/TransFormr available from github] Live webservice available at [http://microform.at/ microform.at].&lt;br /&gt;
&lt;br /&gt;
=== hCard Validator ===&lt;br /&gt;
[http://code.google.com/p/hcardvalidator/ Source code] of the [http://hcard.geekhood.net/ hCard Validator] contains XSLT and PHP code for hCard and include microformats.&lt;br /&gt;
&lt;br /&gt;
=== ARC2 ===&lt;br /&gt;
[http://arc.semsol.org/ ARC2] is a semantic web toolkit which includes support for hCard, adr, geo, XFN, hCalendar, hAtom, hResume, hReview, xFolk, rel-license and rel-tag. It's tri-licensed under the GPL 2 and 3, and the W3C Software licence.&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
===AUMP===&lt;br /&gt;
* [http://aump.googlecode.com AUMP] is a parser written by David Janes. It supports hCard, hCalendar, hAtom, hReview and hListing.&lt;br /&gt;
** Uses Python's [http://docs.python.org/library/xml.dom.minidom.html xml.dom.minidom] after cleaning input through [http://www.w3.org/People/Raggett/tidy/ HTML Tidy].&lt;br /&gt;
&lt;br /&gt;
===Microtron===&lt;br /&gt;
{{main|Microtron}}&lt;br /&gt;
* [[Microtron]] is a general-purpose microformat parser/transformer.  &lt;br /&gt;
&lt;br /&gt;
It can operate on the definition file included in [[Optimus]], making it a close replacement for certain tasks, and can easily be extended with new formats without modifying the source.  The primary advantages are speed (&amp;gt; 100x faster that [[Optimus]] for some operations), simplicity (single file) and small code size (currently &amp;lt; 150 lines).&lt;br /&gt;
&lt;br /&gt;
=== python-hcalendar ===&lt;br /&gt;
[http://pypi.python.org/pypi/python-hcalendar/0.1dev python-hcalendar] is a basic hCalendar parser.&lt;br /&gt;
&lt;br /&gt;
== More Ruby ==&lt;br /&gt;
===Prism ===&lt;br /&gt;
* [[Prism]]&lt;br /&gt;
** by [[implementors#Mark_Wunsch|Mark Wunsch]]&lt;br /&gt;
** Library and command line tool for parsing POSH/Microformats&lt;br /&gt;
** Uses the [http://nokogiri.org/ Nokogiri] HTML, XML, SAX, and Reader parser&lt;br /&gt;
&lt;br /&gt;
=== mofo ruby microformats parser===&lt;br /&gt;
* [http://mofo.rubyforge.org/ mofo], [http://groups.google.com/group/mofo-rb mofo Google Group], [http://github.com/defunkt/mofo/tree/master GitHub repository]&lt;br /&gt;
** by [[implementors#Chris Wanstrath|Chris Wanstrath]]&lt;br /&gt;
** Uses the [http://wiki.github.com/why/hpricot Hpricot] HTML/XML parser&lt;br /&gt;
&lt;br /&gt;
=== Microformat Parser for Ruby ===&lt;br /&gt;
* [http://blog.labnotes.org/2005/11/20/microformat-parser-for-ruby/ Microformat Parser for Ruby]&lt;br /&gt;
** by [[implementors#Assaf Arkin|Assaf Arkin]]&lt;br /&gt;
&lt;br /&gt;
=== uformats ===&lt;br /&gt;
* [http://rubyforge.org/projects/uformats uformats]&lt;br /&gt;
&lt;br /&gt;
=== scrAPI ===&lt;br /&gt;
* [http://rubyforge.org/projects/scrapi scrAPI]&lt;br /&gt;
&lt;br /&gt;
== XSLT ==&lt;br /&gt;
===Optimus===&lt;br /&gt;
* [[Optimus]] is open source XSLT that parses microformats, converts them into JSON or XML, and validates them too.&lt;br /&gt;
&lt;br /&gt;
===X2V===&lt;br /&gt;
* [[X2V]] is [http://hg.microformats.org/ open source XSLT for extracting microformats].&lt;br /&gt;
** by Brian Suda&lt;br /&gt;
&lt;br /&gt;
== editing this page ==&lt;br /&gt;
For now, this page ''copies'' (rather than ''moves'') information from the existing [[implementations | Implementations]] page.&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[implementations]]&lt;br /&gt;
* [[implementors]]&lt;br /&gt;
* [[open-source]]&lt;br /&gt;
* [[user-interface]]&lt;br /&gt;
* [[validators]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65154</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=65154"/>
		<updated>2015-07-29T12:27:05Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* implied properties on backcompat parsing unlikely to be intended - try to implement   */&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;
&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;
=== 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;
=== 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;
=== 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;
=== 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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65153</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=65153"/>
		<updated>2015-07-29T12:13:23Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* Marked addition with username and date */&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;
&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;
=== 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;
=== 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;
=== 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;
=== 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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65152</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=65152"/>
		<updated>2015-07-29T12:11:59Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* any h- root class name overrides and stops backcompat root - not understood */&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;
&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;
=== 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;
=== 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?&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;
=== 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;
=== 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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65151</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=65151"/>
		<updated>2015-07-29T12:04:57Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* microformats2 root class names should only see microformats2 properties - committed to implementing  */&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;
&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;
=== 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;
=== 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 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;
=== 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;
=== 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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65150</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=65150"/>
		<updated>2015-07-29T12:02:28Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* backcompat classic microformats should only see backcompat properties - committed to implementing */&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;
&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;
=== 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;
=== 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 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;
=== 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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65149</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=65149"/>
		<updated>2015-07-29T11:58:09Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* uf2 children inside a classic microformats root class name - committed to implementing consensus option */&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;
&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;
=== 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;
=== 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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65148</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=65148"/>
		<updated>2015-07-29T11:53:15Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* Changed view on: 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;
=== 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;
&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;
=== 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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65147</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=65147"/>
		<updated>2015-07-29T11:16:56Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* Standard datetime format for parser comparison */&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;
&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;
* +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;
* -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;
* -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;
* +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;
&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;
=== 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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65102</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=65102"/>
		<updated>2015-07-03T09:39:29Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: 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;
&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;
&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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=65011</id>
		<title>microformats2-parsing</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=65011"/>
		<updated>2015-06-01T13:45:53Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* corrected rel parse examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing specification&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;p-name fn&amp;quot;&amp;gt;[[User:Tantek|Tantek Çelik]]&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;p-role role&amp;quot;&amp;gt;Editor&amp;lt;/span&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;dfn style=&amp;quot;font-style:normal;font-weight:bold&amp;quot;&amp;gt;[[microformats2]]&amp;lt;/dfn&amp;gt; is a simple, open format for marking up data in HTML. The microformats2 parsing specification describes how to [[#implementations|implement]] a microformats2 parser.&lt;br /&gt;
&lt;br /&gt;
One of the goals of [[microformats2]] is to greatly simplify parsing of microformats, in particular, by making parsing independent of any one vocabulary. This specification documents the microformats2 parsing algorithm for doing so.&lt;br /&gt;
&lt;br /&gt;
{{cc0-owfa-license}}&lt;br /&gt;
&lt;br /&gt;
== algorithm ==&lt;br /&gt;
=== parse a document for microformats ===&lt;br /&gt;
To parse a document for microformats, follow the HTML parsing rules and do the following:&lt;br /&gt;
* start with an empty JSON &amp;quot;items&amp;quot; array and &amp;quot;rels&amp;quot; &amp;amp; &amp;quot;rel-urls&amp;quot; hashes: &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;rels&amp;quot;: {},&lt;br /&gt;
 &amp;quot;rel-urls&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* parse the root element for class microformats, adding to the JSON items array accordingly&lt;br /&gt;
* parse all hyperlink (&amp;lt;code&amp;gt;&amp;amp;lt;link&amp;gt; &amp;amp;lt;a&amp;gt;&amp;lt;/code&amp;gt;) elements for rel microformats, adding to the JSON rels &amp;amp; rel-urls hashes accordingly&lt;br /&gt;
* return the resulting JSON&lt;br /&gt;
Parsers may simultaneously parse the document for both class and rel microformats (e.g. in a single tree traversal).&lt;br /&gt;
&lt;br /&gt;
=== parse an element for class microformats ===&lt;br /&gt;
To parse an element for class microformats:&lt;br /&gt;
* parse element class for root class name(s) &amp;quot;h-*&amp;quot; and backcompat root classes&lt;br /&gt;
** if not found, parse child elements for microformats (depth first, doc order)&lt;br /&gt;
** else if found, start parsing a new microformat&lt;br /&gt;
*** create a new { } structure with:&lt;br /&gt;
**** &amp;lt;code&amp;gt;type: &amp;lt;nowiki&amp;gt;[array of microformat &amp;quot;h-*&amp;quot; type(s) on the element]&amp;lt;/nowiki&amp;gt;,&amp;lt;/code&amp;gt;&lt;br /&gt;
**** &amp;lt;code&amp;gt;properties: { } &amp;lt;/code&amp;gt; - to be filled in when that element itself is parsed for microformats properties&lt;br /&gt;
**** if that element is an &amp;lt;code&amp;gt;&amp;amp;lt;area&amp;amp;gt;&amp;lt;/code&amp;gt; element, also add:&lt;br /&gt;
***** &amp;lt;code&amp;gt;shape:&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;area[shape]&amp;lt;/code&amp;gt; if any&lt;br /&gt;
***** &amp;lt;code&amp;gt;coords:&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;area[coords]&amp;lt;/code&amp;gt; if any&lt;br /&gt;
**** end if&lt;br /&gt;
*** parse child elements (document order) by:&lt;br /&gt;
**** parse a child element class for property class name(s) &amp;quot;p-*,u-*,dt-*,e-*&amp;quot; respectively as detailed below&lt;br /&gt;
**** if such class(es) are found, it is a property element&lt;br /&gt;
***** add properties found to current microformat's &amp;lt;code&amp;gt;properties: { } &amp;lt;/code&amp;gt; structure&lt;br /&gt;
**** parse a child element for microformats (recurse)&lt;br /&gt;
***** if that child element itself has a microformat (&amp;quot;h-*&amp;quot; or backcompat roots) and is a property element, add it into the array of values for that property as a { } structure, add to that { } structure:&lt;br /&gt;
****** &amp;lt;code&amp;gt;value: &amp;quot;parsed property value per p-*,u-*,dt-* parsing respectively&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
******* for &amp;lt;code&amp;gt;e-*&amp;lt;/code&amp;gt; properties in particular, re-use its { } structure with existing &amp;lt;code&amp;gt;value:&amp;lt;/code&amp;gt; inside.&lt;br /&gt;
***** else add found elements that are microformats to the &amp;quot;children&amp;quot; array&lt;br /&gt;
*** imply properties for the found microformat (see below)&lt;br /&gt;
&lt;br /&gt;
=== parse an element for properties ===&lt;br /&gt;
==== parsing a p- property ====&lt;br /&gt;
To parse an element for a p-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* if abbr.p-x[title], then return the title attribute&lt;br /&gt;
* else if data.p-x[value] or input.p-x[value], then return the value attribute&lt;br /&gt;
* else if img.p-x[alt] or area.p-x[alt], then return the alt attribute&lt;br /&gt;
* else return the textContent of the element, replacing any nested &amp;lt;code&amp;gt;&amp;amp;lt;img&amp;gt;&amp;lt;/code&amp;gt; elements with their &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt; attribute if present, or otherwise their &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; attribute if present, resolving any relative URLs.&lt;br /&gt;
&lt;br /&gt;
==== parsing a u- property ====&lt;br /&gt;
To parse an element for a u-x property value:&lt;br /&gt;
* if a.u-x[href] or area.u-x[href], then get the href attribute&lt;br /&gt;
* else if img.u-x[src] or audio.u-x[src] or video.u-x[src] or source.u-x[src], then get the src attribute&lt;br /&gt;
* else if object.u-x[data], then get the data attribute&lt;br /&gt;
* if there is a gotten value, return the normalized absolute URL of it, following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;code&amp;gt;&amp;amp;lt;base&amp;amp;gt;&amp;lt;/code&amp;gt; element if any).&lt;br /&gt;
* else parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* else if abbr.u-x[title], then return the title attribute&lt;br /&gt;
* else if data.u-x[value] or input.u-x[value], then return the value attribute&lt;br /&gt;
* else return the textContent of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing a dt- property ====&lt;br /&gt;
To parse an element for a dt-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]] including the date and time parsing rules, if a value is found then return it.&lt;br /&gt;
* if time.dt-x[datetime] or ins.dt-x[datetime] or del.dt-x[datetime], then return the datetime attribute&lt;br /&gt;
* else if abbr.dt-x[title], then return the title attribute&lt;br /&gt;
* else if data.dt-x[value] or input.dt-x[value], then return the value attribute&lt;br /&gt;
* else return the textContent of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing an e- property ====&lt;br /&gt;
To parse an element for a e-x property value:&lt;br /&gt;
* return a dictionary with two keys:&lt;br /&gt;
** &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt;: the innerHTML of the element by using the [https://html.spec.whatwg.org/multipage/syntax.html#serialising-html-fragments HTML spec: Serializing HTML Fragments algorithm].&lt;br /&gt;
** &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;: the textContent of the element, replacing any nested &amp;lt;code&amp;gt;&amp;amp;lt;img&amp;gt;&amp;lt;/code&amp;gt; elements with their &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt; attribute if present, or otherwise their &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; attribute if present, resolving the URL if it’s relative.&lt;br /&gt;
&lt;br /&gt;
==== parsing for implied properties ====&lt;br /&gt;
To imply properties: (where h-x is the root microformat element being parsed)&lt;br /&gt;
* if no explicit &amp;quot;name&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x or area.h-x, then use its alt attribute for name&lt;br /&gt;
** else if abbr.h-x[title] then use its title attribute for name&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;
** else if .h-x&amp;gt;area:only-child[alt]:not[.h-*] then use that area alt for name&lt;br /&gt;
** else if .h-x&amp;gt;abbr:only-child[title] then use that abbr title for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;img:only-child[alt]:not[.h-*] then use that img alt for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;area:only-child[alt]:not[.h-*] then use that area alt for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;abbr:only-child[title] use that abbr title for name&lt;br /&gt;
** else use the textContent of the .h-x for name&lt;br /&gt;
** drop leading &amp;amp; trailing white-space from name, including nbsp&lt;br /&gt;
* if no explicit &amp;quot;photo&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x[src] then use src for photo&lt;br /&gt;
** else if object.h-x[data] then use data for photo&lt;br /&gt;
** else if .h-x&amp;gt;img[src]:only-of-type:not[.h-*] then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;object[data]:only-of-type:not[.h-*] then use that object data for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;img[src]:only-of-type:not[.h-*] then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;object[data]:only-of-type:not[.h-*] then use that object data for photo&lt;br /&gt;
** if there is a gotten photo value, return the normalized absolute URL of it, following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;base&amp;gt; element if any).&lt;br /&gt;
* if no explicit &amp;quot;url&amp;quot; property,&lt;br /&gt;
* then imply by:&lt;br /&gt;
** if a.h-x[href] or area.h-x[href] then use that [href] for url&lt;br /&gt;
** else if .h-x&amp;gt;a[href]:only-of-type:not[.h-*] then use that [href] for url&lt;br /&gt;
** else if .h-x&amp;gt;area[href]:only-of-type:not[.h-*] then use that [href] for url&lt;br /&gt;
** if there is a gotten url value, return the normalized absolute URL of it, following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;base&amp;gt; element if any).&lt;br /&gt;
&lt;br /&gt;
Note: The same markup for a property should not be causing that property to occur in &amp;lt;em&amp;gt;both&amp;lt;/em&amp;gt; a microformat and one embedded inside - such a property should only be showing up on one of them. The parsing algorithm has details to prevent that, such as the &amp;lt;code&amp;gt;:not[.h-*]&amp;lt;/code&amp;gt; tests above.&lt;br /&gt;
&lt;br /&gt;
=== parse a hyperlink element for rel microformats ===&lt;br /&gt;
To parse a hyperlink element for rel microformats: (where * is the hyperlink element), use the following algorithm or an algorithm that produces equivalent results:&lt;br /&gt;
* if the &amp;quot;rel&amp;quot; attribute of the element is empty then exit&lt;br /&gt;
* set url to the value of the &amp;quot;href&amp;quot; attribute of the element, normalized to be an absolute URL following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;code&amp;gt;&amp;amp;lt;base&amp;amp;gt;&amp;lt;/code&amp;gt; element if any).&lt;br /&gt;
* treat the &amp;quot;rel&amp;quot; attribute of the element as a space separate set of rel values&lt;br /&gt;
* if the set of rel values does NOT have &amp;quot;alternate&amp;quot; then&lt;br /&gt;
** for each rel value (rel-value)&lt;br /&gt;
*** if there is no key rel-value in the rels hash then create it with an empty array as its value&lt;br /&gt;
*** add url to the array of the key rel-value in the rels hash&lt;br /&gt;
** end for&lt;br /&gt;
* else&lt;br /&gt;
** if there's no top-level &amp;quot;alternates&amp;quot; array, then create it as an empty array.&lt;br /&gt;
** add a new hash to the top-level &amp;quot;alternates&amp;quot; array with keys for each of these attributes when present:&lt;br /&gt;
*** &amp;quot;url&amp;quot;: url&lt;br /&gt;
*** &amp;quot;rel&amp;quot;: the set of rel values appended with spaces, except &amp;quot;alternate&amp;quot;&lt;br /&gt;
*** &amp;quot;hreflang&amp;quot;: the value of the &amp;quot;hreflang&amp;quot; attribute&lt;br /&gt;
*** &amp;quot;media&amp;quot;: the value of the &amp;quot;media&amp;quot; attribute&lt;br /&gt;
*** &amp;quot;title&amp;quot;: the value of the &amp;quot;title&amp;quot; attribute&lt;br /&gt;
*** &amp;quot;type&amp;quot;: the value of the &amp;quot;type&amp;quot; attribute&lt;br /&gt;
*** &amp;quot;text&amp;quot;: the text content of the element if any&lt;br /&gt;
* end if&lt;br /&gt;
* add a key with name url in the top-level &amp;quot;rel-urls&amp;quot; hash, with an empty hash value&lt;br /&gt;
* add keys to that hash for each of these attributes when present:&lt;br /&gt;
** &amp;quot;hreflang&amp;quot;: the value of the &amp;quot;hreflang&amp;quot; attribute&lt;br /&gt;
** &amp;quot;media&amp;quot;: the value of the &amp;quot;media&amp;quot; attribute&lt;br /&gt;
** &amp;quot;title&amp;quot;: the value of the &amp;quot;title&amp;quot; attribute&lt;br /&gt;
** &amp;quot;type&amp;quot;: the value of the &amp;quot;type&amp;quot; attribute&lt;br /&gt;
** &amp;quot;text&amp;quot;: the text content of the element if any&lt;br /&gt;
* add a &amp;quot;rels&amp;quot; key to that hash with value of an array of all items in the set of rel values&lt;br /&gt;
&lt;br /&gt;
==== rel parse examples ====&lt;br /&gt;
Here are some examples to show how parsed rels may be reflected into the JSON (empty items key).&lt;br /&gt;
&lt;br /&gt;
E.g. parsing this markup:&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;author&amp;quot; href=&amp;quot;http://example.com/a&amp;quot;&amp;gt;author a&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;author&amp;quot; href=&amp;quot;http://example.com/b&amp;quot;&amp;gt;author b&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;in-reply-to&amp;quot; href=&amp;quot;http://example.com/1&amp;quot;&amp;gt;post 1&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;in-reply-to&amp;quot; href=&amp;quot;http://example.com/2&amp;quot;&amp;gt;post 2&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;alternate home&amp;quot;&lt;br /&gt;
   href=&amp;quot;http://example.com/fr&amp;quot;&lt;br /&gt;
   media=&amp;quot;handheld&amp;quot;&lt;br /&gt;
   hreflang=&amp;quot;fr&amp;quot;&amp;gt;French mobile homepage&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would generate this 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;rels&amp;quot;: { &lt;br /&gt;
    &amp;quot;author&amp;quot;: [ &amp;quot;http://example.com/a&amp;quot;, &amp;quot;http://example.com/b&amp;quot; ],&lt;br /&gt;
    &amp;quot;in-reply-to&amp;quot;: [ &amp;quot;http://example.com/1&amp;quot;, &amp;quot;http://example.com/2&amp;quot; ] &lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;rel-urls&amp;quot;: {&lt;br /&gt;
    &amp;quot;http://example.com/a&amp;quot;: {&lt;br /&gt;
      &amp;quot;rels&amp;quot;: [&amp;quot;author&amp;quot;], &lt;br /&gt;
      &amp;quot;text&amp;quot;: &amp;quot;author a&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;http://example.com/b&amp;quot;: {&lt;br /&gt;
      &amp;quot;rels&amp;quot;: [&amp;quot;author&amp;quot;], &lt;br /&gt;
      &amp;quot;text&amp;quot;: &amp;quot;author b&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;http://example.com/1&amp;quot;: {&lt;br /&gt;
      &amp;quot;rels&amp;quot;: [&amp;quot;in-reply-to&amp;quot;], &lt;br /&gt;
      &amp;quot;text&amp;quot;: &amp;quot;post 1&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;http://example.com/2&amp;quot;: {&lt;br /&gt;
      &amp;quot;rels&amp;quot;: [&amp;quot;in-reply-to&amp;quot;], &lt;br /&gt;
      &amp;quot;text&amp;quot;: &amp;quot;post 2&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;http://example.com/fr&amp;quot;: {&lt;br /&gt;
      &amp;quot;rels&amp;quot;: [&amp;quot;alternate&amp;quot;, &amp;quot;home&amp;quot;],&lt;br /&gt;
      &amp;quot;media&amp;quot;: &amp;quot;handheld&amp;quot;, &lt;br /&gt;
      &amp;quot;hreflang&amp;quot;: &amp;quot;fr&amp;quot;, &lt;br /&gt;
      &amp;quot;text&amp;quot;: &amp;quot;French mobile homepage&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;alternates&amp;quot;: [{&lt;br /&gt;
     &amp;quot;url&amp;quot;: &amp;quot;http://example.com/fr&amp;quot;, &lt;br /&gt;
     &amp;quot;rel&amp;quot;: &amp;quot;home&amp;quot;, &lt;br /&gt;
     &amp;quot;media&amp;quot;: &amp;quot;handheld&amp;quot;, &lt;br /&gt;
     &amp;quot;hreflang&amp;quot;: &amp;quot;fr&amp;quot;,&lt;br /&gt;
     &amp;quot;text&amp;quot;: &amp;quot;French mobile homepage&amp;quot;&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another parse output example can be found here:&lt;br /&gt;
* https://gist.github.com/barnabywalters/5480962&lt;br /&gt;
&lt;br /&gt;
== what do the CSS selector expressions mean ==&lt;br /&gt;
''This section is non-normative.''&lt;br /&gt;
&lt;br /&gt;
Use [http://gallery.theopalgroup.com/selectoracle/ SelectORacle] to expand any of the above CSS selector expressions into longform English prose.&lt;br /&gt;
&lt;br /&gt;
Exception:&lt;br /&gt;
* ''':not[.h-*]''' is not a valid CSS selector but is used here to mean:&lt;br /&gt;
** does not have any class names that start with &amp;quot;h-&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== note HTML parsing rules ==&lt;br /&gt;
''This section is non-normative.''&lt;br /&gt;
&lt;br /&gt;
microformats2 parsers are expected to follow HTML parsing rules, which includes for example:&lt;br /&gt;
* ignore &amp;lt;code&amp;gt;&amp;amp;lt;template&amp;amp;gt;&amp;lt;/code&amp;gt; elements - stuff between &amp;lt;code&amp;gt;&amp;amp;lt;template&amp;amp;gt;&amp;lt;/code&amp;gt; tags don't end up in the DOM&lt;br /&gt;
** test-case in the wild: http://sixtwothree.org/blog/now-accepting-webmentions/&lt;br /&gt;
&lt;br /&gt;
== questions ==&lt;br /&gt;
See the FAQ:&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
See the issues page:&lt;br /&gt;
* [[microformats2-parsing-issues]]&lt;br /&gt;
&lt;br /&gt;
== implementations ==&lt;br /&gt;
{{main|microformats2#Implementations}}&lt;br /&gt;
There are open source [[microformats2#Implementations|microformats2 parsers]] available for Javascript, node.js, PHP, Ruby and Python.&lt;br /&gt;
&lt;br /&gt;
== test suite ==&lt;br /&gt;
See:&lt;br /&gt;
&lt;br /&gt;
* https://github.com/microformats/tests&lt;br /&gt;
* https://github.com/indieweb/php-mf2/tree/master/tests/mf2&lt;br /&gt;
&lt;br /&gt;
Ports to/for other languages encouraged.&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
* [[microformats2-parsing-issues]]&lt;br /&gt;
* [[microformats2-parsing-brainstorming]] - for background, thinking, exploring possibilities&lt;br /&gt;
* [[microformats2-parsing-rdf]]&lt;br /&gt;
* [[microformats2-implied-properties]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Draft Specifications]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-brainstorming&amp;diff=65010</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=65010"/>
		<updated>2015-06-01T12:43:17Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* feedback on more rel info */&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;
#** 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;
&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;
# It 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;
&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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=64988</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=64988"/>
		<updated>2015-05-28T15:19:43Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* whitespace collapsing revisited - addition of context*/&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;
=== 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;
&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;
* 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;
&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;
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;
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;
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;
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;
&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;
&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>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2&amp;diff=63729</id>
		<title>microformats2</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2&amp;diff=63729"/>
		<updated>2013-09-20T14:31:03Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Change URL to point to version on my own domain&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;
&lt;br /&gt;
Welcome to the microformats 2 home page.&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Microformats 2 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), with the following simplifications:&lt;br /&gt;
&lt;br /&gt;
# '''prefixes for which class names''' are used for microformats, those that start with 'h-' 'p-' 'u-' 'dt-', 'e-' = '''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''' for all microformats (hierarchical data uses nested microformats). 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''' - for common simple markup patterns, just a microformat root class name can imply a few generic properties - name, url, photo. For example:&lt;br /&gt;
&lt;br /&gt;
=== simple microformats 2 examples ===&lt;br /&gt;
Here are a few simple microformats 2 examples the demonstrate a most of the changes, along with canonical [[JSON]].&lt;br /&gt;
&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;
* 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;
* 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;
* More detailed person (based on real world microformats-2 example[https://webfwd.org/about/experts/]).&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;
== 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-geo]]&lt;br /&gt;
* [[h-item]]&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=tag&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=tag&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;
* http://pin13.net/ (where it says &amp;quot;Microformats Parser&amp;quot;)&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;
* 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;
* 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;
* [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;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
{{new}} Test your microformatted web page with: &lt;br /&gt;
* http://pin13.net/ (where it says &amp;quot;Microformats Parser&amp;quot;)&lt;br /&gt;
&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;
&lt;br /&gt;
Parsers and other implementations of microformats2, typically open source:&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: http://pin13.net/ (where it says &amp;quot;Microformats Parser&amp;quot;)&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;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=events&amp;diff=63147</id>
		<title>events</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=events&amp;diff=63147"/>
		<updated>2013-09-12T10:31:26Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Move &amp;quot;The Next Evolutionary Step For Web Data&amp;quot; old events&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;Microformats events&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
microformats related events (including events which have sessions on microformats).&lt;br /&gt;
&lt;br /&gt;
Use the [[events-template|events template]] to create events pages, and list URLs, details, attendees, recommended tags, link to photos afterwards, etc. Add links to slides and other media to the [[presentations]], [[podcasts]] pages respectively.&lt;br /&gt;
&lt;br /&gt;
Encourage the use of microformats on event sites' pages themselves, e.g. [[hCalendar]] and [[hCard]] for the schedule, sessions, speakers, and venues.&lt;br /&gt;
&lt;br /&gt;
== Add events to your calendar ==&lt;br /&gt;
Subscribe to current and future microformats events, e.g. in Apple iCal, or Evolution:&lt;br /&gt;
* [http://h2vx.com/ics/sub/microformats.org/wiki/events »subscribe to microformats events]&lt;br /&gt;
* set it to update (&amp;quot;&amp;lt;nowiki&amp;gt;[x]&amp;lt;/nowiki&amp;gt; Refresh&amp;quot; or &amp;quot;Auto-refresh: Every day&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
See also [[#Zimbra-instructions|Zimbra instructions]]. Or [http://h2vx.com/ics/microformats.org/wiki/events download iCalendar file].&lt;br /&gt;
&lt;br /&gt;
== regular ==&lt;br /&gt;
* regular [[meetup]] - community meetups. details inside.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== upcoming ==&lt;br /&gt;
Upcoming microformats events:&lt;br /&gt;
&lt;br /&gt;
* ... add new events here&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-09-14&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-09-14-microformats2-parsing|Discussion of microformats 2 parsing]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;Taylor Street, Brighton&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;An informal discussion of microformats 2 parsing&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2013-09-14-microformats2-parsing&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Please try to keep to neutral tense (e.g &amp;quot;Bill Smith on microformats&amp;quot;). Include as many details about the event as possible, including precise start end times, room number, etc. Move details to the (events/..) wiki page for the event itself. Include the information here to start with with hCalendar markup. Thank you. &lt;br /&gt;
&lt;br /&gt;
templates:&lt;br /&gt;
&lt;br /&gt;
one day event:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;YYYY-MM-DD&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/YYYY-MM-DD-event-session-title|Event Session Title]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;event-location&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit.&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://example.com&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
multiple day event:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;YYYY-MM-DD&amp;lt;/span&amp;gt;..&amp;lt;abbr style=&amp;quot;border:0&amp;quot; class=&amp;quot;dt-end dtend&amp;quot; title=&amp;quot;YYYY-MM-EE&amp;quot;&amp;gt;EE&amp;lt;/abbr&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/YYYY-MM-DD-event-session-title|Event Session Title]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;event-location&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description&amp;quot;&amp;gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit.&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://example.com&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
Soonest first. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== recent ==&lt;br /&gt;
Past microformats related events and related photos, blog posts, etc.&lt;br /&gt;
&amp;lt;!-- Please change to past tense, and reverse the date-order, when moving events to the Recent section. Most recent first. --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== July 2013 ===&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-07-25&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-07-25-sfhtml5|SFHTML5: microformats2 &amp;amp; HTML5: The Next Evolutionary Step For Web Data]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;San Francisco, CA&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2013-07-25-sfhtml5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-07-19&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-07-19-eia2013-microformats2-html5|EIA2013: microformats2 &amp;amp; HTML5: The Next Evolutionary Step For Web Data]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;Tallinn, Estonia&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2013-07-19-eia2013-microformats2-html5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== June 2013 ===&lt;br /&gt;
* &amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-06-22&amp;lt;/span&amp;gt;..&amp;lt;abbr style=&amp;quot;border:0&amp;quot; class=&amp;quot;dt-end dtend&amp;quot; title=&amp;quot;2013-06-23&amp;quot;&amp;gt;23&amp;lt;/abbr&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-indiewebcamp|IndieWebCamp 2013]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;Portland, Oregon&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;Many sessions on/about/using microformats at IndieWebCamp.&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://indiewebcamp.com/2013/&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-06-18&amp;lt;/span&amp;gt;..&amp;lt;abbr style=&amp;quot;border:0&amp;quot; class=&amp;quot;dt-end dtend&amp;quot; title=&amp;quot;2013-06-21&amp;quot;&amp;gt;21&amp;lt;/abbr&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-osbridge|Open Source Bridge 2013]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;Portland, Oregon&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;Many sessions on/about/using microformats at OSBridge.&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://opensourcebridge.org/events/2013/sessions&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== May 2013 ===&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-05-14&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-05-14-microformats-google-io|microformats dinner before Google I/O]]&amp;lt;/span&amp;gt; at the &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;new food court, Westfield Mall, San Francisco&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;Microformats dinner the night before Google I/O&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2013-05-14-microformats-google-io&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== April 2013 ===&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;time class=&amp;quot;dtstart dt-start&amp;quot;&amp;gt;2013-04-30&amp;lt;/time&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-04-30-data-2-summit|Panel: Web Standards: Myths and Realities at Data 2.0 Summit]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location h-card&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;p-name p-org&amp;quot;&amp;gt;Mission Bay Conference Center&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;1675 Owens St.&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;San Francisco&amp;lt;span&amp;gt;, &amp;lt;span class=&amp;quot;p-region&amp;quot;&amp;gt;CA&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;time class=&amp;quot;dtstart dt-start&amp;quot;&amp;gt;2013-04-08&amp;lt;/time&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-04-08-sensored-meetup|Sensored Meetup #10: Data! APIs! Standards!]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location h-card&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;p-name p-org&amp;quot;&amp;gt;Lemnos Labs&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;85 Bluxome Street&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;San Francisco&amp;lt;span&amp;gt;, &amp;lt;span class=&amp;quot;p-region&amp;quot;&amp;gt;CA&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-04-02&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-04-02-html5devconf-microformats2-html5|HTML5DevConf: microformats2 &amp;amp; HTML5: The Next Evolutionary Step For Web Data]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;San Francisco&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2013-04-02-html5devconf-microformats2-html5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;time class=&amp;quot;dtstart dt-start&amp;quot;&amp;gt;2013-04-02&amp;lt;/time&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-04-02-microformats-dinner|microformats dinner and drinkup SF]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location h-card&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;p-name p-org&amp;quot;&amp;gt;21st Amendment&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;563 2nd St&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;San Francisco&amp;lt;span&amp;gt;, &amp;lt;span class=&amp;quot;p-region&amp;quot;&amp;gt;CA&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== March 2013 ===&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-03-01&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-03-01-microformats-dinner|microformats dinner!]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;Papalote on 24th st&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;Microformats dinner with special guests Jessica and Shane&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2013-03-01-microformats-dinner&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== January 2013 ===&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-01-24&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-01-24-exeter-web-meetup|Exeter Web Meetup]]&amp;lt;/span&amp;gt; in &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;Devon&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;Barnaby Walters is giving a talk on [[microformats2]].&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2013-01-24-exeter-web-meetup&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zimbra instructions ==&lt;br /&gt;
Zimbra:&lt;br /&gt;
* Choose the &amp;quot;'''Calendar'''&amp;quot; tab&lt;br /&gt;
* in the far left column, click the new calendar icon (little mini green calendar with a plus sign, top right corner of the column header), a &amp;quot;'''Create New Calendar'''&amp;quot; dialog box should appear&lt;br /&gt;
* enter &amp;quot;microformats events&amp;quot; into the '''Name''' field&lt;br /&gt;
* check the 2nd checkbox: '''&amp;lt;nowiki&amp;gt;[x]&amp;lt;/nowiki&amp;gt; Synchronize appointments from remote calendar'''&lt;br /&gt;
* copy this URL: '''&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://h2vx.com/ics/microformats.org/wiki/events&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;''' &lt;br /&gt;
* paste it into the '''URL''' field and click '''&amp;lt;nowiki&amp;gt;[ OK ]&amp;lt;/nowiki&amp;gt;''' &lt;br /&gt;
&lt;br /&gt;
== Previous events ==&lt;br /&gt;
* [[events-2012|2012]] | [[events-2011|2011]] | [[events-2010|2010]] | [[events-2009|2009]] | [[events-2008|2008]] | [[events-2007|2007]] | [[events-2006|2006]]&lt;br /&gt;
&lt;br /&gt;
== Other languages ==&lt;br /&gt;
* &amp;lt;span lang=&amp;quot;fr&amp;quot;&amp;gt;[[current_events-fr|événements en cours]] (fr)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quicktime Broadcaster Notes ==&lt;br /&gt;
See [[quicktime]]&lt;br /&gt;
&lt;br /&gt;
==Related pages==&lt;br /&gt;
* [[photos]] from events&lt;br /&gt;
{{events-related-pages}}&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=events&amp;diff=63146</id>
		<title>events</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=events&amp;diff=63146"/>
		<updated>2013-09-12T10:30:02Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Added new event listing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;Microformats events&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
microformats related events (including events which have sessions on microformats).&lt;br /&gt;
&lt;br /&gt;
Use the [[events-template|events template]] to create events pages, and list URLs, details, attendees, recommended tags, link to photos afterwards, etc. Add links to slides and other media to the [[presentations]], [[podcasts]] pages respectively.&lt;br /&gt;
&lt;br /&gt;
Encourage the use of microformats on event sites' pages themselves, e.g. [[hCalendar]] and [[hCard]] for the schedule, sessions, speakers, and venues.&lt;br /&gt;
&lt;br /&gt;
== Add events to your calendar ==&lt;br /&gt;
Subscribe to current and future microformats events, e.g. in Apple iCal, or Evolution:&lt;br /&gt;
* [http://h2vx.com/ics/sub/microformats.org/wiki/events »subscribe to microformats events]&lt;br /&gt;
* set it to update (&amp;quot;&amp;lt;nowiki&amp;gt;[x]&amp;lt;/nowiki&amp;gt; Refresh&amp;quot; or &amp;quot;Auto-refresh: Every day&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
See also [[#Zimbra-instructions|Zimbra instructions]]. Or [http://h2vx.com/ics/microformats.org/wiki/events download iCalendar file].&lt;br /&gt;
&lt;br /&gt;
== regular ==&lt;br /&gt;
* regular [[meetup]] - community meetups. details inside.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== upcoming ==&lt;br /&gt;
Upcoming microformats events:&lt;br /&gt;
&lt;br /&gt;
* ... add new events here&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-09-14&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-09-14-microformats2-parsing|Discussion of microformats 2 parsing]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;Taylor Street, Brighton&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;An informal discussion of microformats 2 parsing&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2013-09-14-microformats2-parsing&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Please try to keep to neutral tense (e.g &amp;quot;Bill Smith on microformats&amp;quot;). Include as many details about the event as possible, including precise start end times, room number, etc. Move details to the (events/..) wiki page for the event itself. Include the information here to start with with hCalendar markup. Thank you. &lt;br /&gt;
&lt;br /&gt;
templates:&lt;br /&gt;
&lt;br /&gt;
one day event:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;YYYY-MM-DD&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/YYYY-MM-DD-event-session-title|Event Session Title]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;event-location&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit.&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://example.com&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
multiple day event:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;YYYY-MM-DD&amp;lt;/span&amp;gt;..&amp;lt;abbr style=&amp;quot;border:0&amp;quot; class=&amp;quot;dt-end dtend&amp;quot; title=&amp;quot;YYYY-MM-EE&amp;quot;&amp;gt;EE&amp;lt;/abbr&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/YYYY-MM-DD-event-session-title|Event Session Title]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;event-location&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description&amp;quot;&amp;gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit.&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://example.com&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
Soonest first. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== recent ==&lt;br /&gt;
Past microformats related events and related photos, blog posts, etc.&lt;br /&gt;
&amp;lt;!-- Please change to past tense, and reverse the date-order, when moving events to the Recent section. Most recent first. --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== July 2013 ===&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-07-19&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-07-19-eia2013-microformats2-html5|EIA2013: microformats2 &amp;amp; HTML5: The Next Evolutionary Step For Web Data]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;Tallinn, Estonia&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2013-07-19-eia2013-microformats2-html5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== June 2013 ===&lt;br /&gt;
* &amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-06-22&amp;lt;/span&amp;gt;..&amp;lt;abbr style=&amp;quot;border:0&amp;quot; class=&amp;quot;dt-end dtend&amp;quot; title=&amp;quot;2013-06-23&amp;quot;&amp;gt;23&amp;lt;/abbr&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-indiewebcamp|IndieWebCamp 2013]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;Portland, Oregon&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;Many sessions on/about/using microformats at IndieWebCamp.&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://indiewebcamp.com/2013/&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-06-18&amp;lt;/span&amp;gt;..&amp;lt;abbr style=&amp;quot;border:0&amp;quot; class=&amp;quot;dt-end dtend&amp;quot; title=&amp;quot;2013-06-21&amp;quot;&amp;gt;21&amp;lt;/abbr&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-osbridge|Open Source Bridge 2013]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;Portland, Oregon&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;Many sessions on/about/using microformats at OSBridge.&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://opensourcebridge.org/events/2013/sessions&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== May 2013 ===&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-05-14&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-05-14-microformats-google-io|microformats dinner before Google I/O]]&amp;lt;/span&amp;gt; at the &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;new food court, Westfield Mall, San Francisco&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;Microformats dinner the night before Google I/O&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2013-05-14-microformats-google-io&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== April 2013 ===&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;time class=&amp;quot;dtstart dt-start&amp;quot;&amp;gt;2013-04-30&amp;lt;/time&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-04-30-data-2-summit|Panel: Web Standards: Myths and Realities at Data 2.0 Summit]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location h-card&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;p-name p-org&amp;quot;&amp;gt;Mission Bay Conference Center&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;1675 Owens St.&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;San Francisco&amp;lt;span&amp;gt;, &amp;lt;span class=&amp;quot;p-region&amp;quot;&amp;gt;CA&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;time class=&amp;quot;dtstart dt-start&amp;quot;&amp;gt;2013-04-08&amp;lt;/time&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-04-08-sensored-meetup|Sensored Meetup #10: Data! APIs! Standards!]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location h-card&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;p-name p-org&amp;quot;&amp;gt;Lemnos Labs&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;85 Bluxome Street&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;San Francisco&amp;lt;span&amp;gt;, &amp;lt;span class=&amp;quot;p-region&amp;quot;&amp;gt;CA&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-04-02&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-04-02-html5devconf-microformats2-html5|HTML5DevConf: microformats2 &amp;amp; HTML5: The Next Evolutionary Step For Web Data]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;San Francisco&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2013-04-02-html5devconf-microformats2-html5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;time class=&amp;quot;dtstart dt-start&amp;quot;&amp;gt;2013-04-02&amp;lt;/time&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-04-02-microformats-dinner|microformats dinner and drinkup SF]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location h-card&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;p-name p-org&amp;quot;&amp;gt;21st Amendment&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;563 2nd St&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;San Francisco&amp;lt;span&amp;gt;, &amp;lt;span class=&amp;quot;p-region&amp;quot;&amp;gt;CA&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== March 2013 ===&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-03-01&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-03-01-microformats-dinner|microformats dinner!]]&amp;lt;/span&amp;gt; at &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;Papalote on 24th st&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;Microformats dinner with special guests Jessica and Shane&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2013-03-01-microformats-dinner&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== January 2013 ===&lt;br /&gt;
*&amp;lt;span class=&amp;quot;h-event vevent&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;dt-start dtstart&amp;quot;&amp;gt;2013-01-24&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;p-name summary&amp;quot;&amp;gt;[[events/2013-01-24-exeter-web-meetup|Exeter Web Meetup]]&amp;lt;/span&amp;gt; in &amp;lt;span class=&amp;quot;p-location location&amp;quot;&amp;gt;Devon&amp;lt;/span&amp;gt;. &amp;lt;span class=&amp;quot;p-description description&amp;quot;&amp;gt;Barnaby Walters is giving a talk on [[microformats2]].&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;u-url url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2013-01-24-exeter-web-meetup&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zimbra instructions ==&lt;br /&gt;
Zimbra:&lt;br /&gt;
* Choose the &amp;quot;'''Calendar'''&amp;quot; tab&lt;br /&gt;
* in the far left column, click the new calendar icon (little mini green calendar with a plus sign, top right corner of the column header), a &amp;quot;'''Create New Calendar'''&amp;quot; dialog box should appear&lt;br /&gt;
* enter &amp;quot;microformats events&amp;quot; into the '''Name''' field&lt;br /&gt;
* check the 2nd checkbox: '''&amp;lt;nowiki&amp;gt;[x]&amp;lt;/nowiki&amp;gt; Synchronize appointments from remote calendar'''&lt;br /&gt;
* copy this URL: '''&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://h2vx.com/ics/microformats.org/wiki/events&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;''' &lt;br /&gt;
* paste it into the '''URL''' field and click '''&amp;lt;nowiki&amp;gt;[ OK ]&amp;lt;/nowiki&amp;gt;''' &lt;br /&gt;
&lt;br /&gt;
== Previous events ==&lt;br /&gt;
* [[events-2012|2012]] | [[events-2011|2011]] | [[events-2010|2010]] | [[events-2009|2009]] | [[events-2008|2008]] | [[events-2007|2007]] | [[events-2006|2006]]&lt;br /&gt;
&lt;br /&gt;
== Other languages ==&lt;br /&gt;
* &amp;lt;span lang=&amp;quot;fr&amp;quot;&amp;gt;[[current_events-fr|événements en cours]] (fr)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quicktime Broadcaster Notes ==&lt;br /&gt;
See [[quicktime]]&lt;br /&gt;
&lt;br /&gt;
==Related pages==&lt;br /&gt;
* [[photos]] from events&lt;br /&gt;
{{events-related-pages}}&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=events/2013-09-14-microformats2-parsing&amp;diff=63145</id>
		<title>events/2013-09-14-microformats2-parsing</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=events/2013-09-14-microformats2-parsing&amp;diff=63145"/>
		<updated>2013-09-12T10:27:19Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Added event for - Discussion of microformats 2 parsing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;Discussion of microformats 2 parsing&amp;lt;/entry-title&amp;gt;&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;2013-09-14&amp;lt;/time&amp;gt; from &amp;lt;time class=&amp;quot;value&amp;quot;&amp;gt;10:45&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;Taylor Street&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;h-adr adr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;street-address p-street-address&amp;quot;&amp;gt;28 Queens Rd&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;locality p-locality&amp;quot;&amp;gt;Brighton&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;country-name p-country-name&amp;quot;&amp;gt;UK&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;Discussion of microformats 2 parsing&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Meetup ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;description&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An informal discussion of microformats 2 parsing over a coffee. The aim is to review the current parses and help bring them into alignment if they differ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- End of @vevent --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Related Pages==&lt;br /&gt;
{{events-related-pages}}&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=parsers&amp;diff=57541</id>
		<title>parsers</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=parsers&amp;diff=57541"/>
		<updated>2013-07-23T11:24:39Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Updated Microformat Shiv entry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;Microformats Parsers&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
;shortlink&lt;br /&gt;
:http://ufs.cc/w/ufprs&lt;br /&gt;
This page lists libraries that consume, transform or convert microformats. This is only a partial list. If you know of other such tools for microformats, please add them and list what specific microformats they support. There is a separate page for [[validators]].&lt;br /&gt;
&lt;br /&gt;
Alphabetical listing by programming language:&lt;br /&gt;
&lt;br /&gt;
= microformats2 parsers =&lt;br /&gt;
These are modern and maintained [[microformats2]] parsers and are suitable for use in modern web applications.&lt;br /&gt;
&lt;br /&gt;
== Javascript ==&lt;br /&gt;
=== Microformat Node ===&lt;br /&gt;
* [http://github.com/glennjones/microformat-node microformat-node] microformat-node is a microformat parser for node.js. It is built using a well tested JavaScript parsing engine which already powers a number of browser extensions. Supports microformat v1 and v2. Try it out at http://microformat2-node.jit.su&lt;br /&gt;
&lt;br /&gt;
=== Microformat Shiv ===&lt;br /&gt;
* [http://microformatshiv.com/ Microformat Shiv] The microformat shiv provides a simple to use JavaScript microformats parsing library. It can also be used in browser extensions and the web site has example code for Chrome, Firefox and Opera.&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
=== php-mf2 ===&lt;br /&gt;
* PHP generic microformats2 parser&lt;br /&gt;
** source: https://github.com/indieweb/php-mf2&lt;br /&gt;
&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;
&lt;br /&gt;
= past parsers =&lt;br /&gt;
These are past parsers of classic microformats but which have largely not been maintained.&lt;br /&gt;
&lt;br /&gt;
They may be useful as starting points for developing additional microformats2 parsers.&lt;br /&gt;
&lt;br /&gt;
== .Net ==&lt;br /&gt;
[http://ufxtract.com/ UfXtract] is an open source .Net microformats parser. It can parse microformats from URLs or HTML strings. The extracted data can be used directly in .Net or converted into JSON, JSON-P or XML. Currently Supports 16 microformats and can easily be extended with new definitions.&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://code.google.com/p/any23/ Any23 (Anything to Triples)] parses microformats into RDF triples&lt;br /&gt;
* [http://zwitserloot.com/org.microformats.hCard/ org.microformats.hCard] by Reinier Zwitserloot&lt;br /&gt;
&lt;br /&gt;
== More Javascript ==&lt;br /&gt;
=== Sumo ===&lt;br /&gt;
* [http://www.danwebb.net/2007/2/9/sumo-a-generic-microformats-parser-for-javascript Sumo! A Generic Microformats Parser For JavaScript]&lt;br /&gt;
&lt;br /&gt;
== Perl ==&lt;br /&gt;
=== Data::Microformat ===&lt;br /&gt;
* [http://search.cpan.org/~ussjoin/Data-Microformat-0.01/lib/Data/Microformat/hCard.pm Data::Microformat] is a CPAN module to parse and create hCard, adr, and geo.&lt;br /&gt;
** By Brendan O'Connor / Six Apart&lt;br /&gt;
&lt;br /&gt;
=== HTML::Microformats ===&lt;br /&gt;
Perhaps we can capture and update this info on a page like [[perl-html-microformats-parser]].&lt;br /&gt;
[http://search.cpan.org/~tobyink/HTML-Microformats/ HTML::Microformats] is a CPAN module that has support for: &lt;br /&gt;
* input:&lt;br /&gt;
** rel: [[rel-enclosure]], [[rel-license]], [[rel-tag]], [[VoteLinks]], [[XFN]].&lt;br /&gt;
** class: [[adr]], [[figure]], [[geo]], [[hAtom]], [[hAudio]], [[User:TobyInk/hcalendar-1.1|hCalendar]], [[hCard]], [[hListing]], [[hNews]], [[hProduct]], [[hRecipe]], [[hResume]], [[hReview]], [[hReview-aggregate]], [[xFolk]], [[XMDP]], [[XOXO]].&lt;br /&gt;
*** highly experimental: [[measure]], [[species]].&lt;br /&gt;
** poshformats: [http://ocoins.info/ OpenURL COinS].&lt;br /&gt;
* output:&lt;br /&gt;
** RDF: RDF/XML, Turtle, N-Triples, RDF/JSON, etc.&lt;br /&gt;
** JSON&lt;br /&gt;
** domain specific: vCard (3.0, 4.0 and XML), iCalendar, Atom, KML.&lt;br /&gt;
* By [[User:TobyInk|Toby Inkster]].&lt;br /&gt;
&lt;br /&gt;
Versions and releases notes:&lt;br /&gt;
* 2011-02-05 [http://microformats.org/discuss/mail/microformats-dev/2011-February/000667.html 0.102]&lt;br /&gt;
* 2010-12-22 0.101&lt;br /&gt;
* 2010-12-16 [http://microformats.org/discuss/mail/microformats-discuss/2010-December/013363.html 0.100]&lt;br /&gt;
* 2010-10-18 0.00_13&lt;br /&gt;
* 2010-06-25 0.00_12&lt;br /&gt;
* 2010-06-23 0.00_11&lt;br /&gt;
* 2010-05-13 0.00_10&lt;br /&gt;
* 2010-05-12 0.00_09&lt;br /&gt;
* 2010-04-29 0.00_08&lt;br /&gt;
* 2010-04-28 0.00_07&lt;br /&gt;
* 2010-04-16 [http://microformats.org/discuss/mail/microformats-dev/2010-April/000651.html 0.00_06]&lt;br /&gt;
* 2010-04-16 0.00_05&lt;br /&gt;
* 2010-03-20 [http://microformats.org/discuss/mail/microformats-dev/2010-March/000647.html 0.00_04]&lt;br /&gt;
* 2010-03-09 [http://microformats.org/discuss/mail/microformats-dev/2010-March/000642.html 0.00_03]&lt;br /&gt;
* 2010-02-28 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000641.html 0.00_02]&lt;br /&gt;
* 2010-02-24 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000640.html 0.00_01]&lt;br /&gt;
* 2010-02-20 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000639.html 0.00_00]&lt;br /&gt;
* see also the &amp;quot;Changes&amp;quot; file included in the CPAN distribution.&lt;br /&gt;
&lt;br /&gt;
==== XML::Atom::Microformats ====&lt;br /&gt;
&lt;br /&gt;
[http://search.cpan.org/~tobyink/XML-Atom-Microformats/ XML::Atom::Microformats] provides the same functionality for Atom. It finds microformats in Atom entry content elements.&lt;br /&gt;
&lt;br /&gt;
===Swignition ===&lt;br /&gt;
* [http://buzzword.org.uk/swignition/ Swignition] is a parser for both “upper case Semantic Web” (RDF, RDFa) and “lower case semantic web” (microformats) technologies. It includes modules for exporting parsed data in a variety of formats, including RDF, vCard, iCalendar, Atom and KML.&lt;br /&gt;
** By Toby Inkster&lt;br /&gt;
** Active development has moved to HTML::Microformats (see above).&lt;br /&gt;
&lt;br /&gt;
=== Text::Microformat ===&lt;br /&gt;
* Text::Microformat is a microformats parser hosted on [http://code.google.com/p/ufperl/ Google Code] that supports:&lt;br /&gt;
** [[hCard]], [[hCalendar]], [[rel-tag]]&lt;br /&gt;
&lt;br /&gt;
== More PHP ==&lt;br /&gt;
=== XMFP ===&lt;br /&gt;
&amp;lt;span id=&amp;quot;xmfp&amp;quot;&amp;gt;[http://code.google.com/p/xmfp/ XMFP]&amp;lt;/span&amp;gt; (eXtensible MicroFormats Parser for PHP 5) by [http://www.metonymie.com Emiliano Martínez Luque] is a set of PHP 5 classes providing a simple API for extracting Microformated Content either from a URI or a String representing HTML/XML. It can return the results as a PHP associative array, a JSON definition or an XML representation of the data. It supports most of the currently accepted microformats and can be easily extended to add new ones, it also has full support of the include pattern and provides basic validation of microformated data.&lt;br /&gt;
&lt;br /&gt;
=== hKit Microformats Toolkit for PHP5 ===&lt;br /&gt;
[http://allinthehead.com/hkit hKit Microformats Toolkit for PHP5] as [http://allinthehead.com/retro/291/hkit-microformats-toolkit-for-php announced by Drew McLellan]. See also [[hkit|hKit on this wiki]].&lt;br /&gt;
&lt;br /&gt;
===PHP Microformats parser===&lt;br /&gt;
[http://www.phpclasses.org/browse/package/3597.html Microformats parser] is a PHP package for extracting the microformats data embedded into HTML. The gathered data is stored as an xArray of objects - one for each microformat type container found. [http://malatestapunk-stuff.blogspot.com/2007/01/php-microformats-parser.html Announcement]. The parser supports most of the hCard (missing SOUND), hCalendar, hReview (missing item info; spec really needs some clarification) and rel elements, according to their respective specification on microformats Wiki.&lt;br /&gt;
&lt;br /&gt;
===Transformr===&lt;br /&gt;
A Simple set of XSLT and PHP tools for Transforming Microformats Source [http://github.com/WebOrganics/TransFormr available from github] Live webservice available at [http://microform.at/ microform.at].&lt;br /&gt;
&lt;br /&gt;
=== hCard Validator ===&lt;br /&gt;
[http://code.google.com/p/hcardvalidator/ Source code] of the [http://hcard.geekhood.net/ hCard Validator] contains XSLT and PHP code for hCard and include microformats.&lt;br /&gt;
&lt;br /&gt;
=== ARC2 ===&lt;br /&gt;
[http://arc.semsol.org/ ARC2] is a semantic web toolkit which includes support for hCard, adr, geo, XFN, hCalendar, hAtom, hResume, hReview, xFolk, rel-license and rel-tag. It's tri-licensed under the GPL 2 and 3, and the W3C Software licence.&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
===AUMP===&lt;br /&gt;
* [http://aump.googlecode.com AUMP] is a parser written by David Janes. It supports hCard, hCalendar, hAtom, hReview and hListing.&lt;br /&gt;
** Uses Python's [http://docs.python.org/library/xml.dom.minidom.html xml.dom.minidom] after cleaning input through [http://www.w3.org/People/Raggett/tidy/ HTML Tidy].&lt;br /&gt;
&lt;br /&gt;
===Microtron===&lt;br /&gt;
{{main|Microtron}}&lt;br /&gt;
* [[Microtron]] is a general-purpose microformat parser/transformer.  &lt;br /&gt;
&lt;br /&gt;
It can operate on the definition file included in [[Optimus]], making it a close replacement for certain tasks, and can easily be extended with new formats without modifying the source.  The primary advantages are speed (&amp;gt; 100x faster that [[Optimus]] for some operations), simplicity (single file) and small code size (currently &amp;lt; 150 lines).&lt;br /&gt;
&lt;br /&gt;
=== python-hcalendar ===&lt;br /&gt;
[http://pypi.python.org/pypi/python-hcalendar/0.1dev python-hcalendar] is a basic hCalendar parser.&lt;br /&gt;
&lt;br /&gt;
== More Ruby ==&lt;br /&gt;
===Prism ===&lt;br /&gt;
* [[Prism]]&lt;br /&gt;
** by [[implementors#Mark_Wunsch|Mark Wunsch]]&lt;br /&gt;
** Library and command line tool for parsing POSH/Microformats&lt;br /&gt;
** Uses the [http://nokogiri.org/ Nokogiri] HTML, XML, SAX, and Reader parser&lt;br /&gt;
&lt;br /&gt;
=== mofo ruby microformats parser===&lt;br /&gt;
* [http://mofo.rubyforge.org/ mofo], [http://groups.google.com/group/mofo-rb mofo Google Group], [http://github.com/defunkt/mofo/tree/master GitHub repository]&lt;br /&gt;
** by [[implementors#Chris Wanstrath|Chris Wanstrath]]&lt;br /&gt;
** Uses the [http://wiki.github.com/why/hpricot Hpricot] HTML/XML parser&lt;br /&gt;
&lt;br /&gt;
=== Microformat Parser for Ruby ===&lt;br /&gt;
* [http://blog.labnotes.org/2005/11/20/microformat-parser-for-ruby/ Microformat Parser for Ruby]&lt;br /&gt;
** by [[implementors#Assaf Arkin|Assaf Arkin]]&lt;br /&gt;
&lt;br /&gt;
=== uformats ===&lt;br /&gt;
* [http://rubyforge.org/projects/uformats uformats]&lt;br /&gt;
&lt;br /&gt;
=== scrAPI ===&lt;br /&gt;
* [http://rubyforge.org/projects/scrapi scrAPI]&lt;br /&gt;
&lt;br /&gt;
== XSLT ==&lt;br /&gt;
===Optimus===&lt;br /&gt;
* [[Optimus]] is open source XSLT that parses microformats, converts them into JSON or XML, and validates them too.&lt;br /&gt;
&lt;br /&gt;
===X2V===&lt;br /&gt;
* [[X2V]] is [http://hg.microformats.org/ open source XSLT for extracting microformats].&lt;br /&gt;
** by Brian Suda&lt;br /&gt;
&lt;br /&gt;
== editing this page ==&lt;br /&gt;
For now, this page ''copies'' (rather than ''moves'') information from the existing [[implementations | Implementations]] page.&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[implementations]]&lt;br /&gt;
* [[implementors]]&lt;br /&gt;
* [[open-source]]&lt;br /&gt;
* [[user-interface]]&lt;br /&gt;
* [[validators]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=parsers&amp;diff=57539</id>
		<title>parsers</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=parsers&amp;diff=57539"/>
		<updated>2013-07-23T11:19:38Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Updated microformat-node entry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;Microformats Parsers&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
;shortlink&lt;br /&gt;
:http://ufs.cc/w/ufprs&lt;br /&gt;
This page lists libraries that consume, transform or convert microformats. This is only a partial list. If you know of other such tools for microformats, please add them and list what specific microformats they support. There is a separate page for [[validators]].&lt;br /&gt;
&lt;br /&gt;
Alphabetical listing by programming language:&lt;br /&gt;
&lt;br /&gt;
= microformats2 parsers =&lt;br /&gt;
These are modern and maintained [[microformats2]] parsers and are suitable for use in modern web applications.&lt;br /&gt;
&lt;br /&gt;
== Javascript ==&lt;br /&gt;
=== Microformat Node ===&lt;br /&gt;
* [http://github.com/glennjones/microformat-node microformat-node] microformat-node is a microformat parser for node.js. It is built using a well tested JavaScript parsing engine which already powers a number of browser extensions. Supports microformat v1 and v2. Try it out at http://microformat2-node.jit.su&lt;br /&gt;
&lt;br /&gt;
=== Microformat Shiv ===&lt;br /&gt;
* [http://microformatshiv.com/ Microformat Shiv] The microformat shiv provides a simple to use, light-weight, cross-browser microformat API. It even works with modern mobile browsers and is backward compatible with Internet Explore 6. Based on the microformat API for Mozilla's extensions. This is the same code base as the popular Operater plug-in.&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
=== php-mf2 ===&lt;br /&gt;
* PHP generic microformats2 parser&lt;br /&gt;
** source: https://github.com/indieweb/php-mf2&lt;br /&gt;
&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;
&lt;br /&gt;
= past parsers =&lt;br /&gt;
These are past parsers of classic microformats but which have largely not been maintained.&lt;br /&gt;
&lt;br /&gt;
They may be useful as starting points for developing additional microformats2 parsers.&lt;br /&gt;
&lt;br /&gt;
== .Net ==&lt;br /&gt;
[http://ufxtract.com/ UfXtract] is an open source .Net microformats parser. It can parse microformats from URLs or HTML strings. The extracted data can be used directly in .Net or converted into JSON, JSON-P or XML. Currently Supports 16 microformats and can easily be extended with new definitions.&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://code.google.com/p/any23/ Any23 (Anything to Triples)] parses microformats into RDF triples&lt;br /&gt;
* [http://zwitserloot.com/org.microformats.hCard/ org.microformats.hCard] by Reinier Zwitserloot&lt;br /&gt;
&lt;br /&gt;
== More Javascript ==&lt;br /&gt;
=== Sumo ===&lt;br /&gt;
* [http://www.danwebb.net/2007/2/9/sumo-a-generic-microformats-parser-for-javascript Sumo! A Generic Microformats Parser For JavaScript]&lt;br /&gt;
&lt;br /&gt;
== Perl ==&lt;br /&gt;
=== Data::Microformat ===&lt;br /&gt;
* [http://search.cpan.org/~ussjoin/Data-Microformat-0.01/lib/Data/Microformat/hCard.pm Data::Microformat] is a CPAN module to parse and create hCard, adr, and geo.&lt;br /&gt;
** By Brendan O'Connor / Six Apart&lt;br /&gt;
&lt;br /&gt;
=== HTML::Microformats ===&lt;br /&gt;
Perhaps we can capture and update this info on a page like [[perl-html-microformats-parser]].&lt;br /&gt;
[http://search.cpan.org/~tobyink/HTML-Microformats/ HTML::Microformats] is a CPAN module that has support for: &lt;br /&gt;
* input:&lt;br /&gt;
** rel: [[rel-enclosure]], [[rel-license]], [[rel-tag]], [[VoteLinks]], [[XFN]].&lt;br /&gt;
** class: [[adr]], [[figure]], [[geo]], [[hAtom]], [[hAudio]], [[User:TobyInk/hcalendar-1.1|hCalendar]], [[hCard]], [[hListing]], [[hNews]], [[hProduct]], [[hRecipe]], [[hResume]], [[hReview]], [[hReview-aggregate]], [[xFolk]], [[XMDP]], [[XOXO]].&lt;br /&gt;
*** highly experimental: [[measure]], [[species]].&lt;br /&gt;
** poshformats: [http://ocoins.info/ OpenURL COinS].&lt;br /&gt;
* output:&lt;br /&gt;
** RDF: RDF/XML, Turtle, N-Triples, RDF/JSON, etc.&lt;br /&gt;
** JSON&lt;br /&gt;
** domain specific: vCard (3.0, 4.0 and XML), iCalendar, Atom, KML.&lt;br /&gt;
* By [[User:TobyInk|Toby Inkster]].&lt;br /&gt;
&lt;br /&gt;
Versions and releases notes:&lt;br /&gt;
* 2011-02-05 [http://microformats.org/discuss/mail/microformats-dev/2011-February/000667.html 0.102]&lt;br /&gt;
* 2010-12-22 0.101&lt;br /&gt;
* 2010-12-16 [http://microformats.org/discuss/mail/microformats-discuss/2010-December/013363.html 0.100]&lt;br /&gt;
* 2010-10-18 0.00_13&lt;br /&gt;
* 2010-06-25 0.00_12&lt;br /&gt;
* 2010-06-23 0.00_11&lt;br /&gt;
* 2010-05-13 0.00_10&lt;br /&gt;
* 2010-05-12 0.00_09&lt;br /&gt;
* 2010-04-29 0.00_08&lt;br /&gt;
* 2010-04-28 0.00_07&lt;br /&gt;
* 2010-04-16 [http://microformats.org/discuss/mail/microformats-dev/2010-April/000651.html 0.00_06]&lt;br /&gt;
* 2010-04-16 0.00_05&lt;br /&gt;
* 2010-03-20 [http://microformats.org/discuss/mail/microformats-dev/2010-March/000647.html 0.00_04]&lt;br /&gt;
* 2010-03-09 [http://microformats.org/discuss/mail/microformats-dev/2010-March/000642.html 0.00_03]&lt;br /&gt;
* 2010-02-28 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000641.html 0.00_02]&lt;br /&gt;
* 2010-02-24 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000640.html 0.00_01]&lt;br /&gt;
* 2010-02-20 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000639.html 0.00_00]&lt;br /&gt;
* see also the &amp;quot;Changes&amp;quot; file included in the CPAN distribution.&lt;br /&gt;
&lt;br /&gt;
==== XML::Atom::Microformats ====&lt;br /&gt;
&lt;br /&gt;
[http://search.cpan.org/~tobyink/XML-Atom-Microformats/ XML::Atom::Microformats] provides the same functionality for Atom. It finds microformats in Atom entry content elements.&lt;br /&gt;
&lt;br /&gt;
===Swignition ===&lt;br /&gt;
* [http://buzzword.org.uk/swignition/ Swignition] is a parser for both “upper case Semantic Web” (RDF, RDFa) and “lower case semantic web” (microformats) technologies. It includes modules for exporting parsed data in a variety of formats, including RDF, vCard, iCalendar, Atom and KML.&lt;br /&gt;
** By Toby Inkster&lt;br /&gt;
** Active development has moved to HTML::Microformats (see above).&lt;br /&gt;
&lt;br /&gt;
=== Text::Microformat ===&lt;br /&gt;
* Text::Microformat is a microformats parser hosted on [http://code.google.com/p/ufperl/ Google Code] that supports:&lt;br /&gt;
** [[hCard]], [[hCalendar]], [[rel-tag]]&lt;br /&gt;
&lt;br /&gt;
== More PHP ==&lt;br /&gt;
=== XMFP ===&lt;br /&gt;
&amp;lt;span id=&amp;quot;xmfp&amp;quot;&amp;gt;[http://code.google.com/p/xmfp/ XMFP]&amp;lt;/span&amp;gt; (eXtensible MicroFormats Parser for PHP 5) by [http://www.metonymie.com Emiliano Martínez Luque] is a set of PHP 5 classes providing a simple API for extracting Microformated Content either from a URI or a String representing HTML/XML. It can return the results as a PHP associative array, a JSON definition or an XML representation of the data. It supports most of the currently accepted microformats and can be easily extended to add new ones, it also has full support of the include pattern and provides basic validation of microformated data.&lt;br /&gt;
&lt;br /&gt;
=== hKit Microformats Toolkit for PHP5 ===&lt;br /&gt;
[http://allinthehead.com/hkit hKit Microformats Toolkit for PHP5] as [http://allinthehead.com/retro/291/hkit-microformats-toolkit-for-php announced by Drew McLellan]. See also [[hkit|hKit on this wiki]].&lt;br /&gt;
&lt;br /&gt;
===PHP Microformats parser===&lt;br /&gt;
[http://www.phpclasses.org/browse/package/3597.html Microformats parser] is a PHP package for extracting the microformats data embedded into HTML. The gathered data is stored as an xArray of objects - one for each microformat type container found. [http://malatestapunk-stuff.blogspot.com/2007/01/php-microformats-parser.html Announcement]. The parser supports most of the hCard (missing SOUND), hCalendar, hReview (missing item info; spec really needs some clarification) and rel elements, according to their respective specification on microformats Wiki.&lt;br /&gt;
&lt;br /&gt;
===Transformr===&lt;br /&gt;
A Simple set of XSLT and PHP tools for Transforming Microformats Source [http://github.com/WebOrganics/TransFormr available from github] Live webservice available at [http://microform.at/ microform.at].&lt;br /&gt;
&lt;br /&gt;
=== hCard Validator ===&lt;br /&gt;
[http://code.google.com/p/hcardvalidator/ Source code] of the [http://hcard.geekhood.net/ hCard Validator] contains XSLT and PHP code for hCard and include microformats.&lt;br /&gt;
&lt;br /&gt;
=== ARC2 ===&lt;br /&gt;
[http://arc.semsol.org/ ARC2] is a semantic web toolkit which includes support for hCard, adr, geo, XFN, hCalendar, hAtom, hResume, hReview, xFolk, rel-license and rel-tag. It's tri-licensed under the GPL 2 and 3, and the W3C Software licence.&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
===AUMP===&lt;br /&gt;
* [http://aump.googlecode.com AUMP] is a parser written by David Janes. It supports hCard, hCalendar, hAtom, hReview and hListing.&lt;br /&gt;
** Uses Python's [http://docs.python.org/library/xml.dom.minidom.html xml.dom.minidom] after cleaning input through [http://www.w3.org/People/Raggett/tidy/ HTML Tidy].&lt;br /&gt;
&lt;br /&gt;
===Microtron===&lt;br /&gt;
{{main|Microtron}}&lt;br /&gt;
* [[Microtron]] is a general-purpose microformat parser/transformer.  &lt;br /&gt;
&lt;br /&gt;
It can operate on the definition file included in [[Optimus]], making it a close replacement for certain tasks, and can easily be extended with new formats without modifying the source.  The primary advantages are speed (&amp;gt; 100x faster that [[Optimus]] for some operations), simplicity (single file) and small code size (currently &amp;lt; 150 lines).&lt;br /&gt;
&lt;br /&gt;
=== python-hcalendar ===&lt;br /&gt;
[http://pypi.python.org/pypi/python-hcalendar/0.1dev python-hcalendar] is a basic hCalendar parser.&lt;br /&gt;
&lt;br /&gt;
== More Ruby ==&lt;br /&gt;
===Prism ===&lt;br /&gt;
* [[Prism]]&lt;br /&gt;
** by [[implementors#Mark_Wunsch|Mark Wunsch]]&lt;br /&gt;
** Library and command line tool for parsing POSH/Microformats&lt;br /&gt;
** Uses the [http://nokogiri.org/ Nokogiri] HTML, XML, SAX, and Reader parser&lt;br /&gt;
&lt;br /&gt;
=== mofo ruby microformats parser===&lt;br /&gt;
* [http://mofo.rubyforge.org/ mofo], [http://groups.google.com/group/mofo-rb mofo Google Group], [http://github.com/defunkt/mofo/tree/master GitHub repository]&lt;br /&gt;
** by [[implementors#Chris Wanstrath|Chris Wanstrath]]&lt;br /&gt;
** Uses the [http://wiki.github.com/why/hpricot Hpricot] HTML/XML parser&lt;br /&gt;
&lt;br /&gt;
=== Microformat Parser for Ruby ===&lt;br /&gt;
* [http://blog.labnotes.org/2005/11/20/microformat-parser-for-ruby/ Microformat Parser for Ruby]&lt;br /&gt;
** by [[implementors#Assaf Arkin|Assaf Arkin]]&lt;br /&gt;
&lt;br /&gt;
=== uformats ===&lt;br /&gt;
* [http://rubyforge.org/projects/uformats uformats]&lt;br /&gt;
&lt;br /&gt;
=== scrAPI ===&lt;br /&gt;
* [http://rubyforge.org/projects/scrapi scrAPI]&lt;br /&gt;
&lt;br /&gt;
== XSLT ==&lt;br /&gt;
===Optimus===&lt;br /&gt;
* [[Optimus]] is open source XSLT that parses microformats, converts them into JSON or XML, and validates them too.&lt;br /&gt;
&lt;br /&gt;
===X2V===&lt;br /&gt;
* [[X2V]] is [http://hg.microformats.org/ open source XSLT for extracting microformats].&lt;br /&gt;
** by Brian Suda&lt;br /&gt;
&lt;br /&gt;
== editing this page ==&lt;br /&gt;
For now, this page ''copies'' (rather than ''moves'') information from the existing [[implementations | Implementations]] page.&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[implementations]]&lt;br /&gt;
* [[implementors]]&lt;br /&gt;
* [[open-source]]&lt;br /&gt;
* [[user-interface]]&lt;br /&gt;
* [[validators]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=57361</id>
		<title>microformats2-parsing</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=57361"/>
		<updated>2013-07-21T18:45:47Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: xss issue&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the goals of [[microformats2]] is to greatly simplify parsing of microformats, in particular, by making parsing independent of any one vocabulary. This page briefly documents the microformats2 parsing algorithm for doing so.&lt;br /&gt;
== implementations ==&lt;br /&gt;
{{main|microformats2#Implementations}}&lt;br /&gt;
There are open source [[microformats2#Implementations|microformats2 parsers]] available for Javascript, node.js, PHP, and Ruby.&lt;br /&gt;
&lt;br /&gt;
== algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== parse a document for microformats ===&lt;br /&gt;
To parse a document for microformats:&lt;br /&gt;
* start with an empty JSON &amp;quot;items&amp;quot; array and &amp;quot;rels&amp;quot; hash: &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;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* parse the root element for class microformats, adding to the JSON items array accordingly&lt;br /&gt;
* parse all hyperlink (&amp;lt;code&amp;gt;&amp;amp;lt;link&amp;gt; &amp;amp;lt;a&amp;gt;&amp;lt;/code&amp;gt;) elements for rel microformats, adding to the JSON rels hash accordingly&lt;br /&gt;
* return the resulting JSON&lt;br /&gt;
Parsers may simultaneously parse the document for both class and rel microformats (e.g. in a single tree traversal).&lt;br /&gt;
&lt;br /&gt;
=== parse an element for class microformats ===&lt;br /&gt;
To parse an element for class microformats:&lt;br /&gt;
* parse element class for root class name(s) &amp;quot;h-x&amp;quot; (and backcompat)&lt;br /&gt;
** if not found, parse child elements for microformats (depth first, doc order)&lt;br /&gt;
** else if found, start parsing a new microformat&lt;br /&gt;
*** parse child elements (document order) by:&lt;br /&gt;
**** parse a child element for properties (p-,u-,dt-,e-)&lt;br /&gt;
***** add properties found to current microformat&lt;br /&gt;
**** parse a child element for microformats (recurse)&lt;br /&gt;
***** if that child element itself has a microformat and is a property element, add it into the array of values for that property&lt;br /&gt;
***** else add found elements that are microformats to the &amp;quot;children&amp;quot; array&lt;br /&gt;
*** imply properties for the found microformat (see below)&lt;br /&gt;
&lt;br /&gt;
=== parse an element for properties ===&lt;br /&gt;
==== parsing a p- property ====&lt;br /&gt;
To parse an element for a p-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* if abbr.p-x[title], then return the title attribute&lt;br /&gt;
* else if data.p-x[value], then return the value attribute&lt;br /&gt;
* else if img.p-x[alt] or area.p-x[alt], then return the alt attribute&lt;br /&gt;
* else return the innertext of the element, replacing any nested &amp;lt;code&amp;gt;&amp;amp;lt;img&amp;gt;&amp;lt;/code&amp;gt; elements with their &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt; attribute if present, or otherwise their &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; attribute if present.&lt;br /&gt;
&lt;br /&gt;
==== parsing a u- property ====&lt;br /&gt;
To parse an element for a u-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* if a.u-x[href] or area.u-x[href], then get the href attribute&lt;br /&gt;
* else if img.u-x[src], then get the src attribute&lt;br /&gt;
* else if object.u-x[data], then get the data attribute&lt;br /&gt;
* if there is a gotten value, return the normalized absolute URL of it, following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;code&amp;gt;&amp;amp;lt;base&amp;amp;gt;&amp;lt;/code&amp;gt; element if any).&lt;br /&gt;
* else if abbr.u-x[title], then return the title attribute&lt;br /&gt;
* else if data.u-x[value], then return the value attribute&lt;br /&gt;
* else return the innertext of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing a dt- property ====&lt;br /&gt;
To parse an element for a dt-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]] including the date and time parsing rules, if a value is found then return it.&lt;br /&gt;
* if time.dt-x[datetime] or ins.dt-x[datetime] or del.dt-x[datetime], then return the datetime attribute&lt;br /&gt;
* else if abbr.dt-x[title], then return the title attribute&lt;br /&gt;
* else if data.dt-x[value], then return the value attribute&lt;br /&gt;
* else return the innertext of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing an e- property ====&lt;br /&gt;
To parse an element for a e-x property value:&lt;br /&gt;
* return the innerHTML of the element by using the [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#serializing-html-fragments HTML spec: Serializing HTML Fragments algorithm].&lt;br /&gt;
&lt;br /&gt;
==== parsing for implied properties ====&lt;br /&gt;
To imply properties: (where h-x is the root microformat element being parsed)&lt;br /&gt;
* if no explicit &amp;quot;name&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x then use its alt attribute for name&lt;br /&gt;
** else if abbr.h-x[title] then use its title attribute for name&lt;br /&gt;
** else if .h-x&amp;gt;img:only-child then use that img alt for name&lt;br /&gt;
** else if .h-x&amp;gt;abbr:only-child[title] then use that abbr title for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;img:only-child use that img alt for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;abbr:only-child[title] use that abbr title for name&lt;br /&gt;
** else use the innertext of the .h-x for name&lt;br /&gt;
** drop leading &amp;amp; trailing white-space from name, including nbsp&lt;br /&gt;
* if no explicit &amp;quot;photo&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x[src] then use src for photo&lt;br /&gt;
** else if object.h-x[data] then use data for photo&lt;br /&gt;
** else if .h-x&amp;gt;img[src]:only-of-type then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;object[data]:only-of-type then use that object data for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;img[src]:only-of-type then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;object[data]:only-of-type then use that object data for photo&lt;br /&gt;
* if no explicit &amp;quot;url&amp;quot; property,&lt;br /&gt;
* then imply by:&lt;br /&gt;
** if a.h-x[href] then use href for url&lt;br /&gt;
** else if .h-x&amp;gt;a[href]:only-of-type then use that a[href] for url&lt;br /&gt;
&lt;br /&gt;
=== parse a hyperlink element for rel microformats ===&lt;br /&gt;
To parse a hyperlink element for rel microformats: (where * is the hyperlink element)&lt;br /&gt;
* if the &amp;quot;rel&amp;quot; attribute of the element is empty then exit&lt;br /&gt;
* set url to the value of the &amp;quot;href&amp;quot; attribute of the element, normalized to be an absolute URL following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;code&amp;gt;&amp;amp;lt;base&amp;amp;gt;&amp;lt;/code&amp;gt; element if any).&lt;br /&gt;
* treat the &amp;quot;rel&amp;quot; attribute of the element as a space separate set of rel values&lt;br /&gt;
* if the set of rel values does NOT have &amp;quot;alternate&amp;quot; then&lt;br /&gt;
** for each rel value (rel-value)&lt;br /&gt;
*** if there is no key rel-value in the rels hash then create it with an empty array as its value&lt;br /&gt;
*** add url to the array of the key rel-value in the rels hash&lt;br /&gt;
** end for&lt;br /&gt;
* else&lt;br /&gt;
** if there is no top level &amp;quot;alternates&amp;quot; key in the JSON, then create it with an empty array as its value&lt;br /&gt;
** add a new hash to the array with keys:&lt;br /&gt;
*** &amp;quot;url&amp;quot;: url&lt;br /&gt;
*** &amp;quot;rel&amp;quot;: the set of rel values appended with spaces, except &amp;quot;alternate&amp;quot;&lt;br /&gt;
*** &amp;quot;media&amp;quot;: the value of the &amp;quot;media&amp;quot; attribute&lt;br /&gt;
*** &amp;quot;hreflang&amp;quot;: the value of the &amp;quot;hreflang&amp;quot; attribute&lt;br /&gt;
* end if&lt;br /&gt;
&lt;br /&gt;
==== rel parse examples ====&lt;br /&gt;
Here are some examples to show how parsed rels may be reflected into the JSON (empty items key).&lt;br /&gt;
&lt;br /&gt;
E.g. parsing this markup:&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;author&amp;quot; href=&amp;quot;http://example.com/a&amp;quot;&amp;gt;author a&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;author&amp;quot; href=&amp;quot;http://example.com/b&amp;quot;&amp;gt;author b&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;in-reply-to&amp;quot; href=&amp;quot;http://example.com/1&amp;quot;&amp;gt;post 1&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;in-reply-to&amp;quot; href=&amp;quot;http://example.com/2&amp;quot;&amp;gt;post 2&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;alternate home&amp;quot;&lt;br /&gt;
   href=&amp;quot;http://example.com/fr&amp;quot;&lt;br /&gt;
   media=&amp;quot;handheld&amp;quot;&lt;br /&gt;
   hreflang=&amp;quot;fr&amp;quot;&amp;gt;French mobile homepage&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would generate this 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;rels&amp;quot;: { &lt;br /&gt;
    &amp;quot;author&amp;quot;: [ &amp;quot;http://example.com/a&amp;quot;, &amp;quot;http://example.com/b&amp;quot; ],&lt;br /&gt;
    &amp;quot;in-reply-to&amp;quot;: [ &amp;quot;http://example.com/1&amp;quot;, &amp;quot;http://example.com/2&amp;quot; ] &lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;alternates&amp;quot;: [{&lt;br /&gt;
     &amp;quot;url&amp;quot;: &amp;quot;http://example.com/fr&amp;quot;, &lt;br /&gt;
     &amp;quot;rel&amp;quot;: &amp;quot;home&amp;quot;, &lt;br /&gt;
     &amp;quot;media&amp;quot;: &amp;quot;handheld&amp;quot;, &lt;br /&gt;
     &amp;quot;hreflang&amp;quot;: &amp;quot;fr&amp;quot; &lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another parse output example can be found here:&lt;br /&gt;
* https://gist.github.com/barnabywalters/5480962&lt;br /&gt;
&lt;br /&gt;
== what do the CSS selector expressions mean ==&lt;br /&gt;
Use [http://gallery.theopalgroup.com/selectoracle/ SelectORacle] to expand any of the above CSS selector expressions into longform English prose.&lt;br /&gt;
&lt;br /&gt;
== questions ==&lt;br /&gt;
See the FAQ:&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
&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;
&amp;lt;/div&amp;gt;&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&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;
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) &amp;lt;/div&amp;gt;&lt;br /&gt;
&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;
&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;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
* [[microformats2-parsing-brainstorming]] - for background, thinking, exploring possibilities&lt;br /&gt;
* [[microformats2-parsing-rdf]]&lt;br /&gt;
* [[microformats2-implied-properties]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=57018</id>
		<title>microformats2-parsing</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=57018"/>
		<updated>2013-07-17T07:21:58Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Updated my point&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the goals of [[microformats2]] is to greatly simplify parsing of microformats, in particular, by making parsing independent of any one vocabulary. This page briefly documents the microformats2 parsing algorithm for doing so.&lt;br /&gt;
== implementations ==&lt;br /&gt;
{{main|microformats2#Implementations}}&lt;br /&gt;
There are open source [[microformats2#Implementations|microformats2 parsers]] available for Javascript, node.js, PHP, and Ruby.&lt;br /&gt;
&lt;br /&gt;
== algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== parse a document for microformats ===&lt;br /&gt;
To parse a document for microformats:&lt;br /&gt;
* start with an empty JSON &amp;quot;items&amp;quot; array and &amp;quot;rels&amp;quot; hash: &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;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* parse the root element for class microformats, adding to the JSON items array accordingly&lt;br /&gt;
* parse all hyperlink (&amp;lt;code&amp;gt;&amp;amp;lt;link&amp;gt; &amp;amp;lt;a&amp;gt;&amp;lt;/code&amp;gt;) elements for rel microformats, adding to the JSON rels hash accordingly&lt;br /&gt;
* return the resulting JSON&lt;br /&gt;
Parsers may simultaneously parse the document for both class and rel microformats (e.g. in a single tree traversal).&lt;br /&gt;
&lt;br /&gt;
=== parse an element for class microformats ===&lt;br /&gt;
To parse an element for class microformats:&lt;br /&gt;
* parse element class for root class name(s) &amp;quot;h-x&amp;quot; (and backcompat)&lt;br /&gt;
** if not found, parse child elements for microformats (depth first, doc order)&lt;br /&gt;
** else if found, start parsing a new microformat&lt;br /&gt;
*** parse child elements (document order) by:&lt;br /&gt;
**** parse a child element for properties (p-,u-,dt-,e-)&lt;br /&gt;
***** add properties found to current microformat&lt;br /&gt;
**** parse a child element for microformats (recurse)&lt;br /&gt;
***** if that child element itself has a microformat and is a property element, add it into the array of values for that property&lt;br /&gt;
***** else add found elements that are microformats to the &amp;quot;children&amp;quot; array&lt;br /&gt;
*** imply properties for the found microformat (see below)&lt;br /&gt;
&lt;br /&gt;
=== parse an element for properties ===&lt;br /&gt;
==== parsing a p- property ====&lt;br /&gt;
To parse an element for a p-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* if abbr.p-x[title], then return the title attribute&lt;br /&gt;
* else if data.p-x[value], then return the value attribute&lt;br /&gt;
* else if img.p-x[alt] or area.p-x[alt], then return the alt attribute&lt;br /&gt;
* else return the innertext of the element, replacing any nested &amp;lt;code&amp;gt;&amp;amp;lt;img&amp;gt;&amp;lt;/code&amp;gt; elements with their &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt; attribute if present, or otherwise their &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; attribute if present.&lt;br /&gt;
&lt;br /&gt;
==== parsing a u- property ====&lt;br /&gt;
To parse an element for a u-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* if a.u-x[href] or area.u-x[href], then get the href attribute&lt;br /&gt;
* else if img.u-x[src], then get the src attribute&lt;br /&gt;
* else if object.u-x[data], then get the data attribute&lt;br /&gt;
* if there is a gotten value, return the normalized absolute URL of it, following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;code&amp;gt;&amp;amp;lt;base&amp;amp;gt;&amp;lt;/code&amp;gt; element if any).&lt;br /&gt;
* else if abbr.u-x[title], then return the title attribute&lt;br /&gt;
* else if data.u-x[value], then return the value attribute&lt;br /&gt;
* else return the innertext of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing a dt- property ====&lt;br /&gt;
To parse an element for a dt-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]] including the date and time parsing rules, if a value is found then return it.&lt;br /&gt;
* if time.dt-x[datetime] or ins.dt-x[datetime] or del.dt-x[datetime], then return the datetime attribute&lt;br /&gt;
* else if abbr.dt-x[title], then return the title attribute&lt;br /&gt;
* else if data.dt-x[value], then return the value attribute&lt;br /&gt;
* else return the innertext of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing an e- property ====&lt;br /&gt;
To parse an element for a e-x property value:&lt;br /&gt;
* return the innerHTML of the element by using the [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#serializing-html-fragments HTML spec: Serializing HTML Fragments algorithm].&lt;br /&gt;
&lt;br /&gt;
==== parsing for implied properties ====&lt;br /&gt;
To imply properties: (where h-x is the root microformat element being parsed)&lt;br /&gt;
* if no explicit &amp;quot;name&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x then use its alt attribute for name&lt;br /&gt;
** else if abbr.h-x[title] then use its title attribute for name&lt;br /&gt;
** else if .h-x&amp;gt;img:only-child then use that img alt for name&lt;br /&gt;
** else if .h-x&amp;gt;abbr:only-child[title] then use that abbr title for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;img:only-child use that img alt for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;abbr:only-child[title] use that abbr title for name&lt;br /&gt;
** else use the innertext of the .h-x for name&lt;br /&gt;
** drop leading &amp;amp; trailing white-space from name, including nbsp&lt;br /&gt;
* if no explicit &amp;quot;photo&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x[src] then use src for photo&lt;br /&gt;
** else if object.h-x[data] then use data for photo&lt;br /&gt;
** else if .h-x&amp;gt;img[src]:only-of-type then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;object[data]:only-of-type then use that object data for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;img[src]:only-of-type then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;object[data]:only-of-type then use that object data for photo&lt;br /&gt;
* if no explicit &amp;quot;url&amp;quot; property,&lt;br /&gt;
* then imply by:&lt;br /&gt;
** if a.h-x[href] then use href for url&lt;br /&gt;
** else if .h-x&amp;gt;a[href]:only-of-type then use that a[href] for url&lt;br /&gt;
&lt;br /&gt;
=== parse a hyperlink element for rel microformats ===&lt;br /&gt;
To parse a hyperlink element for rel microformats: (where * is the hyperlink element)&lt;br /&gt;
* if the &amp;quot;rel&amp;quot; attribute of the element is empty then exit&lt;br /&gt;
* set url to the value of the &amp;quot;href&amp;quot; attribute of the element, normalized to be an absolute URL following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;code&amp;gt;&amp;amp;lt;base&amp;amp;gt;&amp;lt;/code&amp;gt; element if any).&lt;br /&gt;
* treat the &amp;quot;rel&amp;quot; attribute of the element as a space separate set of rel values&lt;br /&gt;
* if the set of rel values does NOT have &amp;quot;alternate&amp;quot; then&lt;br /&gt;
** for each rel value (rel-value)&lt;br /&gt;
*** if there is no key rel-value in the rels hash then create it with an empty array as its value&lt;br /&gt;
*** add url to the array of the key rel-value in the rels hash&lt;br /&gt;
** end for&lt;br /&gt;
* else&lt;br /&gt;
** if there is no top level &amp;quot;alternates&amp;quot; key in the JSON, then create it with an empty array as its value&lt;br /&gt;
** add a new hash to the array with keys:&lt;br /&gt;
*** &amp;quot;url&amp;quot;: url&lt;br /&gt;
*** &amp;quot;rel&amp;quot;: the set of rel values appended with spaces, except &amp;quot;alternate&amp;quot;&lt;br /&gt;
*** &amp;quot;media&amp;quot;: the value of the &amp;quot;media&amp;quot; attribute&lt;br /&gt;
*** &amp;quot;hreflang&amp;quot;: the value of the &amp;quot;hreflang&amp;quot; attribute&lt;br /&gt;
* end if&lt;br /&gt;
&lt;br /&gt;
==== rel parse examples ====&lt;br /&gt;
Here are some examples to show how parsed rels may be reflected into the JSON (empty items key).&lt;br /&gt;
&lt;br /&gt;
E.g. parsing this markup:&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;author&amp;quot; href=&amp;quot;http://example.com/a&amp;quot;&amp;gt;author a&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;author&amp;quot; href=&amp;quot;http://example.com/b&amp;quot;&amp;gt;author b&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;in-reply-to&amp;quot; href=&amp;quot;http://example.com/1&amp;quot;&amp;gt;post 1&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;in-reply-to&amp;quot; href=&amp;quot;http://example.com/2&amp;quot;&amp;gt;post 2&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;alternate home&amp;quot;&lt;br /&gt;
   href=&amp;quot;http://example.com/fr&amp;quot;&lt;br /&gt;
   media=&amp;quot;handheld&amp;quot;&lt;br /&gt;
   hreflang=&amp;quot;fr&amp;quot;&amp;gt;French mobile homepage&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would generate this 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;rels&amp;quot;: { &lt;br /&gt;
    &amp;quot;author&amp;quot;: [ &amp;quot;http://example.com/a&amp;quot;, &amp;quot;http://example.com/b&amp;quot; ],&lt;br /&gt;
    &amp;quot;in-reply-to&amp;quot;: [ &amp;quot;http://example.com/1&amp;quot;, &amp;quot;http://example.com/2&amp;quot; ] &lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;alternates&amp;quot;: [{&lt;br /&gt;
     &amp;quot;url&amp;quot;: &amp;quot;http://example.com/fr&amp;quot;, &lt;br /&gt;
     &amp;quot;rel&amp;quot;: &amp;quot;home&amp;quot;, &lt;br /&gt;
     &amp;quot;media&amp;quot;: &amp;quot;handheld&amp;quot;, &lt;br /&gt;
     &amp;quot;hreflang&amp;quot;: &amp;quot;fr&amp;quot; &lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another parse output example can be found here:&lt;br /&gt;
* https://gist.github.com/barnabywalters/5480962&lt;br /&gt;
&lt;br /&gt;
== what do the CSS selector expressions mean ==&lt;br /&gt;
Use [http://gallery.theopalgroup.com/selectoracle/ SelectORacle] to expand any of the above CSS selector expressions into longform English prose.&lt;br /&gt;
&lt;br /&gt;
== questions ==&lt;br /&gt;
See the FAQ:&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
&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;
&amp;lt;/div&amp;gt;&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&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;
&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;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
* [[microformats2-parsing-brainstorming]] - for background, thinking, exploring possibilities&lt;br /&gt;
* [[microformats2-parsing-rdf]]&lt;br /&gt;
* [[microformats2-implied-properties]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=56999</id>
		<title>microformats2-parsing</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=56999"/>
		<updated>2013-07-17T07:04:36Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: but u-* which should be HTTP encoded&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the goals of [[microformats2]] is to greatly simplify parsing of microformats, in particular, by making parsing independent of any one vocabulary. This page briefly documents the microformats2 parsing algorithm for doing so.&lt;br /&gt;
== implementations ==&lt;br /&gt;
{{main|microformats2#Implementations}}&lt;br /&gt;
There are open source [[microformats2#Implementations|microformats2 parsers]] available for Javascript, node.js, PHP, and Ruby.&lt;br /&gt;
&lt;br /&gt;
== algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== parse a document for microformats ===&lt;br /&gt;
To parse a document for microformats:&lt;br /&gt;
* start with an empty JSON &amp;quot;items&amp;quot; array and &amp;quot;rels&amp;quot; hash: &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;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* parse the root element for class microformats, adding to the JSON items array accordingly&lt;br /&gt;
* parse all hyperlink (&amp;lt;code&amp;gt;&amp;amp;lt;link&amp;gt; &amp;amp;lt;a&amp;gt;&amp;lt;/code&amp;gt;) elements for rel microformats, adding to the JSON rels hash accordingly&lt;br /&gt;
* return the resulting JSON&lt;br /&gt;
Parsers may simultaneously parse the document for both class and rel microformats (e.g. in a single tree traversal).&lt;br /&gt;
&lt;br /&gt;
=== parse an element for class microformats ===&lt;br /&gt;
To parse an element for class microformats:&lt;br /&gt;
* parse element class for root class name(s) &amp;quot;h-x&amp;quot; (and backcompat)&lt;br /&gt;
** if not found, parse child elements for microformats (depth first, doc order)&lt;br /&gt;
** else if found, start parsing a new microformat&lt;br /&gt;
*** parse child elements (document order) by:&lt;br /&gt;
**** parse a child element for properties (p-,u-,dt-,e-)&lt;br /&gt;
***** add properties found to current microformat&lt;br /&gt;
**** parse a child element for microformats (recurse)&lt;br /&gt;
***** if that child element itself has a microformat and is a property element, add it into the array of values for that property&lt;br /&gt;
***** else add found elements that are microformats to the &amp;quot;children&amp;quot; array&lt;br /&gt;
*** imply properties for the found microformat (see below)&lt;br /&gt;
&lt;br /&gt;
=== parse an element for properties ===&lt;br /&gt;
==== parsing a p- property ====&lt;br /&gt;
To parse an element for a p-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* if abbr.p-x[title], then return the title attribute&lt;br /&gt;
* else if data.p-x[value], then return the value attribute&lt;br /&gt;
* else if img.p-x[alt] or area.p-x[alt], then return the alt attribute&lt;br /&gt;
* else return the innertext of the element, replacing any nested &amp;lt;code&amp;gt;&amp;amp;lt;img&amp;gt;&amp;lt;/code&amp;gt; elements with their &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt; attribute if present, or otherwise their &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; attribute if present.&lt;br /&gt;
&lt;br /&gt;
==== parsing a u- property ====&lt;br /&gt;
To parse an element for a u-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* if a.u-x[href] or area.u-x[href], then get the href attribute&lt;br /&gt;
* else if img.u-x[src], then get the src attribute&lt;br /&gt;
* else if object.u-x[data], then get the data attribute&lt;br /&gt;
* if there is a gotten value, return the normalized absolute URL of it, following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;code&amp;gt;&amp;amp;lt;base&amp;amp;gt;&amp;lt;/code&amp;gt; element if any).&lt;br /&gt;
* else if abbr.u-x[title], then return the title attribute&lt;br /&gt;
* else if data.u-x[value], then return the value attribute&lt;br /&gt;
* else return the innertext of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing a dt- property ====&lt;br /&gt;
To parse an element for a dt-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]] including the date and time parsing rules, if a value is found then return it.&lt;br /&gt;
* if time.dt-x[datetime] or ins.dt-x[datetime] or del.dt-x[datetime], then return the datetime attribute&lt;br /&gt;
* else if abbr.dt-x[title], then return the title attribute&lt;br /&gt;
* else if data.dt-x[value], then return the value attribute&lt;br /&gt;
* else return the innertext of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing an e- property ====&lt;br /&gt;
To parse an element for a e-x property value:&lt;br /&gt;
* return the innerHTML of the element by using the [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#serializing-html-fragments HTML spec: Serializing HTML Fragments algorithm].&lt;br /&gt;
&lt;br /&gt;
==== parsing for implied properties ====&lt;br /&gt;
To imply properties: (where h-x is the root microformat element being parsed)&lt;br /&gt;
* if no explicit &amp;quot;name&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x then use its alt attribute for name&lt;br /&gt;
** else if abbr.h-x[title] then use its title attribute for name&lt;br /&gt;
** else if .h-x&amp;gt;img:only-child then use that img alt for name&lt;br /&gt;
** else if .h-x&amp;gt;abbr:only-child[title] then use that abbr title for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;img:only-child use that img alt for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;abbr:only-child[title] use that abbr title for name&lt;br /&gt;
** else use the innertext of the .h-x for name&lt;br /&gt;
** drop leading &amp;amp; trailing white-space from name, including nbsp&lt;br /&gt;
* if no explicit &amp;quot;photo&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x[src] then use src for photo&lt;br /&gt;
** else if object.h-x[data] then use data for photo&lt;br /&gt;
** else if .h-x&amp;gt;img[src]:only-of-type then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;object[data]:only-of-type then use that object data for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;img[src]:only-of-type then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;object[data]:only-of-type then use that object data for photo&lt;br /&gt;
* if no explicit &amp;quot;url&amp;quot; property,&lt;br /&gt;
* then imply by:&lt;br /&gt;
** if a.h-x[href] then use href for url&lt;br /&gt;
** else if .h-x&amp;gt;a[href]:only-of-type then use that a[href] for url&lt;br /&gt;
&lt;br /&gt;
=== parse a hyperlink element for rel microformats ===&lt;br /&gt;
To parse a hyperlink element for rel microformats: (where * is the hyperlink element)&lt;br /&gt;
* if the &amp;quot;rel&amp;quot; attribute of the element is empty then exit&lt;br /&gt;
* set url to the value of the &amp;quot;href&amp;quot; attribute of the element, normalized to be an absolute URL following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;code&amp;gt;&amp;amp;lt;base&amp;amp;gt;&amp;lt;/code&amp;gt; element if any).&lt;br /&gt;
* treat the &amp;quot;rel&amp;quot; attribute of the element as a space separate set of rel values&lt;br /&gt;
* if the set of rel values does NOT have &amp;quot;alternate&amp;quot; then&lt;br /&gt;
** for each rel value (rel-value)&lt;br /&gt;
*** if there is no key rel-value in the rels hash then create it with an empty array as its value&lt;br /&gt;
*** add url to the array of the key rel-value in the rels hash&lt;br /&gt;
** end for&lt;br /&gt;
* else&lt;br /&gt;
** if there is no top level &amp;quot;alternates&amp;quot; key in the JSON, then create it with an empty array as its value&lt;br /&gt;
** add a new hash to the array with keys:&lt;br /&gt;
*** &amp;quot;url&amp;quot;: url&lt;br /&gt;
*** &amp;quot;rel&amp;quot;: the set of rel values appended with spaces, except &amp;quot;alternate&amp;quot;&lt;br /&gt;
*** &amp;quot;media&amp;quot;: the value of the &amp;quot;media&amp;quot; attribute&lt;br /&gt;
*** &amp;quot;hreflang&amp;quot;: the value of the &amp;quot;hreflang&amp;quot; attribute&lt;br /&gt;
* end if&lt;br /&gt;
&lt;br /&gt;
==== rel parse examples ====&lt;br /&gt;
Here are some examples to show how parsed rels may be reflected into the JSON (empty items key).&lt;br /&gt;
&lt;br /&gt;
E.g. parsing this markup:&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;author&amp;quot; href=&amp;quot;http://example.com/a&amp;quot;&amp;gt;author a&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;author&amp;quot; href=&amp;quot;http://example.com/b&amp;quot;&amp;gt;author b&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;in-reply-to&amp;quot; href=&amp;quot;http://example.com/1&amp;quot;&amp;gt;post 1&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;in-reply-to&amp;quot; href=&amp;quot;http://example.com/2&amp;quot;&amp;gt;post 2&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;alternate home&amp;quot;&lt;br /&gt;
   href=&amp;quot;http://example.com/fr&amp;quot;&lt;br /&gt;
   media=&amp;quot;handheld&amp;quot;&lt;br /&gt;
   hreflang=&amp;quot;fr&amp;quot;&amp;gt;French mobile homepage&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would generate this 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;rels&amp;quot;: { &lt;br /&gt;
    &amp;quot;author&amp;quot;: [ &amp;quot;http://example.com/a&amp;quot;, &amp;quot;http://example.com/b&amp;quot; ],&lt;br /&gt;
    &amp;quot;in-reply-to&amp;quot;: [ &amp;quot;http://example.com/1&amp;quot;, &amp;quot;http://example.com/2&amp;quot; ] &lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;alternates&amp;quot;: [{&lt;br /&gt;
     &amp;quot;url&amp;quot;: &amp;quot;http://example.com/fr&amp;quot;, &lt;br /&gt;
     &amp;quot;rel&amp;quot;: &amp;quot;home&amp;quot;, &lt;br /&gt;
     &amp;quot;media&amp;quot;: &amp;quot;handheld&amp;quot;, &lt;br /&gt;
     &amp;quot;hreflang&amp;quot;: &amp;quot;fr&amp;quot; &lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another parse output example can be found here:&lt;br /&gt;
* https://gist.github.com/barnabywalters/5480962&lt;br /&gt;
&lt;br /&gt;
== what do the CSS selector expressions mean ==&lt;br /&gt;
Use [http://gallery.theopalgroup.com/selectoracle/ SelectORacle] to expand any of the above CSS selector expressions into longform English prose.&lt;br /&gt;
&lt;br /&gt;
== questions ==&lt;br /&gt;
See the FAQ:&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
&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;
&amp;lt;/div&amp;gt;&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&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.  The proposal is that we HTML encode all properties. Can I suggest that we do the HTML encoded all properties but u-* which should be HTTP encoded. --[[User:GlennJones|Glenn Jones]] 8:02, 17 July 2013 (UTC) &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&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;
&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;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
* [[microformats2-parsing-brainstorming]] - for background, thinking, exploring possibilities&lt;br /&gt;
* [[microformats2-parsing-rdf]]&lt;br /&gt;
* [[microformats2-implied-properties]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=h-review&amp;diff=56859</id>
		<title>h-review</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=h-review&amp;diff=56859"/>
		<updated>2013-07-14T10:29:10Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Added 'T' delimiter to datetime&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;h-review&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;p-name fn&amp;quot;&amp;gt;[[User:Tantek|Tantek Çelik]]&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;p-role role&amp;quot;&amp;gt;Editor&amp;lt;/span&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;dfn style=&amp;quot;font-style:normal;font-weight:bold&amp;quot;&amp;gt;h-review&amp;lt;/dfn&amp;gt; is a simple, open format for publishing reviews on the web. h-review is one of several open [[microformats|microformat]] draft standards suitable for embedding data in HTML/HTML5 on the web.&lt;br /&gt;
&lt;br /&gt;
h-review is the [[microformats2]] update to [[hReview]].&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
Here is a simple review example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-review&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;Microformats: is structured data worth it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;blockquote&amp;gt;&lt;br /&gt;
    &amp;lt;a class=&amp;quot;p-item h-item&amp;quot; href=&amp;quot;http://microformats.org&amp;quot;&amp;gt;Microformats&amp;lt;/a&amp;gt; are the simplest way to publish structured data on the web.&lt;br /&gt;
  &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;p&amp;gt;&lt;br /&gt;
    &amp;lt;data class=&amp;quot;p-rating&amp;quot; value=&amp;quot;5&amp;quot;&amp;gt;★★★★★&amp;lt;/data&amp;gt;&lt;br /&gt;
    Published &amp;lt;time class=&amp;quot;dt-reviewed&amp;quot; datetime=&amp;quot;2013-06-12T12:00:00&amp;quot;&amp;gt;12&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013&amp;lt;/time&amp;gt;&lt;br /&gt;
    by &amp;lt;a class=&amp;quot;p-reviewer h-card&amp;quot; href=&amp;quot;http://example.com&amp;quot;&amp;gt;Joe Bloggs&amp;lt;/a&amp;gt;.&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-description&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Yes, microformats are undoubtedly great. They are the simplest way to markup structured data in HTML and reap the benefits thereof, including using your web page as your API by automatic conversion to JSON. The alternatives of microdata/schema and RDFa are much more work, require more markup, and are more complicated (harder to get right, more likely to break).&amp;lt;/p&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;
=== Get started ===&lt;br /&gt;
The class '''&amp;lt;code&amp;gt;h-review&amp;lt;/code&amp;gt;''' is a ''root class name'' that indicates the presence of an h-review.&lt;br /&gt;
&lt;br /&gt;
'''p-name''', '''p-item''', '''p-rating''', '''dt-reviewed''', '''p-reviewer''', '''e-description''' and the other property class names listed below defined elements as ''properties'' of the h-review.&lt;br /&gt;
&lt;br /&gt;
The class '''&amp;lt;code&amp;gt;h-item&amp;lt;/code&amp;gt;''' is a ''root class name'' that indicates an embedded '''[[h-item]]''' for the p-item property.&lt;br /&gt;
&lt;br /&gt;
The class '''&amp;lt;code&amp;gt;h-card&amp;lt;/code&amp;gt;''' is a ''root class name'' that indicates an embedded '''[[h-card]]''' for the p-reviewer property.&lt;br /&gt;
&lt;br /&gt;
See [[microformats2-parsing]] to learn more about property class names.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
h-review properties, inside an element with class '''h-review''':&lt;br /&gt;
&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, including embedded microformat for e.g. 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, optionally with an embedded [[h-card]]&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;''' - review permalink URL&lt;br /&gt;
&lt;br /&gt;
All properties are optional.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
'''h-review''' is a microformats.org draft specification. Public discussion on h-review takes place on [[h-review-feedback]], the #microformats [[irc]] channel on irc.freenode.net, and [http://microformats.org/discuss/mail/microformats-new/ microformats-new mailing list].&lt;br /&gt;
&lt;br /&gt;
h-review is ready to use and implemented in the wild.&lt;br /&gt;
&lt;br /&gt;
== Property Details ==&lt;br /&gt;
(stub, add any property explanations here)&lt;br /&gt;
&lt;br /&gt;
== Examples in the Wild ==&lt;br /&gt;
* … add any h-review examples you find in the wild&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{h-spec-section-validating}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Backward Compatiblity ==&lt;br /&gt;
=== Publisher Compatibility ===&lt;br /&gt;
For backward compatibility, you may wish to use classic [[hReview]] classnames in addition to the more future-proof h-review properties, 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-review hreview&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name fn&amp;quot;&amp;gt;My great review&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parser Compatibility ===&lt;br /&gt;
Microformats parsers should detect classic properties and parse them as microformats 2 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;
Compatibility root class name: hreview&lt;br /&gt;
&lt;br /&gt;
Properties: (parsed as p- plain text unless otherwise specified)&lt;br /&gt;
&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=tag&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;
== Background ==&lt;br /&gt;
h-review is based on the existing [[hReview]] specification.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[h-card]]&lt;br /&gt;
* [[h-event]]&lt;br /&gt;
* [[h-adr]]&lt;br /&gt;
* [[h-geo]]&lt;br /&gt;
* [[h-product]] can all be embedded in h-review as the p-item&lt;br /&gt;
* [[h-item]] is a minimal microformat in case none of the others suitably represent the item being reviewed&lt;br /&gt;
&lt;br /&gt;
[[Category:Draft Specifications]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=h-entry&amp;diff=56858</id>
		<title>h-entry</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=h-entry&amp;diff=56858"/>
		<updated>2013-07-14T10:26:12Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Added 'T' delimiter to datetime&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;h-entry&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-card vcard&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;p-name fn&amp;quot;&amp;gt;[[User:Tantek|Tantek Çelik]]&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;p-role role&amp;quot;&amp;gt;Editor&amp;lt;/span&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;dfn style=&amp;quot;font-style:normal;font-weight:bold&amp;quot;&amp;gt;h-entry&amp;lt;/dfn&amp;gt; is a simple, open format for episodic or datestamped content on the web. h-entry is often used with content intended to be syndicated, e.g. blog posts. h-entry is one of several open [[microformats|microformat]] draft standards suitable for embedding data in HTML/HTML5.&lt;br /&gt;
&lt;br /&gt;
h-entry is the [[microformats2]] update to [[hAtom]].&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
Here is a simple blog post example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&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;Microformats are amazing&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Published by &amp;lt;a class=&amp;quot;p-author h-card&amp;quot;&amp;gt;W. Developer&amp;lt;/a&amp;gt;&lt;br /&gt;
     on &amp;lt;time class=&amp;quot;dt-published&amp;quot; datetime=&amp;quot;2013-06-13T12: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;
  &lt;br /&gt;
  &amp;lt;p class=&amp;quot;p-summary&amp;quot;&amp;gt;In which I extoll the virtues of using microformats.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;div class=&amp;quot;e-content&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Blah blah blah&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Get started ===&lt;br /&gt;
The class '''&amp;lt;code&amp;gt;h-entry&amp;lt;/code&amp;gt;''' is a ''root class name'' that indicates the presence of an h-entry.&lt;br /&gt;
&lt;br /&gt;
'''p-name''', '''p-author''', '''dt-published''' and the other h-entry property classnames listed below define properties of the h-entry.&lt;br /&gt;
&lt;br /&gt;
See [[microformats2-parsing]] to learn more about property classnames.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
h-entry properties, inside an element with class '''h-entry''':&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - entry name/title&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;''' - short entry summary&lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-content&amp;lt;/code&amp;gt;''' - full content of the entry&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-published&amp;lt;/code&amp;gt;''' - when the entry was published&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-updated&amp;lt;/code&amp;gt;''' - when the entry was updated&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt;''' - who wrote the entry, optionally embedded [[h-card]](s)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - entry categories/tags&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - entry permalink URL&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-uid&amp;lt;/code&amp;gt;''' - unique entry ID&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;''' - geophysical location the entry was posted from, optionally embed [[h-geo]] {{main|h-geo}}&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;''' - decimal latitude&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;''' - decimal longitude&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-altitude&amp;lt;/code&amp;gt;''' - decimal altitude&lt;br /&gt;
&lt;br /&gt;
The following experimental properties are in use in the wild but are not yet part of the spec:&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-in-reply-to&amp;lt;/code&amp;gt;''' - the URL which the h-entry is considered a reply to or comment on.&lt;br /&gt;
** Potentially optionally an embedded (or nested?) h-entry (for reply contexts) but I’m the only one doing that right now so not considered a recommendation --[[User:Barnabywalters|bw]] 16:44, 13 June 2013 (UTC)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-comment&amp;lt;/code&amp;gt;''' - optionally embedded (or nested?) h-entry(ies), each of which is a comment on/reply to the parent h-entry. See [[comment-brainstorming]].&lt;br /&gt;
&lt;br /&gt;
The following properties are proposed additions based on various existing link preview markup conventions which are ''not'' yet used in the wild (Related: [[link-preview-brainstorming]])&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;
&lt;br /&gt;
All properties are optional.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
'''h-entry''' is a microformats.org draft specification. Public discussion on h-entry takes place on [[h-entry-feedback]], the #microformats [[irc]] channel on irc.freenode.net, and [http://microformats.org/discuss/mail/microformats-new/ microformats-new mailing list].&lt;br /&gt;
&lt;br /&gt;
h-entry is ready to use and implemented in the wild, but for backwards compatibility you should also mark h-entries up as classic [[hAtom]] entries.&lt;br /&gt;
&lt;br /&gt;
== Property Details ==&lt;br /&gt;
(stub, to be expanded)&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;
== FAQ ==&lt;br /&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;
== Examples in the wild ==&lt;br /&gt;
Real world in the wild examples:&lt;br /&gt;
&lt;br /&gt;
* ... add uses of h-entry you see in the wild here.&lt;br /&gt;
* The Twitter archive browser UI uses h-entry and h-card internally, unfortunately it’s not exposed as HTML in static files anywhere&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;
* 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;
* 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;
* Numerous newer W3C specs, e.g.&lt;br /&gt;
** [http://www.w3.org/TR/2013/CR-css3-values-20130404/ CSS Values and Units Module Level 3 - 2013-04-04]&lt;br /&gt;
** [http://www.w3.org/TR/2013/CR-css3-conditional-20130404/ CSS Conditional Rules Module Level 3 - 2013-04-04]&lt;br /&gt;
** [http://www.w3.org/TR/2013/WD-css3-page-20130314/ CSS Paged Media Module Level 3 - 2013-03-14]&lt;br /&gt;
** [http://www.w3.org/TR/2013/WD-css-counter-styles-3-20130221/ CSS Counter Styles Level 3 - 2013-02-21]&lt;br /&gt;
* [http://wordpress.org/extend/themes/sempress SemPress] is a WordPress theme that supports h-card, h-feed/h-entry.&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;
* Aaron Parecki uses h-entry to mark up notes, e.g. [http://aaronparecki.com/2012/230/reply/1 2012/230/reply/1].&lt;br /&gt;
* [http://tantek.com/ Tantek Çelik] uses 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&lt;br /&gt;
* [http://waterpigs.co.uk/ Barnaby Walters] uses h-entry on all notes and articles, as well as nested within notes as reply contexts [http://waterpigs.co.uk/notes/1468/ example] and comments [http://waterpigs.co.uk/notes/1482/ example].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{h-spec-section-validating}}&lt;br /&gt;
&lt;br /&gt;
== Backward Compatibility ==&lt;br /&gt;
=== Publisher Compatibility ===&lt;br /&gt;
For backward compatibility, you may wish to use classic [[hAtom]] classnames in addition to the more future-proof h-entry properties, 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-entry hentry&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name entry-title&amp;quot;&amp;gt;My great blog post&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parser Compatibility ===&lt;br /&gt;
Microformats parsers should detect classic properties and parse them as microformats2 properties. If an &amp;quot;h-entry&amp;quot; is found, don't look for an &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;
&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; - parse as '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;'''&lt;br /&gt;
* &amp;lt;code&amp;gt;entry-content&amp;lt;/code&amp;gt; - parse as '''&amp;lt;code&amp;gt;e-content&amp;lt;/code&amp;gt;'''&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;
== Background ==&lt;br /&gt;
This work is based on the existing [[hAtom]] microformat, and extensive selfdogfooding in the [http://indiewebcamp.com indie web camp] community.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
&lt;br /&gt;
(stub, expand)&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[h-geo]]&lt;br /&gt;
* [[hCard]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Draft Specifications]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=56857</id>
		<title>microformats2-parsing</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=56857"/>
		<updated>2013-07-14T10:25:15Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: New datetime pattern issue&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the goals of [[microformats2]] is to greatly simplify parsing of microformats, in particular, by making parsing independent of any one vocabulary. This page briefly documents the microformats2 parsing algorithm for doing so.&lt;br /&gt;
== implementations ==&lt;br /&gt;
{{main|microformats2#Implementations}}&lt;br /&gt;
There are open source [[microformats2#Implementations|microformats2 parsers]] available for Javascript, node.js, PHP, and Ruby.&lt;br /&gt;
&lt;br /&gt;
== algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== parse a document for microformats ===&lt;br /&gt;
To parse a document for microformats:&lt;br /&gt;
* start with an empty JSON &amp;quot;items&amp;quot; array and &amp;quot;rels&amp;quot; hash: &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;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* parse the root element for class microformats, adding to the JSON items array accordingly&lt;br /&gt;
* parse all hyperlink (&amp;lt;code&amp;gt;&amp;amp;lt;link&amp;gt; &amp;amp;lt;a&amp;gt;&amp;lt;/code&amp;gt;) elements for rel microformats, adding to the JSON rels hash accordingly&lt;br /&gt;
* return the resulting JSON&lt;br /&gt;
Parsers may simultaneously parse the document for both class and rel microformats (e.g. in a single tree traversal).&lt;br /&gt;
&lt;br /&gt;
=== parse an element for class microformats ===&lt;br /&gt;
To parse an element for class microformats:&lt;br /&gt;
* parse element class for root class name(s) &amp;quot;h-x&amp;quot; (and backcompat)&lt;br /&gt;
** if not found, parse child elements for microformats (depth first, doc order)&lt;br /&gt;
** else if found, start parsing a new microformat&lt;br /&gt;
*** parse child elements (document order) by:&lt;br /&gt;
**** parse a child element for properties (p-,u-,dt-,e-)&lt;br /&gt;
***** add properties found to current microformat&lt;br /&gt;
**** parse a child element for microformats (recurse)&lt;br /&gt;
***** if that child element itself has a microformat and is a property element, add it into the array of values for that property&lt;br /&gt;
***** else add found elements that are microformats to the &amp;quot;children&amp;quot; array&lt;br /&gt;
*** imply properties for the found microformat (see below)&lt;br /&gt;
&lt;br /&gt;
=== parse an element for properties ===&lt;br /&gt;
==== parsing a p- property ====&lt;br /&gt;
To parse an element for a p-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* if abbr.p-x[title], then return the title attribute&lt;br /&gt;
* else if data.p-x[value], then return the value attribute&lt;br /&gt;
* else if img.p-x[alt] or area.p-x[alt], then return the alt attribute&lt;br /&gt;
* else return the innertext of the element, replacing any nested &amp;lt;code&amp;gt;&amp;amp;lt;img&amp;gt;&amp;lt;/code&amp;gt; elements with their &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt; attribute if present, or otherwise their &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; attribute if present.&lt;br /&gt;
&lt;br /&gt;
==== parsing a u- property ====&lt;br /&gt;
To parse an element for a u-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* if a.u-x[href] or area.u-x[href], then get the href attribute&lt;br /&gt;
* else if img.u-x[src], then get the src attribute&lt;br /&gt;
* else if object.u-x[data], then get the data attribute&lt;br /&gt;
* if there is a gotten value, return the normalized absolute URL of it, following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;code&amp;gt;&amp;amp;lt;base&amp;amp;gt;&amp;lt;/code&amp;gt; element if any).&lt;br /&gt;
* else if abbr.u-x[title], then return the title attribute&lt;br /&gt;
* else if data.u-x[value], then return the value attribute&lt;br /&gt;
* else return the innertext of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing a dt- property ====&lt;br /&gt;
To parse an element for a dt-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]] including the date and time parsing rules, if a value is found then return it.&lt;br /&gt;
* if time.dt-x[datetime] or ins.dt-x[datetime] or del.dt-x[datetime], then return the datetime attribute&lt;br /&gt;
* else if abbr.dt-x[title], then return the title attribute&lt;br /&gt;
* else if data.dt-x[value], then return the value attribute&lt;br /&gt;
* else return the innertext of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing an e- property ====&lt;br /&gt;
To parse an element for a e-x property value:&lt;br /&gt;
* return the innerHTML of the element by using the [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#serializing-html-fragments HTML spec: Serializing HTML Fragments algorithm].&lt;br /&gt;
&lt;br /&gt;
==== parsing for implied properties ====&lt;br /&gt;
To imply properties: (where h-x is the root microformat element being parsed)&lt;br /&gt;
* if no explicit &amp;quot;name&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x then use its alt attribute for name&lt;br /&gt;
** else if abbr.h-x[title] then use its title attribute for name&lt;br /&gt;
** else if .h-x&amp;gt;img:only-child then use that img alt for name&lt;br /&gt;
** else if .h-x&amp;gt;abbr:only-child[title] then use that abbr title for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;img:only-child use that img alt for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;abbr:only-child[title] use that abbr title for name&lt;br /&gt;
** else use the innertext of the .h-x for name&lt;br /&gt;
** drop leading &amp;amp; trailing white-space from name, including nbsp&lt;br /&gt;
* if no explicit &amp;quot;photo&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x[src] then use src for photo&lt;br /&gt;
** else if object.h-x[data] then use data for photo&lt;br /&gt;
** else if .h-x&amp;gt;img[src]:only-of-type then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;object[data]:only-of-type then use that object data for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;img[src]:only-of-type then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;object[data]:only-of-type then use that object data for photo&lt;br /&gt;
* if no explicit &amp;quot;url&amp;quot; property,&lt;br /&gt;
* then imply by:&lt;br /&gt;
** if a.h-x[href] then use href for url&lt;br /&gt;
** else if .h-x&amp;gt;a[href]:only-of-type then use that a[href] for url&lt;br /&gt;
&lt;br /&gt;
=== parse a hyperlink element for rel microformats ===&lt;br /&gt;
To parse a hyperlink element for rel microformats: (where * is the hyperlink element)&lt;br /&gt;
* if the &amp;quot;rel&amp;quot; attribute of the element is empty then exit&lt;br /&gt;
* set url to the value of the &amp;quot;href&amp;quot; attribute of the element, normalized to be an absolute URL following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;code&amp;gt;&amp;amp;lt;base&amp;amp;gt;&amp;lt;/code&amp;gt; element if any).&lt;br /&gt;
* treat the &amp;quot;rel&amp;quot; attribute of the element as a space separate set of rel values&lt;br /&gt;
* if the set of rel values does NOT have &amp;quot;alternate&amp;quot; then&lt;br /&gt;
** for each rel value (rel-value)&lt;br /&gt;
*** if there is no key rel-value in the rels hash then create it with an empty array as its value&lt;br /&gt;
*** add url to the array of the key rel-value in the rels hash&lt;br /&gt;
** end for&lt;br /&gt;
* else&lt;br /&gt;
** if there is no top level &amp;quot;alternates&amp;quot; key in the JSON, then create it with an empty array as its value&lt;br /&gt;
** add a new hash to the array with keys:&lt;br /&gt;
*** &amp;quot;url&amp;quot;: url&lt;br /&gt;
*** &amp;quot;rel&amp;quot;: the set of rel values appended with spaces, except &amp;quot;alternate&amp;quot;&lt;br /&gt;
*** &amp;quot;media&amp;quot;: the value of the &amp;quot;media&amp;quot; attribute&lt;br /&gt;
*** &amp;quot;hreflang&amp;quot;: the value of the &amp;quot;hreflang&amp;quot; attribute&lt;br /&gt;
* end if&lt;br /&gt;
&lt;br /&gt;
==== rel parse examples ====&lt;br /&gt;
Here are some examples to show how parsed rels may be reflected into the JSON (empty items key).&lt;br /&gt;
&lt;br /&gt;
E.g. parsing this markup:&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;author&amp;quot; href=&amp;quot;http://example.com/a&amp;quot;&amp;gt;author a&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;author&amp;quot; href=&amp;quot;http://example.com/b&amp;quot;&amp;gt;author b&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;in-reply-to&amp;quot; href=&amp;quot;http://example.com/1&amp;quot;&amp;gt;post 1&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;in-reply-to&amp;quot; href=&amp;quot;http://example.com/2&amp;quot;&amp;gt;post 2&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;alternate home&amp;quot;&lt;br /&gt;
   href=&amp;quot;http://example.com/fr&amp;quot;&lt;br /&gt;
   media=&amp;quot;handheld&amp;quot;&lt;br /&gt;
   hreflang=&amp;quot;fr&amp;quot;&amp;gt;French mobile homepage&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would generate this 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;rels&amp;quot;: { &lt;br /&gt;
    &amp;quot;author&amp;quot;: [ &amp;quot;http://example.com/a&amp;quot;, &amp;quot;http://example.com/b&amp;quot; ],&lt;br /&gt;
    &amp;quot;in-reply-to&amp;quot;: [ &amp;quot;http://example.com/1&amp;quot;, &amp;quot;http://example.com/2&amp;quot; ] &lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;alternates&amp;quot;: [{&lt;br /&gt;
     &amp;quot;url&amp;quot;: &amp;quot;http://example.com/fr&amp;quot;, &lt;br /&gt;
     &amp;quot;rel&amp;quot;: &amp;quot;home&amp;quot;, &lt;br /&gt;
     &amp;quot;media&amp;quot;: &amp;quot;handheld&amp;quot;, &lt;br /&gt;
     &amp;quot;hreflang&amp;quot;: &amp;quot;fr&amp;quot; &lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another parse output example can be found here:&lt;br /&gt;
* https://gist.github.com/barnabywalters/5480962&lt;br /&gt;
&lt;br /&gt;
== what do the CSS selector expressions mean ==&lt;br /&gt;
Use [http://gallery.theopalgroup.com/selectoracle/ SelectORacle] to expand any of the above CSS selector expressions into longform English prose.&lt;br /&gt;
&lt;br /&gt;
== questions ==&lt;br /&gt;
See the FAQ:&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
&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;
&amp;lt;/div&amp;gt;&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&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;
&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
* [[microformats2-parsing-brainstorming]] - for background, thinking, exploring possibilities&lt;br /&gt;
* [[microformats2-parsing-rdf]]&lt;br /&gt;
* [[microformats2-implied-properties]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=h-event&amp;diff=56856</id>
		<title>h-event</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=h-event&amp;diff=56856"/>
		<updated>2013-07-14T10:11:50Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Issue: datetime without the 'T' delimiter between date and time&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;h-event&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;h-event vcard&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;p-name fn&amp;quot;&amp;gt;[[User:Tantek|Tantek Çelik]]&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;p-role role&amp;quot;&amp;gt;Editor&amp;lt;/span&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;dfn style=&amp;quot;font-style:normal;font-weight:bold&amp;quot;&amp;gt;h-event&amp;lt;/dfn&amp;gt; is a simple, open format for publishing events on the web. h-event is one of several open [[microformats|microformat]] draft standards suitable for embedding data in HTML/HTML5.&lt;br /&gt;
&lt;br /&gt;
h-event is the [[microformats2]] update to [[hCalendar]].&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
Here is a simple event 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;h1 class=&amp;quot;p-name&amp;quot;&amp;gt;Microformats Meetup&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;From &lt;br /&gt;
    &amp;lt;time class=&amp;quot;dt-start&amp;quot; datetime=&amp;quot;2013-06-30t12:00&amp;quot;&amp;gt;30&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; June 2013, 12:00&amp;lt;/time&amp;gt;&lt;br /&gt;
    to &amp;lt;time class=&amp;quot;dt-end&amp;quot; datetime=&amp;quot;2013-06-30t18:00&amp;quot;&amp;gt;18:00&amp;lt;/time&amp;gt;&lt;br /&gt;
    at &amp;lt;span class=&amp;quot;p-location&amp;quot;&amp;gt;Some bar in SF&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;p-summary&amp;quot;&amp;gt;Get together and discuss all things microformats-related.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Get started ===&lt;br /&gt;
The class '''&amp;lt;code&amp;gt;h-event&amp;lt;/code&amp;gt;''' is a ''root class name'' that indicates the presence of an h-event.&lt;br /&gt;
&lt;br /&gt;
'''p-name''', '''dt-start''', '''dt-end''', '''p-location''', '''p-summary''', and the other h-event property class names listed below define ''properties'' of the h-event.&lt;br /&gt;
&lt;br /&gt;
See [[microformats2-parsing]] to learn more about property class names.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
h-event properties, inside an element with class '''h-event''':&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-name&amp;lt;/code&amp;gt;''' - event name (or title)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-summary&amp;lt;/code&amp;gt;''' - short summary of the event&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-start&amp;lt;/code&amp;gt;''' - datetime the event starts&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-end&amp;lt;/code&amp;gt;''' - datetime the event ends&lt;br /&gt;
* '''&amp;lt;code&amp;gt;dt-duration&amp;lt;/code&amp;gt;''' - duration of the event&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-description&amp;lt;/code&amp;gt;''' - more detailed description of the event&lt;br /&gt;
* '''&amp;lt;code&amp;gt;u-url&amp;lt;/code&amp;gt;''' - permalink for the event&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-category&amp;lt;/code&amp;gt;''' - event category(ies)/tag(s)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-location&amp;lt;/code&amp;gt;''' - where the event takes place, optionally embedded [[h-adr]] or [[h-card]] {{main|h-adr}} {{main|h-card}}&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-geo&amp;lt;/code&amp;gt;''' - geophysical coordinates of the event, optionally embedded [[h-geo]] {{main|h-geo}}&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-latitude&amp;lt;/code&amp;gt;''' - decimal latitude&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-longitude&amp;lt;/code&amp;gt;''' - decimal longitude&lt;br /&gt;
&lt;br /&gt;
Experimental properties currently in use in the wild but not (yet) part of the official h-entry spec:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-attendee&amp;lt;/code&amp;gt;''' - a person attending the event, optionally embed [[h-card]] {{main|h-card}}&lt;br /&gt;
&lt;br /&gt;
All properties are optional.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
'''h-event''' is a microformats.org draft specification. Public discussion on h-event takes place on [[h-event-feedback]], the #microformats [[irc]] channel on irc.freenode.net, and [http://microformats.org/discuss/mail/microformats-new/ microformats-new mailing list].&lt;br /&gt;
&lt;br /&gt;
h-event is ready to use and implemented in the wild, but for backwards compatibility you should also mark h-events up as classic [[hCalendar]] events.&lt;br /&gt;
&lt;br /&gt;
== Property Details ==&lt;br /&gt;
(stub, to be expanded)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;p-location&amp;lt;/code&amp;gt; is typically a physical address, optionally marked up with [[h-adr]], for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=html4strict&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;p-adr h-adr&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;17 Austerstræti&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;Reykjavík&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;p-country-name&amp;quot;&amp;gt;Iceland&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
Reserved properties:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-organizer&amp;lt;/code&amp;gt;''' - a person (co-)organizing the event, optionally embed [[h-card]] {{main|h-card}}&lt;br /&gt;
&lt;br /&gt;
== Examples in the wild ==&lt;br /&gt;
Real world in the wild examples:&lt;br /&gt;
&lt;br /&gt;
* ... add uses of h-event you see in the wild here.&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://tantek.com/ Tantek Çelik] uses h-event on his home page&lt;br /&gt;
* [http://tantek.com/presentations/2012/06/microformats microformats.org at 7 years] presentation with h-event&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 [[microformats2]] h-event and h-card markup&lt;br /&gt;
* WebMaker by Mozilla has h-event 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;
* [http://indiewebcamp.com IndieWebCamp] has [[microformats2]] h-event markup with embedded h-cards for the organizers and the location.&lt;br /&gt;
* [https://wiki.mozilla.org/Events Mozilla Events] page has [[microformats2]] h-event markup with attendees marked up with h-card.&lt;br /&gt;
&lt;br /&gt;
See [[microformats2#Examples_in_the_wild|microformats2 examples in the wild]] for more&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{h-spec-section-validating}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Backward Compatibility ==&lt;br /&gt;
=== Publisher Compatibility ===&lt;br /&gt;
For backward compatibility, you may wish to use classic [[hCalendar]] classnames in addition to the more future-proof h-event properties, 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 vevent&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1 class=&amp;quot;p-name summary&amp;quot;&amp;gt;Some great event&amp;lt;/h1&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;
=== Parser Compatibility ===&lt;br /&gt;
Microformats parsers {{should}} detect the following root class name and property names. A microformats2 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;
== Background ==&lt;br /&gt;
This work is based on the existing [[hCalendar]] and [[iCalendar]] specifications.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
(stub, expand)&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[h-adr]]&lt;br /&gt;
* [[h-geo]]&lt;br /&gt;
* [[h-card]]&lt;br /&gt;
* [[hCalendar]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Draft Specifications]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=56855</id>
		<title>microformats2-parsing</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=56855"/>
		<updated>2013-07-14T09:57:24Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Encoding properties&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the goals of [[microformats2]] is to greatly simplify parsing of microformats, in particular, by making parsing independent of any one vocabulary. This page briefly documents the microformats2 parsing algorithm for doing so.&lt;br /&gt;
== implementations ==&lt;br /&gt;
{{main|microformats2#Implementations}}&lt;br /&gt;
There are open source [[microformats2#Implementations|microformats2 parsers]] available for Javascript, node.js, PHP, and Ruby.&lt;br /&gt;
&lt;br /&gt;
== algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== parse a document for microformats ===&lt;br /&gt;
To parse a document for microformats:&lt;br /&gt;
* start with an empty JSON &amp;quot;items&amp;quot; array and &amp;quot;rels&amp;quot; hash: &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;rels&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* parse the root element for class microformats, adding to the JSON items array accordingly&lt;br /&gt;
* parse all hyperlink (&amp;lt;code&amp;gt;&amp;amp;lt;link&amp;gt; &amp;amp;lt;a&amp;gt;&amp;lt;/code&amp;gt;) elements for rel microformats, adding to the JSON rels hash accordingly&lt;br /&gt;
* return the resulting JSON&lt;br /&gt;
Parsers may simultaneously parse the document for both class and rel microformats (e.g. in a single tree traversal).&lt;br /&gt;
&lt;br /&gt;
=== parse an element for class microformats ===&lt;br /&gt;
To parse an element for class microformats:&lt;br /&gt;
* parse element class for root class name(s) &amp;quot;h-x&amp;quot; (and backcompat)&lt;br /&gt;
** if not found, parse child elements for microformats (depth first, doc order)&lt;br /&gt;
** else if found, start parsing a new microformat&lt;br /&gt;
*** parse child elements (document order) by:&lt;br /&gt;
**** parse a child element for properties (p-,u-,dt-,e-)&lt;br /&gt;
***** add properties found to current microformat&lt;br /&gt;
**** parse a child element for microformats (recurse)&lt;br /&gt;
***** if that child element itself has a microformat and is a property element, add it into the array of values for that property&lt;br /&gt;
***** else add found elements that are microformats to the &amp;quot;children&amp;quot; array&lt;br /&gt;
*** imply properties for the found microformat (see below)&lt;br /&gt;
&lt;br /&gt;
=== parse an element for properties ===&lt;br /&gt;
==== parsing a p- property ====&lt;br /&gt;
To parse an element for a p-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* if abbr.p-x[title], then return the title attribute&lt;br /&gt;
* else if data.p-x[value], then return the value attribute&lt;br /&gt;
* else if img.p-x[alt] or area.p-x[alt], then return the alt attribute&lt;br /&gt;
* else return the innertext of the element, replacing any nested &amp;lt;code&amp;gt;&amp;amp;lt;img&amp;gt;&amp;lt;/code&amp;gt; elements with their &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt; attribute if present, or otherwise their &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; attribute if present.&lt;br /&gt;
&lt;br /&gt;
==== parsing a u- property ====&lt;br /&gt;
To parse an element for a u-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* if a.u-x[href] or area.u-x[href], then get the href attribute&lt;br /&gt;
* else if img.u-x[src], then get the src attribute&lt;br /&gt;
* else if object.u-x[data], then get the data attribute&lt;br /&gt;
* if there is a gotten value, return the normalized absolute URL of it, following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;code&amp;gt;&amp;amp;lt;base&amp;amp;gt;&amp;lt;/code&amp;gt; element if any).&lt;br /&gt;
* else if abbr.u-x[title], then return the title attribute&lt;br /&gt;
* else if data.u-x[value], then return the value attribute&lt;br /&gt;
* else return the innertext of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing a dt- property ====&lt;br /&gt;
To parse an element for a dt-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]] including the date and time parsing rules, if a value is found then return it.&lt;br /&gt;
* if time.dt-x[datetime] or ins.dt-x[datetime] or del.dt-x[datetime], then return the datetime attribute&lt;br /&gt;
* else if abbr.dt-x[title], then return the title attribute&lt;br /&gt;
* else if data.dt-x[value], then return the value attribute&lt;br /&gt;
* else return the innertext of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing an e- property ====&lt;br /&gt;
To parse an element for a e-x property value:&lt;br /&gt;
* return the innerHTML of the element by using the [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#serializing-html-fragments HTML spec: Serializing HTML Fragments algorithm].&lt;br /&gt;
&lt;br /&gt;
==== parsing for implied properties ====&lt;br /&gt;
To imply properties: (where h-x is the root microformat element being parsed)&lt;br /&gt;
* if no explicit &amp;quot;name&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x then use its alt attribute for name&lt;br /&gt;
** else if abbr.h-x[title] then use its title attribute for name&lt;br /&gt;
** else if .h-x&amp;gt;img:only-child then use that img alt for name&lt;br /&gt;
** else if .h-x&amp;gt;abbr:only-child[title] then use that abbr title for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;img:only-child use that img alt for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;abbr:only-child[title] use that abbr title for name&lt;br /&gt;
** else use the innertext of the .h-x for name&lt;br /&gt;
** drop leading &amp;amp; trailing white-space from name, including nbsp&lt;br /&gt;
* if no explicit &amp;quot;photo&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x[src] then use src for photo&lt;br /&gt;
** else if object.h-x[data] then use data for photo&lt;br /&gt;
** else if .h-x&amp;gt;img[src]:only-of-type then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;object[data]:only-of-type then use that object data for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;img[src]:only-of-type then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;object[data]:only-of-type then use that object data for photo&lt;br /&gt;
* if no explicit &amp;quot;url&amp;quot; property,&lt;br /&gt;
* then imply by:&lt;br /&gt;
** if a.h-x[href] then use href for url&lt;br /&gt;
** else if .h-x&amp;gt;a[href]:only-of-type then use that a[href] for url&lt;br /&gt;
&lt;br /&gt;
=== parse a hyperlink element for rel microformats ===&lt;br /&gt;
To parse a hyperlink element for rel microformats: (where * is the hyperlink element)&lt;br /&gt;
* if the &amp;quot;rel&amp;quot; attribute of the element is empty then exit&lt;br /&gt;
* set url to the value of the &amp;quot;href&amp;quot; attribute of the element, normalized to be an absolute URL following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and first &amp;lt;code&amp;gt;&amp;amp;lt;base&amp;amp;gt;&amp;lt;/code&amp;gt; element if any).&lt;br /&gt;
* treat the &amp;quot;rel&amp;quot; attribute of the element as a space separate set of rel values&lt;br /&gt;
* if the set of rel values does NOT have &amp;quot;alternate&amp;quot; then&lt;br /&gt;
** for each rel value (rel-value)&lt;br /&gt;
*** if there is no key rel-value in the rels hash then create it with an empty array as its value&lt;br /&gt;
*** add url to the array of the key rel-value in the rels hash&lt;br /&gt;
** end for&lt;br /&gt;
* else&lt;br /&gt;
** if there is no top level &amp;quot;alternates&amp;quot; key in the JSON, then create it with an empty array as its value&lt;br /&gt;
** add a new hash to the array with keys:&lt;br /&gt;
*** &amp;quot;url&amp;quot;: url&lt;br /&gt;
*** &amp;quot;rel&amp;quot;: the set of rel values appended with spaces, except &amp;quot;alternate&amp;quot;&lt;br /&gt;
*** &amp;quot;media&amp;quot;: the value of the &amp;quot;media&amp;quot; attribute&lt;br /&gt;
*** &amp;quot;hreflang&amp;quot;: the value of the &amp;quot;hreflang&amp;quot; attribute&lt;br /&gt;
* end if&lt;br /&gt;
&lt;br /&gt;
==== rel parse examples ====&lt;br /&gt;
Here are some examples to show how parsed rels may be reflected into the JSON (empty items key).&lt;br /&gt;
&lt;br /&gt;
E.g. parsing this markup:&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;author&amp;quot; href=&amp;quot;http://example.com/a&amp;quot;&amp;gt;author a&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;author&amp;quot; href=&amp;quot;http://example.com/b&amp;quot;&amp;gt;author b&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;in-reply-to&amp;quot; href=&amp;quot;http://example.com/1&amp;quot;&amp;gt;post 1&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;in-reply-to&amp;quot; href=&amp;quot;http://example.com/2&amp;quot;&amp;gt;post 2&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;alternate home&amp;quot;&lt;br /&gt;
   href=&amp;quot;http://example.com/fr&amp;quot;&lt;br /&gt;
   media=&amp;quot;handheld&amp;quot;&lt;br /&gt;
   hreflang=&amp;quot;fr&amp;quot;&amp;gt;French mobile homepage&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would generate this 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;rels&amp;quot;: { &lt;br /&gt;
    &amp;quot;author&amp;quot;: [ &amp;quot;http://example.com/a&amp;quot;, &amp;quot;http://example.com/b&amp;quot; ],&lt;br /&gt;
    &amp;quot;in-reply-to&amp;quot;: [ &amp;quot;http://example.com/1&amp;quot;, &amp;quot;http://example.com/2&amp;quot; ] &lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;alternates&amp;quot;: [{&lt;br /&gt;
     &amp;quot;url&amp;quot;: &amp;quot;http://example.com/fr&amp;quot;, &lt;br /&gt;
     &amp;quot;rel&amp;quot;: &amp;quot;home&amp;quot;, &lt;br /&gt;
     &amp;quot;media&amp;quot;: &amp;quot;handheld&amp;quot;, &lt;br /&gt;
     &amp;quot;hreflang&amp;quot;: &amp;quot;fr&amp;quot; &lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another parse output example can be found here:&lt;br /&gt;
* https://gist.github.com/barnabywalters/5480962&lt;br /&gt;
&lt;br /&gt;
== what do the CSS selector expressions mean ==&lt;br /&gt;
Use [http://gallery.theopalgroup.com/selectoracle/ SelectORacle] to expand any of the above CSS selector expressions into longform English prose.&lt;br /&gt;
&lt;br /&gt;
== questions ==&lt;br /&gt;
See the FAQ:&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
&lt;br /&gt;
== issues ==&lt;br /&gt;
&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;
&amp;lt;/div&amp;gt;&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&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;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
* [[microformats2-parsing-brainstorming]] - for background, thinking, exploring possibilities&lt;br /&gt;
* [[microformats2-parsing-rdf]]&lt;br /&gt;
* [[microformats2-implied-properties]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=49866</id>
		<title>microformats2-parsing</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2-parsing&amp;diff=49866"/>
		<updated>2013-02-09T11:04:21Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Added an issue to parsing rules&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats2 parsing&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the goals of [[microformats2]] is to greatly simplify parsing of microformats, in particular, by making parsing independent of any one vocabulary. This page briefly documents the microformats2 parsing algorithm for doing so.&lt;br /&gt;
&lt;br /&gt;
== parsing algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== parse a document for microformats ===&lt;br /&gt;
To parse a document for microformats:&lt;br /&gt;
* start with an empty JSON items array&lt;br /&gt;
* parse the root element for microformats&lt;br /&gt;
&lt;br /&gt;
=== parse an element for microformats ===&lt;br /&gt;
To parse an element for microformats:&lt;br /&gt;
* parse element class for root class name(s) &amp;quot;h-x&amp;quot; (and backcompat)&lt;br /&gt;
** if found, start parsing a new microformat&lt;br /&gt;
*** parse contained elements for properties (depth first, doc order)&lt;br /&gt;
**** parse an element for microformats (recurse)&lt;br /&gt;
*** imply properties (see below)&lt;br /&gt;
* parse element class for properties (p-,u-,dt-,e-)&lt;br /&gt;
* add properties found (with any nested microformats) to current microformat&lt;br /&gt;
&lt;br /&gt;
==== parsing a p- property ====&lt;br /&gt;
To parse an element for a p-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* if abbr.p-x[title], then return the title attribute&lt;br /&gt;
* else if data.p-x[value], then return the value attribute&lt;br /&gt;
* else if br.p-x or hr.p-x, then return &amp;quot;&amp;quot; (empty string)&lt;br /&gt;
* else if img.p-x[alt] or area.p-x[alt], then return the alt attribute&lt;br /&gt;
* else return the innertext of the element.&lt;br /&gt;
 &lt;br /&gt;
==== parsing a u- property ====&lt;br /&gt;
To parse an element for a u-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]], if a value is found then return it.&lt;br /&gt;
* if a.u-x[href] or area.u-x[href], then get the href attribute&lt;br /&gt;
* else if img.u-x[src], then get the src attribute&lt;br /&gt;
* else if object.u-x[data], then get the data attribute&lt;br /&gt;
* if there is a gotten value, return the normalized absolute URL of it, following the containing document's language's rules for resolving relative URLs (e.g. in HTML, use the current URL context as determined by the page, and any preceding &amp;lt;code&amp;gt;&amp;amp;lt;base&amp;amp;gt;&amp;lt;/code&amp;gt; elements).&lt;br /&gt;
* else if abbr.u-x[title], then return the title attribute&lt;br /&gt;
* else if data.u-x[value], then return the value attribute&lt;br /&gt;
* else return the innertext of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing a dt- property ====&lt;br /&gt;
To parse an element for a dt-x property value:&lt;br /&gt;
* parse the element for the [[value-class-pattern]] including the date and time parsing rules, if a value is found then return it.&lt;br /&gt;
* if time.dt-x[datetime] or ins.dt-x[datetime] or del.dt-x[datetime], then return the datetime attribute&lt;br /&gt;
* else if abbr.dt-x[title], then return the title attribute&lt;br /&gt;
* else if data.dt-x[value], then return the value attribute&lt;br /&gt;
* else return the innertext of the element.&lt;br /&gt;
&lt;br /&gt;
==== parsing an e- property ====&lt;br /&gt;
To parse an element for a e-x property value:&lt;br /&gt;
* return the innerHTML of the element by using the [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#serializing-html-fragments HTML spec: Serializing HTML Fragments algorithm].&lt;br /&gt;
&lt;br /&gt;
=== parsing for implied properties ===&lt;br /&gt;
To imply properties: (where h-x is the root microformat element being parsed)&lt;br /&gt;
* if no explicit &amp;quot;name&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x then use its alt attribute for name&lt;br /&gt;
** else if abbr.h-x[title] then use its title attribute for name&lt;br /&gt;
** else if .h-x&amp;gt;img:only-node then use that img alt for name&lt;br /&gt;
** else if .h-x&amp;gt;abbr:only-node[title] then use that abbr title for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-node&amp;gt;img:only-node use that img alt for name&lt;br /&gt;
** else if .h-x&amp;gt;:only-node&amp;gt;abbr:only-node[title] use that abbr title for name&lt;br /&gt;
** else use the innertext of the .h-x for name&lt;br /&gt;
** drop leading &amp;amp; trailing white-space from name, including nbsp&lt;br /&gt;
* if no explicit &amp;quot;photo&amp;quot; property, &lt;br /&gt;
* then imply by:&lt;br /&gt;
** if img.h-x[src] then use src for photo&lt;br /&gt;
** else if object.h-x[data] then use data for photo&lt;br /&gt;
** else if .h-x&amp;gt;img[src]:only-of-type then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;object[data]:only-of-type then use that object data for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;img[src]:only-of-type then use that img src for photo&lt;br /&gt;
** else if .h-x&amp;gt;:only-child&amp;gt;object[data]:only-of-type then use that object data for photo&lt;br /&gt;
* if no explicit &amp;quot;url&amp;quot; property,&lt;br /&gt;
* then imply by:&lt;br /&gt;
** if a.h-x[href] then use href for url&lt;br /&gt;
** else if .h-x&amp;gt;a[href]:only-of-type then use that a[href] for url&lt;br /&gt;
&lt;br /&gt;
== what do the CSS selector expressions mean ==&lt;br /&gt;
Use [http://gallery.theopalgroup.com/selectoracle/ SelectORacle] to expand any of the above CSS selector expressions into longform English prose.&lt;br /&gt;
&lt;br /&gt;
== questions ==&lt;br /&gt;
See the FAQ:&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
&lt;br /&gt;
== issues ==&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[microformats2-parsing-faq]]&lt;br /&gt;
* [[microformats2-parsing-brainstorming]] - for background, thinking, exploring possibilities&lt;br /&gt;
* [[microformats2-parsing-rdf]]&lt;br /&gt;
* [[microformats2-implied-properties]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2&amp;diff=49588</id>
		<title>microformats2</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2&amp;diff=49588"/>
		<updated>2013-01-16T11:49:53Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* h-review */ corrected a couple of errors&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;
&lt;br /&gt;
Welcome to the microformats 2 home page.&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Microformats 2 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), with the following simplifications:&lt;br /&gt;
&lt;br /&gt;
# '''prefixes for which class names''' are used for microformats, those that start with 'h-' 'p-' 'u-' 'dt-', 'e-' = '''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 datetime 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''' for all microformats (hierarchical data uses nested microformats). 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''' - for common simple markup patterns, just a microformat root class name can imply a few generic properties - name, url, photo. For example:&lt;br /&gt;
&lt;br /&gt;
=== simple microformats 2 examples ===&lt;br /&gt;
Here are a few simple microformats 2 examples the demonstrate a most of the changes, along with canonical [[JSON]].&lt;br /&gt;
&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;
* 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;
* 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;
* More detailed person (based on real world microformats-2 example[https://webfwd.org/about/experts/]).&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;
== 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;
&lt;br /&gt;
=== h-adr ===&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;
&lt;br /&gt;
=== h-card ===&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-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;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-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 &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 &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;
* ...&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;
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;
(*)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 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;
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;
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;
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-recipe ===&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 vcard in the absence of h-card&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;
&lt;br /&gt;
=== h-review ===&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;''' - the name of the review&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-item&amp;lt;/code&amp;gt;''' - thing been reviewed i.e. product, business, event, person, place, website, url etc&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-reviewer&amp;lt;/code&amp;gt;''' - the 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;''' - a value from 1-5 indicating a rating for the item&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-best&amp;lt;/code&amp;gt;'''  - used to define a rating scale higher than 5. Resets the upmost value&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-worst&amp;lt;/code&amp;gt;'''  - used to define a rating scale higher than 5. Resets the lowermost value&lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-description&amp;lt;/code&amp;gt;''' - the full text representing the written opinion of the reviewer&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-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;hrecipe&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;item&amp;lt;/code&amp;gt; - including compat root vcard|vevent in the absence of h-card|h-event&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;
&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;, &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt; 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-resume ===&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;
=== 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;
* 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;
* write a simple tutorial for creating/getting started with microformats-2 markup for new content&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;
&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;
== 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;
* [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;
* [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;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
Parsers and other implementations of microformats2, typically open source:&lt;br /&gt;
&lt;br /&gt;
* '''microformat-node''' Node.js microformats2 parser&lt;br /&gt;
** live: http://microformat2-node.jit.su/&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: with textarea entry on: http://waterpigs.co.uk/php-mf2/&lt;br /&gt;
&lt;br /&gt;
== Presentations ==&lt;br /&gt;
Presentations about microformats2:&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;
== 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;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2&amp;diff=49587</id>
		<title>microformats2</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2&amp;diff=49587"/>
		<updated>2013-01-16T11:47:04Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* h-review */ Added h-review section. This needs review and comment&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;
&lt;br /&gt;
Welcome to the microformats 2 home page.&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Microformats 2 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), with the following simplifications:&lt;br /&gt;
&lt;br /&gt;
# '''prefixes for which class names''' are used for microformats, those that start with 'h-' 'p-' 'u-' 'dt-', 'e-' = '''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 datetime 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''' for all microformats (hierarchical data uses nested microformats). 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''' - for common simple markup patterns, just a microformat root class name can imply a few generic properties - name, url, photo. For example:&lt;br /&gt;
&lt;br /&gt;
=== simple microformats 2 examples ===&lt;br /&gt;
Here are a few simple microformats 2 examples the demonstrate a most of the changes, along with canonical [[JSON]].&lt;br /&gt;
&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;
* 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;
* 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;
* More detailed person (based on real world microformats-2 example[https://webfwd.org/about/experts/]).&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;
== 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;
&lt;br /&gt;
=== h-adr ===&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;
&lt;br /&gt;
=== h-card ===&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-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;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-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 &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 &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;
* ...&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;
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;
(*)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 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;
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;
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;
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-recipe ===&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 vcard in the absence of h-card&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;
&lt;br /&gt;
=== h-review ===&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;''' - the name of the recipe&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-item&amp;lt;/code&amp;gt;''' - thing been reviewed i.e. product, business, event, person, place, website, url etc&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-reviewer&amp;lt;/code&amp;gt;''' - the 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;''' - a value from 1-5 indicating a rating for the item&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-best&amp;lt;/code&amp;gt;'''  - used to define a rating scale higher than 5. Resets the upmost value&lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-worst&amp;lt;/code&amp;gt;'''  - used to define a rating scale higher than 5. Resets the lowermost value&lt;br /&gt;
* '''&amp;lt;code&amp;gt;e-description&amp;lt;/code&amp;gt;''' - the full text representing the written opinion of the reviewer&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-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;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;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;item&amp;lt;/code&amp;gt; - including compat root vcard|vevent in the absence of h-card|h-event&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;
&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;, &amp;lt;code&amp;gt;permalink&amp;lt;/code&amp;gt; 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-resume ===&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;
=== 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;
* 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;
* write a simple tutorial for creating/getting started with microformats-2 markup for new content&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;
&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;
== 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;
* [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;
* [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;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
Parsers and other implementations of microformats2, typically open source:&lt;br /&gt;
&lt;br /&gt;
* '''microformat-node''' Node.js microformats2 parser&lt;br /&gt;
** live: http://microformat2-node.jit.su/&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: with textarea entry on: http://waterpigs.co.uk/php-mf2/&lt;br /&gt;
&lt;br /&gt;
== Presentations ==&lt;br /&gt;
Presentations about microformats2:&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;
== 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;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2&amp;diff=49553</id>
		<title>microformats2</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2&amp;diff=49553"/>
		<updated>2013-01-15T12:42:38Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* h-recipe */ Added a h-recipe section. This needs review and comment&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;
&lt;br /&gt;
Welcome to the microformats 2 home page.&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Microformats 2 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), with the following simplifications:&lt;br /&gt;
&lt;br /&gt;
# '''prefixes for which class names''' are used for microformats, those that start with 'h-' 'p-' 'u-' 'dt-', 'e-' = '''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 datetime 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''' for all microformats (hierarchical data uses nested microformats). 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''' - for common simple markup patterns, just a microformat root class name can imply a few generic properties - name, url, photo. For example:&lt;br /&gt;
&lt;br /&gt;
=== simple microformats 2 examples ===&lt;br /&gt;
Here are a few simple microformats 2 examples the demonstrate a most of the changes, along with canonical [[JSON]].&lt;br /&gt;
&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;
* 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;
* 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;
* More detailed person (based on real world microformats-2 example[https://webfwd.org/about/experts/]).&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;
== 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;
&lt;br /&gt;
=== h-adr ===&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;
&lt;br /&gt;
=== h-card ===&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-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;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-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 &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 &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;
* ...&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;
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;
(*)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 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;
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;
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;
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-recipe ===&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;e-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;p-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;u- photo&amp;lt;/code&amp;gt;'''  - provides a short introduction &lt;br /&gt;
* '''&amp;lt;code&amp;gt;p-author&amp;lt;/code&amp;gt;''' - the person who wrote the recipe in &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; - parse as '''e-'''&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;&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 vcard in the absence of h-card&lt;br /&gt;
* &amp;lt;code&amp;gt;nutrition&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note:  [[hrecipe|hrecipe]] has a number of experimental properties which have real world adoption due to rich snippets support of hecipe theses are: summary, author, published and nutrition&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== h-resume ===&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;
=== 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;
* 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;
* write a simple tutorial for creating/getting started with microformats-2 markup for new content&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;
&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;
== 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;
* [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;
* [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;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
Parsers and other implementations of microformats2, typically open source:&lt;br /&gt;
&lt;br /&gt;
* '''microformat-node''' Node.js microformats2 parser&lt;br /&gt;
** live: http://microformat2-node.jit.su/&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: with textarea entry on: http://waterpigs.co.uk/php-mf2/&lt;br /&gt;
&lt;br /&gt;
== Presentations ==&lt;br /&gt;
Presentations about microformats2:&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;
== 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;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2&amp;diff=49552</id>
		<title>microformats2</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=microformats2&amp;diff=49552"/>
		<updated>2013-01-15T11:57:58Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: /* h-event */ add duration property to list has it is enough used in h-resume ie Linked-in and 60 madgex sites&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;
&lt;br /&gt;
Welcome to the microformats 2 home page.&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Microformats 2 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), with the following simplifications:&lt;br /&gt;
&lt;br /&gt;
# '''prefixes for which class names''' are used for microformats, those that start with 'h-' 'p-' 'u-' 'dt-', 'e-' = '''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 datetime 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''' for all microformats (hierarchical data uses nested microformats). 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''' - for common simple markup patterns, just a microformat root class name can imply a few generic properties - name, url, photo. For example:&lt;br /&gt;
&lt;br /&gt;
=== simple microformats 2 examples ===&lt;br /&gt;
Here are a few simple microformats 2 examples the demonstrate a most of the changes, along with canonical [[JSON]].&lt;br /&gt;
&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;
* 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;
* 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;
* More detailed person (based on real world microformats-2 example[https://webfwd.org/about/experts/]).&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;
== 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;
&lt;br /&gt;
=== h-adr ===&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;
&lt;br /&gt;
=== h-card ===&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-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;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-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 &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 &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;
* ...&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;
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;
(*)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 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;
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;
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;
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-resume ===&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;
=== 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;
* 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;
* write a simple tutorial for creating/getting started with microformats-2 markup for new content&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;
&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;
== 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;
* [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;
* [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;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
Parsers and other implementations of microformats2, typically open source:&lt;br /&gt;
&lt;br /&gt;
* '''microformat-node''' Node.js microformats2 parser&lt;br /&gt;
** live: http://microformat2-node.jit.su/&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: with textarea entry on: http://waterpigs.co.uk/php-mf2/&lt;br /&gt;
&lt;br /&gt;
== Presentations ==&lt;br /&gt;
Presentations about microformats2:&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;
== 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;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=hresume-examples-in-wild&amp;diff=47471</id>
		<title>hresume-examples-in-wild</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=hresume-examples-in-wild&amp;diff=47471"/>
		<updated>2012-09-21T11:29:22Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Added madgex sites that use hResume&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;hResume examples in the wild&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
;shortlink&lt;br /&gt;
:http://tr.im/hrese&lt;br /&gt;
This page is '''informative'''.&lt;br /&gt;
&lt;br /&gt;
The following sites have published [[hresume|hResumes]], and thus are a great place to start for anyone looking for examples &amp;quot;in the wild&amp;quot; to try parsing, indexing, organizing, etc.&lt;br /&gt;
&lt;br /&gt;
== New Examples ==&lt;br /&gt;
If you have an hResume on your own page, feel free to add it to the '''top''' of this list. Please be sure to include at least one URL to a page on your site that includes actual [[hresume|hResume]] markup. Examples added without a URL to a page with hResume markup may be removed.&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
     Please add new examples to the *top* of this section.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following job board sites import and use hResume mark-up&lt;br /&gt;
* [http://www.accountancyagejobs.com/ AccountancyAgeJobs]&lt;br /&gt;
* [http://www.actuaryjobs.co.uk/ Actuary Jobs]&lt;br /&gt;
* [http://www.jobsforthegames.co.uk/ Jobs for The Games]&lt;br /&gt;
* [http://www.advisercareers.co.uk/ AdviserCareers.com]&lt;br /&gt;
* [http://jobs.brandrepublic.com/ Brand Republic Jobs]&lt;br /&gt;
* [http://www.broadcastjobs.co.uk/ BroadcastJobs]&lt;br /&gt;
* [http://www.campaignjobs.asia/ CampaignJobs]&lt;br /&gt;
* [http://www.careersinaudit.com/ CareersinAudit.com]&lt;br /&gt;
* [http://www.careersinconstruction.com/ CareersInConstruction.com]&lt;br /&gt;
* [http://jobs.clickz.com/ ClickZ Jobs]&lt;br /&gt;
* [http://www.contractjobs.com/	contractjobs.com]&lt;br /&gt;
* [http://www.cypnowjobs.co.uk/	Children and Young People Now Jobs]&lt;br /&gt;
* [http://www.drapersjobs.com/ Drapers Jobs]&lt;br /&gt;
* [http://www.endsjobsearch.co.uk/ Ends Job Search]&lt;br /&gt;
* [http://www.eventjobsearch.co.uk/	Event Job Search]&lt;br /&gt;
* [http://jobs.foodnavigator-usa.com/ FoodNavigator Jobs USA]&lt;br /&gt;
* [http://jobs.guardian.co.uk/ Guardian Jobs]&lt;br /&gt;
* [http://jobs.gponline.com/ GP Jobs]&lt;br /&gt;
* [http://www.horticulturejobs.co.uk/ Horticulture Jobs]&lt;br /&gt;
* [http://www.hsjjobs.com/ HSJjobs]&lt;br /&gt;
* [http://www.ifaonlinejobs.co.uk/ ifaonlinejobs.co.uk]&lt;br /&gt;
* [http://ijobs.independent.co.uk/ iJobs]&lt;br /&gt;
* [http://www.insurancejobs.co.uk/ Insurance jobs]&lt;br /&gt;
* [http://www.jobsincredit.com/	Jobs In Credit]&lt;br /&gt;
* [http://www.jobsinrisk.com/ Jobs In Risk]&lt;br /&gt;
* [http://www.legalweekjobs.com/ LegalWeekJobs.com]&lt;br /&gt;
* [http://www.lgcjobs.com/ LGCjobs]&lt;br /&gt;
* [http://jobs.londonlovesbusiness.com/	London Loves Jobs]&lt;br /&gt;
* [http://www.managementtodayjobs.com/ Management Today Jobs]&lt;br /&gt;
* [http://www.mediaweekjobs.co.uk/ Media Week Jobs]&lt;br /&gt;
* [http://www.ncejobs.co.uk/ NCEjobs]&lt;br /&gt;
* [http://www.nurseryworldjobs.co.uk/ Nursery World Jobs]&lt;br /&gt;
* [http://www.nursingtimesjobs.com/	NursingTimesJobs]&lt;br /&gt;
* [http://www.onlymarketingjobs.com/ Only Marketing Jobs]&lt;br /&gt;
* [http://jobs.planningresource.co.uk/ Planning Jobs]&lt;br /&gt;
* [http://jobs.printweek.com/ PrintWeek Jobs]&lt;br /&gt;
* [http://www.professionalpensionsjobs.com/	ProfessionalPensionsJobs]&lt;br /&gt;
* [http://jobs.silu.com/ Silu]&lt;br /&gt;
* [http://www.prweekjobs.co.uk/	PR Week Jobs]&lt;br /&gt;
* [http://jobs.planningresource.co.uk/ Regeneration Jobs]&lt;br /&gt;
* [http://www.retailweekjobs.com/ RetailWeekjobs]&lt;br /&gt;
* [http://www.revolutionjobs.co.uk/	Revolution Jobs]&lt;br /&gt;
* [http://www.scienceandhealthcarejobs.com/	Scienceandhealthcarejobs.com]&lt;br /&gt;
* [http://jobs.startribune.com/ Star Tribune Jobs]&lt;br /&gt;
* [http://jobs.stv.tv/ stvjobs.com]&lt;br /&gt;
* [http://jobs.telegraph.co.uk/ Telegraph Jobs]&lt;br /&gt;
* [http://jobs.theengineer.co.uk/ jobs.theengineer.co.uk]&lt;br /&gt;
* [http://jobs.thelawyer.com/ The Lawyer Jobs]&lt;br /&gt;
* [http://jobs.thirdsector.co.uk/ Third Sector Jobs]&lt;br /&gt;
* [http://www.windindustryjobs.com/ Wind Industry Jobs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://veerasundar.com Veera Sundar] is Web Developer and has used hResume in his [http://veerasundar.com/resume resume]. See also [http://veerasundar.com/blog/2012/06/redesigning-my-resume-with-html5-css3-and-hresume/ his blog post about it].&lt;br /&gt;
* [http://leek.github.com Chris Jones] is a certified Web Developer and has his resume marked up with hResume, hCard, hCal, HTML5 and CSS3.&lt;br /&gt;
* [http://stevoland.com Stephen J. Collings] is a Web Developer and has marked up his [http://stevoland.com/cv CV] with hResume, HTML5 and CSS3.&lt;br /&gt;
* [http://www.lippuner.ca/ Jonas Lippuner] has marked up his academic CV with hResume.&lt;br /&gt;
* [http://sethmohit.com Mohit Seth] is a UI Developer and has used hResume with HTML5 on his [http://sethmohit.com/site/html/resume.html resume].&lt;br /&gt;
* [http://markus.meichau.de/ Markus Meichau] has marked up his CV with hResume&lt;br /&gt;
* [http://www.memero.org/ Tommaso Romito] has marked up his [http://www.memero.org/job/ Resume] with hResume, HTML5 and CSS3.&lt;br /&gt;
* [http://johanramon.fr/ Johan Ramon] uses hResume on his resume.&lt;br /&gt;
* [http://home.comcast.net/~joebowbeer/main/resume.html Joe Bowbeer] tries his hand at hResume, HTML5, &amp;amp;amp; CSS3.&lt;br /&gt;
* [http://www.tobymole.x10hosting.com/ Toby Mole] has marked up his CV using hResume.&lt;br /&gt;
* [[User:cheruvp|Prince Cheruvathur]] has marked up his [http://princec.viviti.com/files/documents/Prince-Cheruvathur.htm r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume.&lt;br /&gt;
* [http://www.benpalmer.info/ Ben Palmer] is a front end developer and has marked up his [http://www.benpalmer.info/cv/ CV] with hResume, HTML5 and CSS3.&lt;br /&gt;
* [http://russ.porosky.com/ Russ Porosky] is a web application developer and has marked up his [http://russ.porosky.com/ resume] with hResume, HTML5 and CSS3.&lt;br /&gt;
* [[User:Bgy|Boris Guéry]] is a web developper and has marked up his [http://bgy.bsink.org/cv/ CV] with hResume, HTML5, and CSS3.&lt;br /&gt;
* [[User:gevason|Geoff Evason]] has marked up his [http://geoff.evason.name/cv/ CV] with hResume, HTML5, and CSS3.&lt;br /&gt;
* [[User:jdcravens|Jesse Cravens]] has marked up his [http://jessecravens.com/resume front end engineer resume] with hResume.&lt;br /&gt;
* [[User:Gaetan|Gaetan Riou]] has marked up his [http://www.mrgaetan.eu/cv/gaetan-riou-cv.html CV] with hResume.&lt;br /&gt;
* [[User:Brev|Brev Patterson]] has marked up his [http://brev.name/resume/brev-resume.html web developer resume] with hResume.&lt;br /&gt;
* [[User:billie|Billie Pate]] has marked up her [http://www.billiepate.com/cv r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume in HTML 5 &amp;amp;amp; CSS 3.&lt;br /&gt;
* [[User:JohnPiasetzki|John Piasetzki]] has marked up his [http://john.piasetzki.name r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume.&lt;br /&gt;
* [http://swy.me/ Stephen Way] has marked up his [http://swy.me/resume/ r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume &amp;amp;amp; CSS3 Magic.&lt;br /&gt;
* [http://alexsolution.com/ Alex Konioukhov] has marked up his [http://alexsolution.com/resume/ r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume.&lt;br /&gt;
* [http://jayrobinson.org/ Jay Robinson] has marked up his [http://jayrobinson.org/resume/ r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume.&lt;br /&gt;
* [http://careers.stackoverflow.com/ Stack Overflow] public CV hosting service for programmers publishes numerous hResumes.  [http://careers.stackoverflow.com/klmr Stack Overflow CV example] Dec 2009.&lt;br /&gt;
* [http://www.xing.com/ Xing] Public Profiles are all marked up with hResume. [http://www.xing.com/profile/Matthias_Pfefferle Xing Public Profile Example].&lt;br /&gt;
* [http://cv.antix.co.uk/ant Anthony Johnston hResume] created by the [http://cv.antix.co.uk Antix CV Builder]&lt;br /&gt;
* [http://k-create.com/ Kris Hedstrom] has marked up his pretty [http://k-create.com/resume/ r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume.&lt;br /&gt;
* [http://a2codesigner.com/ Nathan Olmstead] has marked up his [http://www.a2codesigner.com/web-design/about-2/ r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume.&lt;br /&gt;
* [[User:Jason Erb|Jason Erb]] has meticulously marked up his [http://uncrease.com/qualifications/Jason.Erb.html r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume.&lt;br /&gt;
* [http://coffeepowered.co.uk/ Paul Stanton] has marked up his [http://coffeepowered.co.uk/cv CV] with hResume.&lt;br /&gt;
* [http://bit.ly/lqY9HB Ross Fruen] has his [http://bit.ly/kxxYR2 curriculum vitae] marked up with hResume. An alternative is his [http://www.linkedin.com/in/rossfruen LinkedIn] profile.&lt;br /&gt;
* [http://www.wosko.us/ Simon Wosko] has marked up his [http://www.wosko.us/resume/ r&amp;amp;eacute;sum&amp;amp;eacute;] with an enhanced version of the [http://brad.touesnard.com/projects/wordpress/linkedin-hresume/ LinkedIn hResume for Wordpress] plugin.&lt;br /&gt;
* [http://staceycordoni.com/ Stacey Cordoni] has marked up her [http://staceycordoni.com/resume/ r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume.&lt;br /&gt;
* [http://prem.ghin.de/ Prem Ghinde] has scraped together [http://prem.ghin.de/index.php/my-cv/ his CV] with the [http://brad.touesnard.com/projects/wordpress/linkedin-hresume/ LinkedIn hResume for Wordpress] plugin.&lt;br /&gt;
* [http://www.rommil.com/?referID=hresume Rommil Santiago] has marked up his [http://www.rommil.com/about/resume/index.php?referID=hresume r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume&lt;br /&gt;
* [http://l2fprod.com/ Frederic Lavigne] has marked up his [http://l2fprod.com/cv/cv.php r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume&lt;br /&gt;
* [http://matthewlevine.com/ Matthew Levine] has marked up his [http://matthewlevine.com/resume r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume&lt;br /&gt;
* [http://www.jdclark.org/ Jordan Clark] has marked up his [http://cv.jdclark.org/ CV / r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume&lt;br /&gt;
* [[User:SebastienSauteur|Sebastien Sauteur]] has marked up his [http://valeurdusage.net/drupal/content/cv-version-mindmap C.V.] with hResume&lt;br /&gt;
* [[User:MarkNg|Mark Ng]] has marked up his [http://www.markng.co.uk/cv CV] with hResume.&lt;br /&gt;
* [[User:SidRoberts|Sid Roberts]] has marked up his [http://www.sidroberts.co.uk/cv/ CV] with hResume.&lt;br /&gt;
* [[User:NathanChase|Nathan Chase]] has marked up [http://www.nathanchase.com/resume.html his resume] with hResume.&lt;br /&gt;
* [[User:WikiObert|Alberto Ramacciotti]] has marked up an italian and an english version of his h[http://obertfsp.com/cv.html Resume].&lt;br /&gt;
* [[User:Dreamisle|David Millar]] has marked up [http://thegriddle.net/resume his puzzle resume] and [http://thegriddle.net/resume/web.html his web resume] with hResume.&lt;br /&gt;
* [[User:Bczerniak|Brad Czerniak]] has created [http://brad.hawidu.com his Resume] with hResume.&lt;br /&gt;
* [[User:BenDodson|Ben Dodson]] has marked up [http://bendodson.com/cv/ his CV] with hResume.&lt;br /&gt;
* [[User:Twoplayer|Stephen Kelly]] has marked up his [http://www.twoplayer.net/stephen-kelly/cv.php CV] with hResume.&lt;br /&gt;
* [[User:MattWilliams|Matt Williams]] has marked up his [http://mattwilliamsnyc.com/resume/ resume] with hResume.&lt;br /&gt;
* [[User:Niall Kennedy|Niall Kennedy]] has marked up his [http://www.niallkennedy.com/about/resume.html r&amp;amp;eacute;sum&amp;amp;eacute;] with hResume.&lt;br /&gt;
* [[User:ManasTungare|Manas Tungare]] has marked up his [http://manas.tungare.name/resume/ R&amp;amp;eacute;sum&amp;amp;eacute;] with hResume.&lt;br /&gt;
* [[User:Eferraiuolo|Eric Ferraiuolo]] has marked up his [http://eric.ferraiuolo.name/resume/ Resume] with hReesume&lt;br /&gt;
* [[User:ChristopheDucamp|Christophe Ducamp]] has marked up his [http://www.elanceur.org/CV_ChristopheDucampFr.html C.V.] with hResume&lt;br /&gt;
* [[User:RichardDavies|Richard Davies]] has marked up his [http://www.richarddavies.us/resume/ resume] as an hResume.&lt;br /&gt;
* [[User:JeffMcNeill|jeffmcneill]] has marked up [http://jeffmcneill.com/microformats/hresume-jeffmcneill.html his resume] with hResume&lt;br /&gt;
* Actor [[User:DavidSwain|David Swain]] has marked up his [http://davidswain.co.uk/cv cv] as an hResume.&lt;br /&gt;
* [[User:CiaranMc|Ciaran McNulty]] has marked up his [http://ciaranmcnulty.com/cv/html CV] as an hResume.&lt;br /&gt;
* [[User:RobCrowther|Rob Crowther]] has marked up his [http://www.dotrob.com/cv.html resume] as an hResume.&lt;br /&gt;
* [[User:Ajaswa|Andrew Jaswa]] has marked up his [http://www.gotkicked.net/hresume resume] as an hResume.&lt;br /&gt;
* [[User:ScottWallick|Scott Allan Wallick]] has [http://scottwallick.com/about/resume/ his resume] as an hResume.&lt;br /&gt;
* Ed Lau has [http://www.edlabs.net/ his resume] marked up with hResume.&lt;br /&gt;
* [[User:AndySmith|Andy Smith]]  has marked up [http://ymkm.com/AndySmith.html his CV] with hResume.&lt;br /&gt;
* [[User:BruceDailey|Bruce Dailey]] has marked up his [http://www.jciti.com/cv/cv.php resume] as an hResume.&lt;br /&gt;
* [[User:JesseNewland|Jesse Newland]] has marked up his [http://resume.jnewland.com resume] as an hResume.&lt;br /&gt;
* [[User:Harriyott|Simon Harriyott]] has his [http://harriyott.com/cv.aspx curriculum vitae] as an hResume.&lt;br /&gt;
* [[User:BradT|Brad Touesnard]] has scraped together [http://brad.touesnard.com/documents/resume/ his resume] with the [http://brad.touesnard.com/projects/wordpress/linkedin-hresume/ LinkedIn hResume for Wordpress] plugin.&lt;br /&gt;
* [[User:ChadL|Chad Lindstrom]] has extended his [http://chadlindstrom.ca/resume/ resume] with hResume.&lt;br /&gt;
* Dawn Waswick has marked up [http://www.miniminx.com/portfolio/resume.cfm her CV] with hResume.&lt;br /&gt;
* [[User:Rolandinsh|Rolands Umbrovskis]] has [http://www.rolandinsh.lv/?ro=hResume marked up his CV] with hResume.&lt;br /&gt;
* [http://linkedin.com/ LinkedIn] has ~9 million Public Profiles marked up in hResume, e.g. [http://www.linkedin.com/in/steveganz Steve Ganz's Public Profile].&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]. ([[User:WizardIsHungry|Jon Williams]])&lt;br /&gt;
* [[User:ClintAndrewHall|Clint Hall]] has marked up his [http://www.clintandrewhall.com/resume.html resume] as an hResume.&lt;br /&gt;
* [[User:Csarven|Sarven Capadisli]] has marked up his [http://csarven.ca/cv Curriculum Vitae] as an hResume.&lt;br /&gt;
* [[User:Jax|Xavier Roy]] has marked his [http://xavierroy.com/resume/ resume] with hResume&lt;br /&gt;
* [[User:SanchTheFat|Robert O'Rourke]] has marked up his [http://robert.o-rourke.org/ CV] with hResume.&lt;br /&gt;
* [[User:Keri Henare|Keri Henare]] has marked up [http://www.kerihenare.com/cv/ his Curriculum Vitae] using hResume.&lt;br /&gt;
* [[User:Kwilson|Kenn Wilson]] has marked up [http://www.corvidworks.com/resume/ his resume] using hResume, following [[User:Ralph Brandi|Ralph Brandi]]'s method of using object.include.&lt;br /&gt;
* [[User:Ralph Brandi|Ralph Brandi]] has [http://www.brandi.org/ralph/resume/ marked up his resume] with hResume, additionally using the object.include method to associate one description with three hCalendar experiences.&lt;br /&gt;
* [[User:Pat Ramsey|Pat Ramsey]] has his [http://www.patramsey.net/resume.html resume] marked up as an hResume.&lt;br /&gt;
* [[User:Wim Le Page|Wim Le Page]] has also marked up [http://adrem.ua.ac.be/wimlepage/ his curriculum vitae] as an hResume.&lt;br /&gt;
* [[user:Jonathan Arkell|Jonathan Arkell]] has posted an [http://portfolio.jonnay.net/cv/ hResume] on his  portfolio website.&lt;br /&gt;
* [http://steve.ganz.name/hresume/ Steve Ganz - hResume 0.1]&lt;br /&gt;
* [[User:Dave Cardwell|Dave Cardwell]] has marked up [http://davecardwell.co.uk/cv/ his curriculum vitae] as an hResume.&lt;br /&gt;
* [[User:EdwardOConnor|Edward O'Connor]]'s [http://edward.oconnor.cx/resume/ resume] is in hResume, and has some experimental JavaScript in it to extract a skill summary from the resume.&lt;br /&gt;
* [[User:Lindsey Simon|Lindsey Simon]] has his [http://www.commoner.com/~lsimon/lindsey_simon_resume.html resume] marked up as an hResume - with lots of thanks to Pat Ramsey.&lt;br /&gt;
* [[User:Ben Ward|Ben Ward]] has published [http://ben-ward.co.uk/cv his CV] with hResume.&lt;br /&gt;
* [http://www.kelleychambers.com Kelley Chambers] has published her [http://www.kelleychambers.com/resume resume] via [http://www.ssdesigninteractive.com/ssdesign/?p=96 Sajid Saiyed's Microformat hResume Plugin for Wordpress].&lt;br /&gt;
* [[User:Fishy5|Brennan Falkner]] used hResume to markup his [http://my.usf.edu/bbcswebdav/users/bfalker/resume.html resume].&lt;br /&gt;
* [http://www.zachary.com/creemer/resume.html David Creemer's resume] uses hResume, with thanks to Pat Ramsey for the CSS.&lt;br /&gt;
* [[User:ChristophBurgdorfer|Christoph Burgdorfer]] has integrated his hResume into a [http://emcons.net/index.php mashup].&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
     Please add new examples to the *top* of this section.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples with some problems ==&lt;br /&gt;
&lt;br /&gt;
If you find a problem with any example in any other section, please move it here, and note the precise problem and cite the section of the [[hresume|hResume spec]] that appears to be violated. If the example that was moved here is yours, and you want to improve it, see the [[hresume-faq|hResume FAQ]], or raise any queries on [[hresume-issues|hResume Issues]] or [[mailing-lists#microformats-discuss|the mailing list]], where people will be happy to help you. &amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
     Please add new examples to the *top* of this section.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Inga Scholes had &amp;lt;nowiki&amp;gt;http://inga-art.co.uk/cv&amp;lt;/nowiki&amp;gt; her CV marked up with hResume.&lt;br /&gt;
** '''invalid''' - hResume version missing as of 2007-10-28.&lt;br /&gt;
* [[User:RudyDesjardins|Rudy Desjardins]] has marked up his [http://rudy.theendless.org/resume/index.html resume] as an hResume.&lt;br /&gt;
** '''Invalid''' : hCard seems invalid&lt;br /&gt;
* [[User:MattBosworth|Matt Bosworth]] has marked up his chronological [http://www.codetastic.com/resume-chrono.html resume] and his functional [http://www.codetastic.com/resume-functional.html resume] with hResume.&lt;br /&gt;
** '''Invalid''' -- hCalendar's summaries to be specified&lt;br /&gt;
* [[User:AndrewPendrick|Andrew Pendrick]] has marked up his [http://www.andrewpendrick.co.uk/cv.html resume] as an hResume.&lt;br /&gt;
**'''Invalid''' - hCalendars's summaries to be specified (per Operator).[[User:ChristopheDucamp|xtof]]&lt;br /&gt;
* [[User:WebOrganics|Martin McEvoy]] has cobbled together his [http://weborganics.co.uk/hResume/ resume] as a hResume.&lt;br /&gt;
**'''Invalid''' - Three hCalendars have empty summary; several tags are invalid (per Operator). [[User:AndyMabbett|Andy Mabbett]] 22:48, 1 Sep 2007 (PDT)&lt;br /&gt;
* [[User:DmytroShteflyuk|Dmytro Shteflyuk]] has marked up [http://kpumuk.info/curriculum-vitae/ his resume] as an hResume.&lt;br /&gt;
** Invalid; job titles contain hCards without a &amp;quot;fn&amp;quot; (either directly or via object). --[[User:Gazza|Gazza]] 04:27, 1 May 2007 (PDT)&lt;br /&gt;
* [[user:Izo|Mathieu Drouet]] has posted an [http://izo.aucuneid.com/hresume.html hResume]. &lt;br /&gt;
** ''Incorrect root class name hResume?  -- [[DavidJanes]]''&lt;br /&gt;
* [[User:Stauciuc|Sergiu Sebastian Tauciuc]] has his [http://www.sergiutauciuc.ro/en/cv.html curriculum vitae] as an hResume.&lt;br /&gt;
** '''Invalid''' - no contact vCard specified. [[User:AndyMabbett|Andy Mabbett]] 04:05, 10 Mar 2007 (PST)&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
     Please add new examples to the *top* of this section.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reviewed Examples ==&lt;br /&gt;
&lt;br /&gt;
If you have reviewed a New Example (and you are not the author of the example) and believe it to be valid, go ahead and move it here.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Related Pages ==&lt;br /&gt;
{{hresume-related-pages}}&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=parsers&amp;diff=47218</id>
		<title>parsers</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=parsers&amp;diff=47218"/>
		<updated>2012-09-04T13:07:18Z</updated>

		<summary type="html">&lt;p&gt;GlennJones: Updated Microformat Node entry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;Microformats Parsers&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
;shortlinks&lt;br /&gt;
:http://ufs.cc/w/ufprs&lt;br /&gt;
This page lists libraries that consume, transform or convert microformats. This is only a partial list. If you know of other such tools for microformats, please add them and list what specific microformats they support. There is a separate page for [[validators]].&lt;br /&gt;
&lt;br /&gt;
Alphabetical listing by programming language:&lt;br /&gt;
&lt;br /&gt;
== .Net ==&lt;br /&gt;
[http://ufxtract.com/ UfXtract] is an open source .Net microformats parser. It can parse microformats from URLs or HTML strings. The extracted data can be used directly in .Net or converted into JSON, JSON-P or XML. Currently Supports 16 microformats and can easily be extended with new definitions.&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://code.google.com/p/any23/ Any23 (Anything to Triples)] parses microformats into RDF triples&lt;br /&gt;
* [http://zwitserloot.com/org.microformats.hCard/ org.microformats.hCard] by Reinier Zwitserloot&lt;br /&gt;
&lt;br /&gt;
== Javascript ==&lt;br /&gt;
=== Microformat Node ===&lt;br /&gt;
* [http://glennjones.github.com/microformat-node/ microformat-node] microformat-node is a microformat parser for node.js. It is built using a well tested light-weight JavaScript parsing engine (Microformat Shiv), which already powers a number of browser extensions. It currently supports the following formats: &lt;br /&gt;
** Release version: http://microformat-node.jit.su/ supports microformats: [[hCard]], [[XFN]], [[hReview]], [[hCalendar]], [[hAtom]], [[hResume]], [[geo]], [[adr]], and [[rel-tag|tag]].&lt;br /&gt;
** Beta version(Still in development) with [[microformats2]] support: http://microformat2-node.jit.su supports [[microformats2]]: h-adr h-card h-event h-entry h-geo - all in addition to the above.&lt;br /&gt;
&lt;br /&gt;
=== Microformat Shiv ===&lt;br /&gt;
* [http://microformatshiv.com/ Microformat Shiv] The microformat shiv provides a simple to use, light-weight, cross-browser microformat API. It even works with modern mobile browsers and is backward compatible with Internet Explore 6. Based on the microformat API for Mozilla's extensions. This is the same code base as the popular Operater plug-in.&lt;br /&gt;
&lt;br /&gt;
=== Sumo ===&lt;br /&gt;
* [http://www.danwebb.net/2007/2/9/sumo-a-generic-microformats-parser-for-javascript Sumo! A Generic Microformats Parser For JavaScript]&lt;br /&gt;
&lt;br /&gt;
== Perl ==&lt;br /&gt;
=== Data::Microformat ===&lt;br /&gt;
* [http://search.cpan.org/~ussjoin/Data-Microformat-0.01/lib/Data/Microformat/hCard.pm Data::Microformat] is a CPAN module to parse and create hCard, adr, and geo.&lt;br /&gt;
** By Brendan O'Connor / Six Apart&lt;br /&gt;
&lt;br /&gt;
=== HTML::Microformats ===&lt;br /&gt;
Perhaps we can capture and update this info on a page like [[perl-html-microformats-parser]].&lt;br /&gt;
[http://search.cpan.org/~tobyink/HTML-Microformats/ HTML::Microformats] is a CPAN module that has support for: &lt;br /&gt;
* input:&lt;br /&gt;
** rel: [[rel-enclosure]], [[rel-license]], [[rel-tag]], [[VoteLinks]], [[XFN]].&lt;br /&gt;
** class: [[adr]], [[figure]], [[geo]], [[hAtom]], [[hAudio]], [[User:TobyInk/hcalendar-1.1|hCalendar]], [[hCard]], [[hListing]], [[hNews]], [[hProduct]], [[hRecipe]], [[hResume]], [[hReview]], [[hReview-aggregate]], [[xFolk]], [[XMDP]], [[XOXO]].&lt;br /&gt;
*** highly experimental: [[measure]], [[species]].&lt;br /&gt;
** poshformats: [http://ocoins.info/ OpenURL COinS].&lt;br /&gt;
* output:&lt;br /&gt;
** RDF: RDF/XML, Turtle, N-Triples, RDF/JSON, etc.&lt;br /&gt;
** JSON&lt;br /&gt;
** domain specific: vCard (3.0, 4.0 and XML), iCalendar, Atom, KML.&lt;br /&gt;
* By [[User:TobyInk|Toby Inkster]].&lt;br /&gt;
&lt;br /&gt;
Versions and releases notes:&lt;br /&gt;
* 2011-02-05 [http://microformats.org/discuss/mail/microformats-dev/2011-February/000667.html 0.102]&lt;br /&gt;
* 2010-12-22 0.101&lt;br /&gt;
* 2010-12-16 [http://microformats.org/discuss/mail/microformats-discuss/2010-December/013363.html 0.100]&lt;br /&gt;
* 2010-10-18 0.00_13&lt;br /&gt;
* 2010-06-25 0.00_12&lt;br /&gt;
* 2010-06-23 0.00_11&lt;br /&gt;
* 2010-05-13 0.00_10&lt;br /&gt;
* 2010-05-12 0.00_09&lt;br /&gt;
* 2010-04-29 0.00_08&lt;br /&gt;
* 2010-04-28 0.00_07&lt;br /&gt;
* 2010-04-16 [http://microformats.org/discuss/mail/microformats-dev/2010-April/000651.html 0.00_06]&lt;br /&gt;
* 2010-04-16 0.00_05&lt;br /&gt;
* 2010-03-20 [http://microformats.org/discuss/mail/microformats-dev/2010-March/000647.html 0.00_04]&lt;br /&gt;
* 2010-03-09 [http://microformats.org/discuss/mail/microformats-dev/2010-March/000642.html 0.00_03]&lt;br /&gt;
* 2010-02-28 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000641.html 0.00_02]&lt;br /&gt;
* 2010-02-24 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000640.html 0.00_01]&lt;br /&gt;
* 2010-02-20 [http://microformats.org/discuss/mail/microformats-dev/2010-February/000639.html 0.00_00]&lt;br /&gt;
* see also the &amp;quot;Changes&amp;quot; file included in the CPAN distribution.&lt;br /&gt;
&lt;br /&gt;
==== XML::Atom::Microformats ====&lt;br /&gt;
&lt;br /&gt;
[http://search.cpan.org/~tobyink/XML-Atom-Microformats/ XML::Atom::Microformats] provides the same functionality for Atom. It finds microformats in Atom entry content elements.&lt;br /&gt;
&lt;br /&gt;
===Swignition ===&lt;br /&gt;
* [http://buzzword.org.uk/swignition/ Swignition] is a parser for both “upper case Semantic Web” (RDF, RDFa) and “lower case semantic web” (microformats) technologies. It includes modules for exporting parsed data in a variety of formats, including RDF, vCard, iCalendar, Atom and KML.&lt;br /&gt;
** By Toby Inkster&lt;br /&gt;
** Active development has moved to HTML::Microformats (see above).&lt;br /&gt;
&lt;br /&gt;
=== Text::Microformat ===&lt;br /&gt;
* Text::Microformat is a microformats parser hosted on [http://code.google.com/p/ufperl/ Google Code] that supports:&lt;br /&gt;
** [[hCard]], [[hCalendar]], [[rel-tag]]&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
=== XMFP ===&lt;br /&gt;
&amp;lt;span id=&amp;quot;xmfp&amp;quot;&amp;gt;[http://code.google.com/p/xmfp/ XMFP]&amp;lt;/span&amp;gt; (eXtensible MicroFormats Parser for PHP 5) by [http://www.metonymie.com Emiliano Martínez Luque] is a set of PHP 5 classes providing a simple API for extracting Microformated Content either from a URI or a String representing HTML/XML. It can return the results as a PHP associative array, a JSON definition or an XML representation of the data. It supports most of the currently accepted microformats and can be easily extended to add new ones, it also has full support of the include pattern and provides basic validation of microformated data.&lt;br /&gt;
&lt;br /&gt;
=== hKit Microformats Toolkit for PHP5 ===&lt;br /&gt;
[http://allinthehead.com/hkit hKit Microformats Toolkit for PHP5] as [http://allinthehead.com/retro/291/hkit-microformats-toolkit-for-php announced by Drew McLellan]. See also [[hkit|hKit on this wiki]].&lt;br /&gt;
&lt;br /&gt;
===PHP Microformats parser===&lt;br /&gt;
[http://www.phpclasses.org/browse/package/3597.html Microformats parser] is a PHP package for extracting the microformats data embedded into HTML. The gathered data is stored as an xArray of objects - one for each microformat type container found. [http://malatestapunk-stuff.blogspot.com/2007/01/php-microformats-parser.html Announcement]. The parser supports most of the hCard (missing SOUND), hCalendar, hReview (missing item info; spec really needs some clarification) and rel elements, according to their respective specification on microformats Wiki.&lt;br /&gt;
&lt;br /&gt;
===Transformr===&lt;br /&gt;
A Simple set of XSLT and PHP tools for Transforming Microformats Source [http://github.com/WebOrganics/TransFormr available from github] Live webservice available at [http://microform.at/ microform.at].&lt;br /&gt;
&lt;br /&gt;
=== hCard Validator ===&lt;br /&gt;
[http://code.google.com/p/hcardvalidator/ Source code] of the [http://hcard.geekhood.net/ hCard Validator] contains XSLT and PHP code for hCard and include microformats.&lt;br /&gt;
&lt;br /&gt;
=== ARC2 ===&lt;br /&gt;
[http://arc.semsol.org/ ARC2] is a semantic web toolkit which includes support for hCard, adr, geo, XFN, hCalendar, hAtom, hResume, hReview, xFolk, rel-license and rel-tag. It's tri-licensed under the GPL 2 and 3, and the W3C Software licence.&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
===AUMP===&lt;br /&gt;
* [http://aump.googlecode.com AUMP] is a parser written by David Janes. It supports hCard, hCalendar, hAtom, hReview and hListing.&lt;br /&gt;
** Uses Python's [http://docs.python.org/library/xml.dom.minidom.html xml.dom.minidom] after cleaning input through [http://www.w3.org/People/Raggett/tidy/ HTML Tidy].&lt;br /&gt;
&lt;br /&gt;
===Microtron===&lt;br /&gt;
{{main|Microtron}}&lt;br /&gt;
* [[Microtron]] is a general-purpose microformat parser/transformer.  &lt;br /&gt;
&lt;br /&gt;
It can operate on the definition file included in [[Optimus]], making it a close replacement for certain tasks, and can easily be extended with new formats without modifying the source.  The primary advantages are speed (&amp;gt; 100x faster that [[Optimus]] for some operations), simplicity (single file) and small code size (currently &amp;lt; 150 lines).&lt;br /&gt;
&lt;br /&gt;
=== python-hcalendar ===&lt;br /&gt;
[http://pypi.python.org/pypi/python-hcalendar/0.1dev python-hcalendar] is a basic hCalendar parser.&lt;br /&gt;
&lt;br /&gt;
== Ruby ==&lt;br /&gt;
===Prism ===&lt;br /&gt;
* [[Prism]]&lt;br /&gt;
** by [[implementors#Mark_Wunsch|Mark Wunsch]]&lt;br /&gt;
** Library and command line tool for parsing POSH/Microformats&lt;br /&gt;
** Uses the [http://nokogiri.org/ Nokogiri] HTML, XML, SAX, and Reader parser&lt;br /&gt;
&lt;br /&gt;
=== mofo ruby microformats parser===&lt;br /&gt;
* [http://mofo.rubyforge.org/ mofo], [http://groups.google.com/group/mofo-rb mofo Google Group], [http://github.com/defunkt/mofo/tree/master GitHub repository]&lt;br /&gt;
** by [[implementors#Chris Wanstrath|Chris Wanstrath]]&lt;br /&gt;
** Uses the [http://wiki.github.com/why/hpricot Hpricot] HTML/XML parser&lt;br /&gt;
&lt;br /&gt;
=== Microformat Parser for Ruby ===&lt;br /&gt;
* [http://blog.labnotes.org/2005/11/20/microformat-parser-for-ruby/ Microformat Parser for Ruby]&lt;br /&gt;
** by [[implementors#Assaf Arkin|Assaf Arkin]]&lt;br /&gt;
&lt;br /&gt;
=== uformats ===&lt;br /&gt;
* [http://rubyforge.org/projects/uformats uformats]&lt;br /&gt;
&lt;br /&gt;
=== scrAPI ===&lt;br /&gt;
* [http://rubyforge.org/projects/scrapi scrAPI]&lt;br /&gt;
&lt;br /&gt;
== XSLT ==&lt;br /&gt;
===Optimus===&lt;br /&gt;
* [[Optimus]] is open source XSLT that parses microformats, converts them into JSON or XML, and validates them too.&lt;br /&gt;
&lt;br /&gt;
===X2V===&lt;br /&gt;
* [[X2V]] is [http://hg.microformats.org/ open source XSLT for extracting microformats].&lt;br /&gt;
** by Brian Suda&lt;br /&gt;
&lt;br /&gt;
== editing this page ==&lt;br /&gt;
For now, this page ''copies'' (rather than ''moves'') information from the existing [[implementations | Implementations]] page.&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[implementations]]&lt;br /&gt;
* [[implementors]]&lt;br /&gt;
* [[open-source]]&lt;br /&gt;
* [[user-interface]]&lt;br /&gt;
* [[validators]]&lt;/div&gt;</summary>
		<author><name>GlennJones</name></author>
	</entry>
</feed>