<?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=KP</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=KP"/>
	<link rel="alternate" type="text/html" href="https://microformats.org/wiki/Special:Contributions/KP"/>
	<updated>2026-04-13T10:10:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=job-listing-examples&amp;diff=66611</id>
		<title>job-listing-examples</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=job-listing-examples&amp;diff=66611"/>
		<updated>2017-11-17T10:26:52Z</updated>

		<summary type="html">&lt;p&gt;KP: Undo revision 66610 by Sreelatha (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;Job Listing Examples&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per the [[process]], this page documents examples of web sites publishing job listings as research towards the development of a [[job-listing]] microformat.&lt;br /&gt;
&lt;br /&gt;
== examples ==&lt;br /&gt;
&lt;br /&gt;
*Online Job Applications&lt;br /&gt;
&lt;br /&gt;
**http://onlinejobapplications.com&lt;br /&gt;
**company&lt;br /&gt;
**type of application available&lt;br /&gt;
**location&lt;br /&gt;
**interview tips&lt;br /&gt;
**positions available&lt;br /&gt;
**benefit information&lt;br /&gt;
**how to apply&lt;br /&gt;
&lt;br /&gt;
* 37 Signals Job Board (a minimalist approach - comments in brackets are from their site)&lt;br /&gt;
&lt;br /&gt;
** https://jobs.37signals.com/jobs/new&lt;br /&gt;
** Company&lt;br /&gt;
** URL (e.g. Example: &amp;quot;http://www.google.com&amp;quot;)&lt;br /&gt;
** Tile (Example: &amp;quot;Senior Designer&amp;quot; or &amp;quot;Rails Programmer&amp;quot;)&lt;br /&gt;
** Location (Example: &amp;quot;Chicago, IL&amp;quot; or &amp;quot;Stockholm, Sweden&amp;quot;)&lt;br /&gt;
** Category [&amp;quot;Design&amp;quot;,&amp;quot;Programming&amp;quot;,&amp;quot;Business/Exec&amp;quot;,&amp;quot;Misc&amp;quot;,&amp;quot;Copywriter&amp;quot;]&lt;br /&gt;
** Description (no more than 1000 chars)&lt;br /&gt;
** How to apply (Example: &amp;quot;Send a resume to jane@company.com&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
* Descheneaux Insurance Recruiters LTD&lt;br /&gt;
** http://www.insuranceheadhunters.com/links.cfm&lt;br /&gt;
** title&lt;br /&gt;
** company&lt;br /&gt;
** location&lt;br /&gt;
** start date&lt;br /&gt;
** end date&lt;br /&gt;
** type - regular (vs. contract?)&lt;br /&gt;
** classification (full/part time)&lt;br /&gt;
** hours/week&lt;br /&gt;
** salary range&lt;br /&gt;
** education&lt;br /&gt;
** certification&lt;br /&gt;
** experience (years)&lt;br /&gt;
** description&lt;br /&gt;
** benefits&lt;br /&gt;
&lt;br /&gt;
* America's Job Bank&lt;br /&gt;
** http://www.ajb.dni.us/&lt;br /&gt;
** title&lt;br /&gt;
** company&lt;br /&gt;
** location&lt;br /&gt;
** start date&lt;br /&gt;
** end date&lt;br /&gt;
** type - regular (vs. contract?)&lt;br /&gt;
** classification (full/part time)&lt;br /&gt;
** hours/week&lt;br /&gt;
** salary range&lt;br /&gt;
** education&lt;br /&gt;
** certification&lt;br /&gt;
** experience (years)&lt;br /&gt;
** description&lt;br /&gt;
** benefits&lt;br /&gt;
&lt;br /&gt;
* Australian Job Search&lt;br /&gt;
** http://jobsearch.gov.au/&lt;br /&gt;
** title&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** description&lt;br /&gt;
** type (permanent/full-time/etc.)&lt;br /&gt;
** contact&lt;br /&gt;
** time posted&lt;br /&gt;
&lt;br /&gt;
* CareerBuilder&lt;br /&gt;
** http://www.careerbuilder.com/&lt;br /&gt;
** title&lt;br /&gt;
** company&lt;br /&gt;
** industry&lt;br /&gt;
** location&lt;br /&gt;
** qualifications&lt;br /&gt;
*** experience&lt;br /&gt;
*** education&lt;br /&gt;
** pay&lt;br /&gt;
*** relocation covered (y/n)&lt;br /&gt;
** travel required (y/n)&lt;br /&gt;
** type (full time, contract, etc.)&lt;br /&gt;
** job function&lt;br /&gt;
** management (y/n)&lt;br /&gt;
** description&lt;br /&gt;
&lt;br /&gt;
* careerpowerups.com (covers the videogames industry)&lt;br /&gt;
** http://careerpowerups.com&lt;br /&gt;
** date&lt;br /&gt;
** company  (or recruitment agency)&lt;br /&gt;
** company homepage&lt;br /&gt;
** title  (eg &amp;quot;Concept Artist&amp;quot;)&lt;br /&gt;
** location  (eg &amp;quot;Rockville, MD&amp;quot;)&lt;br /&gt;
** description&lt;br /&gt;
** how to apply  (eg &amp;quot;Email jobs@example.com to apply&amp;quot;)&lt;br /&gt;
** pay  (eg &amp;quot;$DOE + Benefits + Relocation Support&amp;quot; - ie even where specified, pay is usually meaningless)&lt;br /&gt;
&lt;br /&gt;
* Craigslist&lt;br /&gt;
** http://www.craigslist.org/jjj/&lt;br /&gt;
** category&lt;br /&gt;
** contract terms&lt;br /&gt;
** date&lt;br /&gt;
** duration (implied)&lt;br /&gt;
** contact info&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** description&lt;br /&gt;
** principals/recruiters&lt;br /&gt;
&lt;br /&gt;
* Diario Clarin&lt;br /&gt;
** http://www.empleosclasificados.clarin.com/&lt;br /&gt;
** category&lt;br /&gt;
** job type&lt;br /&gt;
** description&lt;br /&gt;
** listing date&lt;br /&gt;
** contact phone&lt;br /&gt;
&lt;br /&gt;
* Dice&lt;br /&gt;
** http://www.dice.com/&lt;br /&gt;
** title&lt;br /&gt;
** skills&lt;br /&gt;
** time posted&lt;br /&gt;
** location&lt;br /&gt;
*** area code&lt;br /&gt;
** tax term (W2, etc.)&lt;br /&gt;
** pay rate&lt;br /&gt;
** length (months)&lt;br /&gt;
** description&lt;br /&gt;
** qualifications&lt;br /&gt;
*** skills&lt;br /&gt;
**** required&lt;br /&gt;
**** preferred&lt;br /&gt;
*** experience&lt;br /&gt;
*** education&lt;br /&gt;
** contact&lt;br /&gt;
** travel required&lt;br /&gt;
** telecommute (y/n)&lt;br /&gt;
&lt;br /&gt;
*HigherEdJobs.com&lt;br /&gt;
**http://www.higheredjobs.com&lt;br /&gt;
**title&lt;br /&gt;
**institution&lt;br /&gt;
**location(city-state)&lt;br /&gt;
**job category&lt;br /&gt;
**posting date&lt;br /&gt;
**application due date&lt;br /&gt;
**type (ft/pt)&lt;br /&gt;
**description &lt;br /&gt;
***experience &lt;br /&gt;
***education&lt;br /&gt;
***salary&lt;br /&gt;
***application requirements&lt;br /&gt;
**application information&lt;br /&gt;
***postal address&lt;br /&gt;
***website link&lt;br /&gt;
***phone/fax/email&lt;br /&gt;
**additional information (incl. relevant links)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* InfoEmprego.com.br&lt;br /&gt;
** http://www.infoemprego.com.br/OfertaVisualizar.aspx?id=546853&lt;br /&gt;
** Offer title&lt;br /&gt;
** location (city - state - country)&lt;br /&gt;
** description&lt;br /&gt;
** company size&lt;br /&gt;
** company sector (of the job offer)&lt;br /&gt;
** company type&lt;br /&gt;
** offer description&lt;br /&gt;
*** sector&lt;br /&gt;
*** specialization&lt;br /&gt;
*** vacancies&lt;br /&gt;
** requirements&lt;br /&gt;
*** studies&lt;br /&gt;
*** professional experience&lt;br /&gt;
** Offering&lt;br /&gt;
*** salary (might not be shown it seems)&lt;br /&gt;
*** contract type&lt;br /&gt;
&lt;br /&gt;
* Infojobs.net&lt;br /&gt;
** http://www.infojobs.net/visualizar_oferta.ij/of_codigo=25152424536981905650024953746&lt;br /&gt;
** offer title&lt;br /&gt;
*** offer date&lt;br /&gt;
*** offer reference&lt;br /&gt;
*** company name&lt;br /&gt;
**** company url&lt;br /&gt;
**** company number of workers&lt;br /&gt;
**** company headquarters&lt;br /&gt;
**** company description/filosophy&lt;br /&gt;
** location&lt;br /&gt;
*** location city&lt;br /&gt;
*** location country&lt;br /&gt;
*** location province/state&lt;br /&gt;
** job description&lt;br /&gt;
*** job title&lt;br /&gt;
*** job category&lt;br /&gt;
*** department&lt;br /&gt;
*** vacancies&lt;br /&gt;
*** job offer description&lt;br /&gt;
** requirements&lt;br /&gt;
*** minimal estudies&lt;br /&gt;
*** minimal experience&lt;br /&gt;
*** place of residency (where the candidate must live)&lt;br /&gt;
** contract&lt;br /&gt;
*** journal (full day| part time)&lt;br /&gt;
&lt;br /&gt;
* Indeed&lt;br /&gt;
** http://www.indeed.com/&lt;br /&gt;
** title&lt;br /&gt;
** company&lt;br /&gt;
** location&lt;br /&gt;
** description&lt;br /&gt;
** source&lt;br /&gt;
** time posted&lt;br /&gt;
&lt;br /&gt;
* Job.com&lt;br /&gt;
** http://www.job.com/&lt;br /&gt;
** title&lt;br /&gt;
** company&lt;br /&gt;
*** company type (public/private)&lt;br /&gt;
** industry&lt;br /&gt;
** time posted&lt;br /&gt;
** contact&lt;br /&gt;
** location&lt;br /&gt;
** salary&lt;br /&gt;
** travel required (%)&lt;br /&gt;
** security clearance (y/n)&lt;br /&gt;
** type (full/part time)&lt;br /&gt;
** description&lt;br /&gt;
** qualifications&lt;br /&gt;
&lt;br /&gt;
* Jobing&lt;br /&gt;
** http://florida.jobing.com/&lt;br /&gt;
** title&lt;br /&gt;
** company&lt;br /&gt;
** status (full time, temp, etc.)&lt;br /&gt;
** pay rate&lt;br /&gt;
** description&lt;br /&gt;
** qualifications&lt;br /&gt;
** location&lt;br /&gt;
&lt;br /&gt;
* Job Search&lt;br /&gt;
** http://www.jobsearch.co.uk/&lt;br /&gt;
** title&lt;br /&gt;
** description&lt;br /&gt;
** pay&lt;br /&gt;
** time posted&lt;br /&gt;
** contact&lt;br /&gt;
** location&lt;br /&gt;
** term (permanent, temp)&lt;br /&gt;
** industry&lt;br /&gt;
** start date&lt;br /&gt;
&lt;br /&gt;
* Jobserve&lt;br /&gt;
** http://jobserve.com/&lt;br /&gt;
** Description&lt;br /&gt;
** Type [&amp;quot;Contract&amp;quot;,&amp;quot;Perm&amp;quot;]&lt;br /&gt;
** Location&lt;br /&gt;
** Country&lt;br /&gt;
** Start Date&lt;br /&gt;
** Duration&lt;br /&gt;
** Employment Business (Agency)&lt;br /&gt;
** Contact Name&lt;br /&gt;
** Telephone&lt;br /&gt;
** Fax&lt;br /&gt;
** Email&lt;br /&gt;
** Reference (some sort of GUID)&lt;br /&gt;
** Posted Date&lt;br /&gt;
&lt;br /&gt;
* Monster&lt;br /&gt;
** http://jobsearch.monster.com/&lt;br /&gt;
** company&lt;br /&gt;
*** link&lt;br /&gt;
*** logo&lt;br /&gt;
** status (full time, temp, etc.)&lt;br /&gt;
** location&lt;br /&gt;
** job title&lt;br /&gt;
** job function&lt;br /&gt;
** qualifications&lt;br /&gt;
*** education/certification&lt;br /&gt;
*** skills&lt;br /&gt;
** contact (name,email,org)&lt;br /&gt;
&lt;br /&gt;
* Prague.tv&lt;br /&gt;
** http://prague.tv/jobs/job.php?id=246&lt;br /&gt;
** title&lt;br /&gt;
** location (city)&lt;br /&gt;
** type (permanent | part time)&lt;br /&gt;
** summary&lt;br /&gt;
** description&lt;br /&gt;
&lt;br /&gt;
* PromotionStep&lt;br /&gt;
** http://www.promotionseo.com/seo_jobs.htm&lt;br /&gt;
** requirements&lt;br /&gt;
** experience&lt;br /&gt;
** description&lt;br /&gt;
** part time / full time &lt;br /&gt;
** compensation&lt;br /&gt;
** benefits&lt;br /&gt;
** contact&lt;br /&gt;
&lt;br /&gt;
* Segunda Mano&lt;br /&gt;
** http://www.segundamano.com.ar/detalles/asp/trabajo_y_capacitación/comercial/oferta/13104203.htm&lt;br /&gt;
** category&lt;br /&gt;
** job type&lt;br /&gt;
** description&lt;br /&gt;
** contact phone&lt;br /&gt;
** province&lt;br /&gt;
** city&lt;br /&gt;
** listing date&lt;br /&gt;
&lt;br /&gt;
* Simply Hired&lt;br /&gt;
** http://www.simplyhired.com/&lt;br /&gt;
** title&lt;br /&gt;
** company&lt;br /&gt;
** location&lt;br /&gt;
** description&lt;br /&gt;
** time posted&lt;br /&gt;
** source&lt;br /&gt;
&lt;br /&gt;
* Town News&lt;br /&gt;
** http://www.pantagraphclassifieds.com/?loc=sub&amp;amp;main=Employment&lt;br /&gt;
** (Locally-hosted newspaper classifieds engine)&lt;br /&gt;
** title&lt;br /&gt;
** description&lt;br /&gt;
** time posted&lt;br /&gt;
&lt;br /&gt;
* Workopolis&lt;br /&gt;
** http://www.workopolis.com/&lt;br /&gt;
** title&lt;br /&gt;
** type (full time, etc)&lt;br /&gt;
** Location (sometimes multiple locations, seperated by ;)&lt;br /&gt;
** Job Category&lt;br /&gt;
** Industry&lt;br /&gt;
** company URL&lt;br /&gt;
** Years experience&lt;br /&gt;
** Number of openings for position&lt;br /&gt;
** Date Posted&lt;br /&gt;
** Contact Email&lt;br /&gt;
** Description&lt;br /&gt;
&lt;br /&gt;
* Yahoo! HotJobs&lt;br /&gt;
** http://hotjobs.yahoo.com/&lt;br /&gt;
** title&lt;br /&gt;
** type (full time, etc.)&lt;br /&gt;
** company&lt;br /&gt;
** location&lt;br /&gt;
** salary&lt;br /&gt;
** time posted&lt;br /&gt;
** qualifications&lt;br /&gt;
*** experience&lt;br /&gt;
*** education&lt;br /&gt;
** contact&lt;br /&gt;
** description&lt;br /&gt;
&lt;br /&gt;
* ZipRecruiter&lt;br /&gt;
** http://jobs.ziprecruiter.com/&lt;br /&gt;
** title&lt;br /&gt;
** company&lt;br /&gt;
** location&lt;br /&gt;
** description&lt;br /&gt;
** time posted&lt;br /&gt;
** source&lt;br /&gt;
&lt;br /&gt;
* Next-Jobs&lt;br /&gt;
** http://next-jobs24.com/&lt;br /&gt;
** title&lt;br /&gt;
** company&lt;br /&gt;
** location&lt;br /&gt;
** description&lt;br /&gt;
** time posted&lt;br /&gt;
** source&lt;br /&gt;
&lt;br /&gt;
* Catho Online&lt;br /&gt;
** http://www.catho.com.br/&lt;br /&gt;
** title&lt;br /&gt;
** company&lt;br /&gt;
** location&lt;br /&gt;
** description&lt;br /&gt;
** time posted&lt;br /&gt;
** source&lt;br /&gt;
&lt;br /&gt;
*salesroles&lt;br /&gt;
http://www.salesroles.com&lt;br /&gt;
** title&lt;br /&gt;
** company&lt;br /&gt;
** location&lt;br /&gt;
** description&lt;br /&gt;
** time posted&lt;br /&gt;
** source&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[job-listing]]&lt;br /&gt;
* [[job-listing-examples]]&lt;br /&gt;
* [[job-listing-formats]]&lt;br /&gt;
* [[job-listing-brainstorming]]&lt;/div&gt;</summary>
		<author><name>KP</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=get-started&amp;diff=66528</id>
		<title>get-started</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=get-started&amp;diff=66528"/>
		<updated>2017-08-21T19:08:31Z</updated>

		<summary type="html">&lt;p&gt;KP: Undo revision 66527 by Poolsky (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;Get Started&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-indent:2em;font-weight:bold;padding:1em;background:yellow&amp;quot;&amp;gt;&lt;br /&gt;
Latest: [http://microformats.org/2014/03/05/getting-started-with-microformats2 Get Started with microformats2]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get started by adding support for microformats to your website, services, and products.&lt;br /&gt;
&lt;br /&gt;
== introduction ==&lt;br /&gt;
Microformats are based on simple markup conventions that enable you to add meaningful structure to your web content.&lt;br /&gt;
&lt;br /&gt;
One of the key [[principles]] of microformats, is to privilege [[humans-first|human readable]] content. This means that you should think first and foremost of your content design being readable and accessible to web viewers. Using the [[semantic-xhtml|most appropriate HTML elements]] and applying structured [[semantic-class-names|class names]] to your markup enables you to produce content that can be clearly understood by a human audience and also used in a structured way by automated programs and other online tools. But the point is that you shouldn't have to go out of your way to produce such machine friendly markup - microformats make it easy to integrate this greater degree of structure into your websites, without the overhead of having to learn complicated new languages or formats.&lt;br /&gt;
&lt;br /&gt;
The best way to understand microformats is to start using them straight away. Since they're embedded in ordinary HTML, you can take existing pages and add these structured class names to the markup, but it's recommended that when doing this, you also take a close look at the overall tag structure that you're using - maybe there is a better way to say what you mean using basic HTML tags.&lt;br /&gt;
&lt;br /&gt;
Many common kinds of content can be marked up in microformats. Microformats are designed to be similar to current markup styles. Chances are, you already have some of them on your site. Start with the obvious ones. For example a simple, and very popular place to start is with [[h-card]] - a microformat for displaying personal and organizational contact details. You can think of [[h-card]] as a way to embed mini business cards in web pages, but glancing over the [[h-card-examples|examples]] shows a lot more possibilities than just that.  Here are some specific places to start using microformats today:&lt;br /&gt;
&lt;br /&gt;
== yourself ==&lt;br /&gt;
=== your website ===&lt;br /&gt;
If you have your own website, read [[h-card-authoring]] for tips and guidelines on how to best markup existing content with h-card and take a look at the [[h-card-examples]], then&lt;br /&gt;
* add [[h-card]] to your contact info page&lt;br /&gt;
* add h-card+[[xfn|XFN]] to your friends list or blog roll&lt;br /&gt;
* add your website and contact page to the [[h-card#Examples_in_the_wild|list of examples in the wild]]&lt;br /&gt;
&lt;br /&gt;
=== your blog ===&lt;br /&gt;
If you have a blog:&lt;br /&gt;
* add [[hatom|hAtom]] to your blog pages&lt;br /&gt;
* add your blog to the [[hatom-examples-in-wild]] page.&lt;br /&gt;
&lt;br /&gt;
== your organization ==&lt;br /&gt;
=== website ===&lt;br /&gt;
==== contact info ====&lt;br /&gt;
* '''Contact info.''' Every company or organization has a contact or about page of some sort on their website. Read [[h-card-authoring]] and add [[h-card]] to the contact/about pages along with &amp;quot;Add to address book&amp;quot; links for each h-card.&lt;br /&gt;
* '''Employee directory.''' If your company has a page listing employees or others that belong to the organization, add [[h-card]] to the listings or search results.&lt;br /&gt;
* add those pages with h-cards to the [[h-card#Examples_in_the_wild|list of examples in the wild]]&lt;br /&gt;
&lt;br /&gt;
==== events ====&lt;br /&gt;
Use hCalendar anywhere on the website that publishes event information. Start with the [http://microformats.org/code/hcalendar/creator hCalendar creator]. &lt;br /&gt;
&lt;br /&gt;
===== history =====&lt;br /&gt;
If your organization publishes its history, mark up the events noted with hCalendar, thus allowing anybody to build a dynamic timeline application with your history.&lt;br /&gt;
&lt;br /&gt;
=== products ===&lt;br /&gt;
Does your company make any products that generate HTML?&lt;br /&gt;
&lt;br /&gt;
* Make sure such products generate [[posh|POSH]] and whenever possible, the appropriate microformats.&lt;br /&gt;
* Then add those products to the [[implementations]] page.&lt;br /&gt;
&lt;br /&gt;
=== enterprise ===&lt;br /&gt;
Wondering how to use microformats in an enterprise scenario?&lt;br /&gt;
&lt;br /&gt;
Any publication of information about people, events, reviews etc. could benefit from being marked up with h-card, hCalendar, and hReview respectively.&lt;br /&gt;
&lt;br /&gt;
== other content ==&lt;br /&gt;
* Do you have an explicit copyright license on your content? Then markup the link to your license with [[rel-license]]. &lt;br /&gt;
* Do you publish social network / relationship info? Then mark that up with [http://gmpg.org/xfn/ XFN]. &lt;br /&gt;
* Are you tagging things? Then use [[rel-tag]] (for your own stuff) or [[xFolk]] (for tagging any URL).&lt;br /&gt;
* Are you publishing lists or outlines? Then use [[XOXO]]. &lt;br /&gt;
* Do you publish reviews? Then use [[hReview]].&lt;br /&gt;
** Start with the [http://microformats.org/code/hreview/creator hReview creator]. &lt;br /&gt;
* Do you publish press releases? Then use [[hatom|hAtom]].&lt;br /&gt;
&lt;br /&gt;
== what next ==&lt;br /&gt;
Once you have added microformats support to your website and helped your company and organization do so as well:&lt;br /&gt;
* [[advocacy|Advocate]] the use and support of microformats on other sites as well.&lt;br /&gt;
&lt;br /&gt;
And here are a few more tips:&lt;br /&gt;
&lt;br /&gt;
Try to produce clean, [[semantic xhtml]], AKA [[POSH]]. Where there aren't [[microformats]] for specific types of content, feel free to experiment with your own [[poshformats]].&lt;br /&gt;
&lt;br /&gt;
* [http://tantek.com/log/2004/07.html#classmeaningnotshow Class for meaning not for show]&lt;br /&gt;
* http://microformats.org/wiki/SemanticXHTMLDesignPrinciples&lt;br /&gt;
* [http://tantek.com/presentations/20040928sdforumws/semantic-xhtml.html Semantic XHTML]&lt;br /&gt;
* [http://tantek.com/presentations/2005/03/elementsofxhtml Meaningful XHTML]&lt;br /&gt;
* [http://www.tantek.com/presentations/2004etech/realworldsemanticspres.html Real World Semantics]&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== translations ==&lt;br /&gt;
Read about how to [[get-started]] in additional &amp;lt;span id=&amp;quot;languages&amp;quot;&amp;gt;languages&amp;lt;/span&amp;gt;:&lt;br /&gt;
* [[get-started-fr|français]]&lt;br /&gt;
* [[get-started-ru|Русский]]&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
* [[advocacy]]&lt;br /&gt;
* [[spread-microformats]]&lt;/div&gt;</summary>
		<author><name>KP</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=User_talk:KP&amp;diff=66230</id>
		<title>User talk:KP</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=User_talk:KP&amp;diff=66230"/>
		<updated>2017-04-10T18:07:31Z</updated>

		<summary type="html">&lt;p&gt;KP: test talk page for no reason&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;test talk page for no reason&lt;/div&gt;</summary>
		<author><name>KP</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65923</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=65923"/>
		<updated>2017-03-02T01:55:21Z</updated>

		<summary type="html">&lt;p&gt;KP: /* ignore u-camelCase properties */ add prefixing suggestion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents issues with the [[microformats2-parsing]] specification before 2016-06-20.&lt;br /&gt;
&lt;br /&gt;
'''See https://github.com/microformats/microformats2-parsing/issues for current and new issues!'''&lt;br /&gt;
&lt;br /&gt;
'''See [[microformats2-parsing#change_control|change control]] for how to move issues forward.'''&lt;br /&gt;
&lt;br /&gt;
{{warn|Note: all current issues resolved as of 2016-06-04}}&lt;br /&gt;
* Pending edits to this page, and 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;
=== unicode generation in JSON ===&lt;br /&gt;
STATUS: 2016-06-05 apparent implementers consensus at IndieWeb Summit issues resolution session.&lt;br /&gt;
* WAITING FOR: 1+ implementation to support and validate&lt;br /&gt;
&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;
* +0 [[User:WillNorris|willnorris]] (+1 to saying that microformats parsers should standardize on UTF-8 for e-* text, however I feel like e-* html should be left as unscathed as possible.  html encoding may harken to a time before UTF-8, but if the content was authored that way, shouldn't necessary be changing that)&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;
* +1 in theory to stripping it out for the same reasons Tantek mentioned above.  I haven't tested this in go, but would be surprised if it had issues.  [[User:WillNorris|WillNorris]] 22:37, 5 June 2016 (UTC)&lt;br /&gt;
* ...&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?&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;
*** +1 consensus in the room at IWS 2016 (willnorris, gRegor, kylewm, tantek): do this for specifically for implied URL, do nothing for now for name and photo. [[User:WillNorris|WillNorris]] 22:56, 5 June 2016 (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 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;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 from the room at IWS 2016 [[User:WillNorris|WillNorris]] 22:57, 5 June 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&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;
Most recent resolved issues first:&lt;br /&gt;
&lt;br /&gt;
=== exclude style elements before parsing ===&lt;br /&gt;
2016-06-05 RESOLVED. 2016-07-14 spec updated.&lt;br /&gt;
&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;
* +1 implemented in go parser [[User:WillNorris|WillNorris]] 22:16, 5 June 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== default generated HTML ===&lt;br /&gt;
2016-06-05 RESOLVED. No change to spec.&lt;br /&gt;
&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://granary-demo.appspot.com/?input=json-mf2&amp;amp;output=html#input&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;
* -1 Agree with Kyle above... this sounds like a great tool that someone should build and we could even publish &amp;quot;recommended&amp;quot; markup if you don't already have your own template, but this doesn't really belong in the mf2 spec itself. [[User:WillNorris|WillNorris]] 22:32, 5 June 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== uf2 children on backcompat properties ===&lt;br /&gt;
2016-06-05. RESOLVED. Verified 2016-07-14 [[microformats2-parsing#parse_an_element_for_class_microformats|parse an element for class microformats]] appears to already enforce this behavior. No additional spec changes made.&lt;br /&gt;
&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;
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;
&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;
** +1 makes sense [[User:WillNorris|WillNorris]] 22:23, 5 June 2016 (UTC)&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;
2016-06-05. RESOLVED. [http://microformats.org/wiki/index.php?title=microformats2-parsing&amp;amp;diff=65620&amp;amp;oldid=65604 SPEC UPDATED 2016-06-23].&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;
* +1 implemented in go library [[User:WillNorris|WillNorris]] 22:19, 5 June 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== de-dupe URLs? ===&lt;br /&gt;
2016-06-05. REJECTED. NO SPEC CHANGE.&lt;br /&gt;
&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;
* -1 willnorris&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== img fallback in p- ===&lt;br /&gt;
2016-06-05. ACCEPTED. SPEC UPDATED.&lt;br /&gt;
&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;
* +1 [[User:GRegorLove|gRegor]] agreed&lt;br /&gt;
* +1 totally makes sense to me [[User:WillNorris|WillNorris]] 21:21, 5 June 2016 (UTC)&lt;br /&gt;
* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== namespacing for better integrability ===&lt;br /&gt;
2016-06-05. REJECTED.&lt;br /&gt;
&lt;br /&gt;
All the implied class names may conflict with existing stylesheets, because the prefixes used are too short and are not proper namespaces for what follows them (&amp;quot;p-&amp;quot;, &amp;quot;u-&amp;quot;, &amp;quot;e-&amp;quot;, &amp;quot;h-&amp;quot;, &amp;quot;dt-&amp;quot;, &amp;quot;x-&amp;quot;, ...) and too many of these short prefixes are used.&lt;br /&gt;
&lt;br /&gt;
You should add the support for namespacing with arbitrary &amp;quot;MYCARD&amp;quot; name usiong a second class on the same root element that uses class &amp;quot;h-card&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card h-card-ns-MYCARD&amp;quot;&amp;gt;&amp;lt;!-- this defines the &amp;quot;MYCARD&amp;quot; namespace used below --&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; class=&amp;quot;MYCARD-p-org MYCARD-p-name&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;MYCARD-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;p class=&amp;quot;e-form&amp;quot;&amp;gt;&amp;lt;!-- &amp;quot;e-form&amp;quot; is not recognized, because not in a known namespace --&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is important because tools are autogenerating class names and stylesheets for HTML and associate them with other functions not intended for vCards.&lt;br /&gt;
&lt;br /&gt;
In fact this support should be added in ALL microformats, not just for vCards...&lt;br /&gt;
&lt;br /&gt;
And this will reduces a lot the ambiguities in microformat parsers by allowing them to be more selective (in fact the namespace being used as a common prefix for all properties, parsers could be faster, additionally it would allow easier editing on vcards in HTML, for operations like finds/replace, or even for automated replacements using regexp searches.&lt;br /&gt;
&lt;br /&gt;
It would also allow nested vcards created from different tools using their own private extensions, to not conflict each other on these extensions, if they can be properly namespaced.&lt;br /&gt;
&lt;br /&gt;
Note: these defined namespaces are automatically replacable by parsers if they regenerate a new composite document (they could be removed by tools if there are no conflict, or shortened, or made unique by changing them with another arbitrary name).&lt;br /&gt;
&lt;br /&gt;
The other solution would be to use namespaces on the HTML attribute names themselves, notably class:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;p-author h-card h-card-ns-MYCARD&amp;quot;&amp;gt;&amp;lt;!-- this defines the &amp;quot;MYCARD&amp;quot; namespace used below --&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/&amp;quot; MYCARD:class=&amp;quot;p-org p-name&amp;quot;&amp;gt;&amp;lt;img MYCARD: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;p class=&amp;quot;e-form&amp;quot;&amp;gt;&amp;lt;!-- &amp;quot;e-form&amp;quot; is not recognized, because not in a known namespace --&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But this solution will not work reliably in strict XHTML or XML parsers if there's no XML namespace definition, or this could invalidate the document on basic DOM parsers for HTML (e.g. in MediaWiki, unknown HTML attributes are discarded so that MYCARD:class=&amp;quot;...&amp;quot; would not appear at all in the final HTML, only class=&amp;quot;...&amp;quot; is accepted).&lt;br /&gt;
&lt;br /&gt;
Note: this would also cleanly solve problems like the one related in [[#ignore u-camelCase properties]] below !&lt;br /&gt;
&lt;br /&gt;
Finally, it woul allow the coexistence of multiple microformats coexisting in the same document (only the root element is distinctive, but the &amp;quot;p-*&amp;quot;, &amp;quot;u-*&amp;quot;, &amp;quot;dt-*&amp;quot; elements will collide: which microformat should interpret them? It is easy to solve by assigning to the root (&amp;quot;h-&amp;lt;microformat&amp;gt;&amp;quot; element for each microformat a namespace that will be used in their content, such as &amp;quot;h-card-ns-MYCARD&amp;quot; for assigning the &amp;quot;MYCARD&amp;quot; namespace to the &amp;quot;h-card&amp;quot; microformat, or &amp;quot;h-goog-doc-ns-MYDOC&amp;quot; to assign the &amp;quot;MYDOC&amp;quot; namespace to the &amp;quot;h-goog-doc&amp;quot; microformat that google may want to develop for Google Docs, or &amp;quot;h-x-doubleclick-X78954218&amp;quot; for assigning the &amp;quot;X78954218&amp;quot; namespace that would be used in a &amp;quot;x-doubleclick&amp;quot; custom microformat developed by doubleclick with contents using &amp;quot;X78954218-p-*&amp;quot;, &amp;quot;X78954218-u-*&amp;quot;, &amp;quot;X78954218-e-*&amp;quot;, &amp;quot;X78954218-dt-*&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
[[User:Verdy p|Verdy p]] 03:54, 1 June 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* -1 [[User:GRegorLove|gRegor]]: see [[namespaces-considered-harmful]]; also seems to solve only hypothetical problems. Are there real-world parsing collision examples?&lt;br /&gt;
* -1 agreed with gRegor above.  I would certainly want to see real world parsing problems before adding just a heavyweight &amp;quot;solution&amp;quot;. [[User:WillNorris|WillNorris]] 21:16, 5 June 2016 (UTC)&lt;br /&gt;
* -1 [[User:Tantek|Tantek]]: historically none of these namespace setting/using proposals have actually survived in the wild on the web, they all get co-opted to treating the shorthands/prefixes in a hardcoded way, e.g. og: etc. All evidence to date is against such proposals, plus there's no concrete examples provided to motivate this change, only theory.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== consistent implied name url from grandchildren of root ===&lt;br /&gt;
2016-06-05. ACCEPTED. SPEC UPDATED.&lt;br /&gt;
&lt;br /&gt;
See https://github.com/microformats/tests/issues/50&lt;br /&gt;
&lt;br /&gt;
Summary: &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Proposal to update spec to include the following at the end of implied url parsing rules:&lt;br /&gt;
* else if .h-x&amp;gt;:only-child&amp;gt;a[href]:only-of-type:not[.h-*] then use that [href] for url&lt;br /&gt;
* else if .h-x&amp;gt;:only-child&amp;gt;area[href]:only-of-type:not[.h-*] then use that [href] for url&lt;br /&gt;
these are identical to the existing rules with the addition of the :only-child selector.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* +1 [[User:Tantek|Tantek]]&lt;br /&gt;
* +1 [[User:WillNorris|willnorris]]&lt;br /&gt;
* +1 gRegor&lt;br /&gt;
* +1 kylewm&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== need more not h-* to avoid child root implying properties ===&lt;br /&gt;
2016-06-05. ACCEPTED. SPEC UPDATED.&lt;br /&gt;
&lt;br /&gt;
See https://github.com/microformats/tests/issues/52 for an example of this&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* any element being used to imply a property&lt;br /&gt;
* any intermediate :only-child to get to a grandchild element to imply a property&lt;br /&gt;
Should also be restricted to :not[.h-*]&lt;br /&gt;
&lt;br /&gt;
E.g. &amp;lt;code&amp;gt;&amp;gt;:only-child&amp;gt;&amp;lt;/code&amp;gt; should be &amp;lt;code&amp;gt;&amp;gt;:only-child:not[.h-*]&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;
* +1 [[User:Tantek|Tantek]]&lt;br /&gt;
* +1 willnorris&lt;br /&gt;
* +1 gRegor&lt;br /&gt;
* +1 kylewm&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard datetime format ===&lt;br /&gt;
2016-06-04 (before). REJECTED.&lt;br /&gt;
&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]] we are maintaining whole properties as authored, with authored level of specificity, i.e. not adding minutes or seconds if they are not in the input date string, and [[vcp]] cases handled in separate issue.&lt;br /&gt;
** Consensus in room at IWC 2016 session also. Resolving accordingly.&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;
2016-06-04 (before). ACCEPTED. SPEC UPDATED.&lt;br /&gt;
&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;
And [[vcp]] updated too. [[User:Tantek|Tantek]] 22:53, 5 June 2016 (UTC)&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;
* 2016-05-30 Resolved and incorporated into [[microformats2-parsing]]. [[User:Tantek|Tantek]] 23:32, 30 May 2016 (UTC)&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;
Consensus resolutions:&lt;br /&gt;
* '''Drop value-class-pattern implying 00 seconds.''' Note: keeping/implying 00 minutes due to common human usage of whole hours to specifically mean &amp;quot;on the hour&amp;quot; which is 00 minutes. The same implied precision does not exist for seconds in practice.&lt;br /&gt;
** 2016-05-18 [[vcp]] updated with this resolution.&lt;br /&gt;
* '''Value-class-pattern parsing should instruct to use a single space as the separator.'''&lt;br /&gt;
** 2016-05-18 [[vcp]] updated with this resolution.&lt;br /&gt;
&lt;br /&gt;
Dropped:&lt;br /&gt;
* replace a &amp;quot;T&amp;quot; separator (when authored that way) with a single space&lt;br /&gt;
** No consensus on this, some opposition. Prefer to &amp;quot;process the content as little as possible, so it is as authored&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== ignore u-camelCase properties ===&lt;br /&gt;
RESOLVED. [http://microformats.org/wiki/index.php?title=microformats2-parsing&amp;amp;diff=65418&amp;amp;oldid=65356 SPEC UPDATED 2016-02-29].&lt;br /&gt;
&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;
For your own site, it might be a good idea to prefix the &amp;quot;utility classes&amp;quot; e.g. [http://danmall.me/articles/cooking-with-design-systems/ Cooking with Design Systems by Dan Mall] &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;
* +1 (see also below) [[User:WillNorris|WillNorris]] 22:15, 5 June 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional proposal: (same reasoning, filter out more crap)&lt;br /&gt;
* microformats2 parsers MUST IGNORE all property classnames where the property name has any capital letters or numerals (0-9).&lt;br /&gt;
* microformats2 class names MUST contain only lowercase letters and dash: /[a-z\-]/&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 I've already implemented this in the go library, additionally extending it to all properties, not just u-* [[User:WillNorris|WillNorris]] 22:15, 5 June 2016 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&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>KP</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=parsers&amp;diff=65750</id>
		<title>parsers</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=parsers&amp;diff=65750"/>
		<updated>2016-09-23T17:51:32Z</updated>

		<summary type="html">&lt;p&gt;KP: /* Python */ removed bleeding edge version since it is way behind now&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;
== Elixir ==&lt;br /&gt;
* [https://github.com/ckruse/microformats2-elixir ckruse/microformats2-elixir] - Elixir microformats2 parser&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;
== Haskell ==&lt;br /&gt;
* [https://github.com/myfreeweb/microformats2-parser myfreeweb/microformats2-parser] - Haskell microformats2 parser&lt;br /&gt;
** live textarea entry: https://unrelenting.technology/mf2/&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;
&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>KP</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=65145</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=65145"/>
		<updated>2015-07-28T19:47:38Z</updated>

		<summary type="html">&lt;p&gt;KP: raise datetime format and noscript issues&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;
=== 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>KP</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=mf2py&amp;diff=64548</id>
		<title>mf2py</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=mf2py&amp;diff=64548"/>
		<updated>2014-09-25T00:08:26Z</updated>

		<summary type="html">&lt;p&gt;KP: added tommorris' live tester&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
This is a holding page for '''mf2py''', the [[microformats2]] parser for Python.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/tommorris/mf2py tommorris/mf2py] on github&lt;br /&gt;
* [https://pypi.python.org/pypi/mf2py/ mf2py] on PyPI&lt;br /&gt;
&lt;br /&gt;
You can test how mf2py parses arbitrary HTML [https://kartikprabhu.com/connection/mfparser here] or with a URL input [https://mf2py.herokuapp.com/ here]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[parsers]]&lt;br /&gt;
* [[microformats2]]&lt;br /&gt;
* [[validators]]&lt;/div&gt;</summary>
		<author><name>KP</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=xfn-brainstorming&amp;diff=64423</id>
		<title>xfn-brainstorming</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=xfn-brainstorming&amp;diff=64423"/>
		<updated>2014-07-13T16:02:17Z</updated>

		<summary type="html">&lt;p&gt;KP: /* rel-reader */ about text content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt; XFN Brainstorming &amp;lt;/entry-title&amp;gt;&lt;br /&gt;
{{TOC-right}}&lt;br /&gt;
This page is for brainstorming about various uses and details of [[XFN]], as well as collecting input for potential extensions.&lt;br /&gt;
&lt;br /&gt;
== Required Reading ==&lt;br /&gt;
Before participating in any XFN brainstorming please read and understand the following:&lt;br /&gt;
* [http://gmpg.org/xfn/intro XFN intro]&lt;br /&gt;
* [http://gmpg.org/xfn/background XFN background]&lt;br /&gt;
* [[xfn-faq|XFN FAQ]] &lt;br /&gt;
* [http://gmpg.org/xfn/and XFN and other services]&lt;br /&gt;
* [[rel-faq]]&lt;br /&gt;
&lt;br /&gt;
Note that all existing XFN values were based on research that showed real world sites that indicated such relationships explicitly via text and hyperlinks to other sites.  Thus any new semantics or values will be more seriously considered if URLs demonstrating existing text labeling and hyperlinking behavior are provided.&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* [http://tantek.com/ Tantek Çelik]&lt;br /&gt;
* [[User:CiaranMc |CiaranMc ]]&lt;br /&gt;
* [http://factoryjoe.com/ Chris Messina]&lt;br /&gt;
* [http://kevinmarks.com/ Kevin Marks]&lt;br /&gt;
&lt;br /&gt;
== general ==&lt;br /&gt;
* [[xfn-wants]]&lt;br /&gt;
&lt;br /&gt;
== Identity Consolidation ==&lt;br /&gt;
See [[rel-me]] and [[identity-consolidation]]. &amp;lt;span id=&amp;quot;Frames&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Indicating non-identity ===&lt;br /&gt;
I think we need a way to indicate that another page should not be consolidated into your identity. - KevinMarks&lt;br /&gt;
&lt;br /&gt;
==== common name disambiguation ====&lt;br /&gt;
If you have a common name, creating a disambiguation page or pages to indicate which ones aren't you is useful for indexers and people alike. In fact there are examples of people already creating such a page and linking to pages that are not them. Real world use cases that would benefit:&lt;br /&gt;
* Kevin Kelly (the former Wired editor) has put together a page to indicate [http://kevinkelly.name|other people also called &amp;quot;Kevin Kelly&amp;quot;].&lt;br /&gt;
* [http://vadim.com Vadim Akslerod] has created a page of [http://vadim.com/vadim/ Vadims on the Net] that link to other people called Vadim.&lt;br /&gt;
&lt;br /&gt;
==== accidental or malicious rel-me links ====&lt;br /&gt;
If someone accidentally or maliciously links to one of my pages with rel=&amp;quot;me&amp;quot; it would be good to be able to actually deny the connection, rather than just passively not link back. See [http://socialgraph-resources.googlecode.com/svn/trunk/samples/findyours.html?q=kevinmarks.com | the social graph API results for kevinmarks.com] for examples. - KevinMarks&lt;br /&gt;
&lt;br /&gt;
This appears to be more of a theoretical use case (as compared to the common name disambiguation) because the real world use ''is'' to simply '''not''' link back, and I don't think we should encourage people to add links to things that are not them, nor are they likely to, especially if it is a spammer/stalker/griefer that is linking to them. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
==== notme proposal ====&lt;br /&gt;
initial proposal: &amp;lt;code&amp;gt;rel=&amp;quot;notme&amp;quot;&amp;lt;/code&amp;gt;, though very open to better suggestions.&lt;br /&gt;
&lt;br /&gt;
== Extending family relationships ==&lt;br /&gt;
&lt;br /&gt;
=== grandparent ===&lt;br /&gt;
&amp;lt;cite&amp;gt;[http://www.gmpg.org/xfn/background The XFN: Background page]&amp;lt;/cite&amp;gt; says:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
We considered adding &amp;quot;grandparent,&amp;quot; but in the end dropped the term because it seemed unlikely to be used in the near future. It may appear in future versions of XFN.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Presumably the assumption is that a grandparent won't have a website, but:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* I think it's important in some situations to capture the age difference in a relationship in a way that rel=&amp;quot;kin&amp;quot; doesn't seem to.&lt;br /&gt;
** Additional XFN rel values is the wrong way to represent age information (even relative). Instead, mark up each person's page with an hCard for them that has a &amp;lt;code&amp;gt;bday&amp;lt;/code&amp;gt; property, with even just the year if you want - that could then be used to determine an approximate age difference, which is presumably all that is desired. [[User:Tantek|Tantek]]&lt;br /&gt;
* ''rel=kin'' with an age difference of, say, 45 years, might represent any of parent, grandparent, uncle, sibling, cousin or more.&lt;br /&gt;
** Again, age (and thus differences) should be represented by use of the [[hCard]] 'bday' property, not rel. [[User:Tantek|Tantek]] 19:27, 15 June 2009 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== grandparent examples ====&lt;br /&gt;
If people actually find and document non-trivial examples of links to grandparent sites and this section gets too big, perhaps we can move it to [[grandparent-examples]].&lt;br /&gt;
&lt;br /&gt;
To date, no real world examples have been documented of URLs of grandchildren linking to their grandparents, thus, per the microformats [[process]], we should not complicate a format for a ''theoretical'' need. &lt;br /&gt;
&lt;br /&gt;
Anyone that cares to pursue this may find some real world examples to document in the following web searches (note that search links themselves are not examples, but merely a step towards finding real world examples which still need to be individually analyzed, checked against being false positives etc.) &lt;br /&gt;
* [http://www.google.co.uk/search?&amp;amp;q=%22my+grandpa%27s+website%22 search for &amp;quot;my grandpa's website&amp;quot;]&lt;br /&gt;
* [http://www.google.co.uk/search?&amp;amp;q=%22my+grandfather%27s+website%22 search for &amp;quot;my grandfather's website&amp;quot;]&lt;br /&gt;
* [http://www.google.co.uk/search?&amp;amp;q=%22my+grandma%27s+website%22 search for &amp;quot;my grandma's website&amp;quot;]&lt;br /&gt;
* [http://www.google.co.uk/search?&amp;amp;q=%22my+grandmother%27s+website%22 search for &amp;quot;my grandmother's website&amp;quot;]. &lt;br /&gt;
&lt;br /&gt;
See also [[genealogy-examples]].&lt;br /&gt;
&lt;br /&gt;
=== ancestor descendant ===&lt;br /&gt;
Even if they don't maintain it themselves (or are deceased) there might be a URL that does a good job of representing a person.&lt;br /&gt;
&lt;br /&gt;
Consider a site about one's family tree.  It might have something like:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
I can trace my family back to &amp;lt;a href=&amp;quot;http://en.wikipedia.org/wiki/William_I_of_England&amp;quot;&amp;gt;William the conqueror.&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In these cases it would be useful to have &amp;lt;code&amp;gt;rel=&amp;quot;ancestor&amp;quot;&amp;lt;/code&amp;gt;, and perhaps a corresponding &amp;lt;code&amp;gt;rel=&amp;quot;descendant&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
-CiaranMc&lt;br /&gt;
&lt;br /&gt;
See also: [[genealogy-brainstorming#Relationships]]&lt;br /&gt;
&lt;br /&gt;
* rel=&amp;quot;kin&amp;quot; can be considered sufficient until at least some number of non-trivial real world examples are provided.&lt;br /&gt;
&lt;br /&gt;
==== ancestor descendant examples ====&lt;br /&gt;
If this section gets too big, perhaps we can move it to [[ancestor-descendant-examples]].&lt;br /&gt;
* Wikipedia examples&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Winston_Churchill#Family_and_early_life Winston Churchill, with list if ancestors]&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Elizabeth_II_of_the_United_Kingdom#Marriage Queen Elizabeth II]: refers to &amp;quot;Queen Victoria as [her] great-great-grandmother&amp;quot;. &lt;br /&gt;
* See also [[genealogy-examples]].&lt;br /&gt;
&lt;br /&gt;
So far only a couple of (representative) real world examples (from just one site, Wikipedia) have been provided, thus, per the microformats [[process]], we should not complicate a format for a need clearly outside of the 80/20.&lt;br /&gt;
&lt;br /&gt;
== Simple Groups and Members ==&lt;br /&gt;
A very simple extension to XFN could enable decentralized group membership. E.g.&lt;br /&gt;
* rel=&amp;quot;group&amp;quot;.  A person could link from their page to the page of a group that they belong to (e.g. their company, school, DJ collective etc.) and thus assert that they belong to that group.&lt;br /&gt;
* rel=&amp;quot;member&amp;quot;.  The web pages of groups could link to who they consider members and thus assert that person's membership.&lt;br /&gt;
&lt;br /&gt;
The relationships could be required bi-directional in order to confirm group membership, that is, both the individual must link to the group with rel=&amp;quot;group&amp;quot; and the group must link to the individiual with rel=&amp;quot;member&amp;quot; in order for the membership to be considered &amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
See also [[group-brainstorming]] for more on this including documentation of examples.&lt;br /&gt;
&lt;br /&gt;
== fans and followers ==&lt;br /&gt;
It's becoming a common aspect of many social networks (see list below) that you have unreciprocated and non-friend-based connections to people. These connections are particularly noteworthy where you don't really ever expect to have your connections reciprocated, but instead are similar to the idea of &amp;quot;rel-muse&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
=== follower and following ===&lt;br /&gt;
The brainstorming on fans and followers and inverses thereof has appeared to settle (for many months - over a year(?)) on &amp;quot;follower&amp;quot; and &amp;quot;following&amp;quot; as mutual inverse relationship terms.&lt;br /&gt;
&lt;br /&gt;
Current summary:&lt;br /&gt;
&lt;br /&gt;
* rel=&amp;quot;follower&amp;quot; - links to someone who is a follower, that is they are following you.&lt;br /&gt;
* rel=&amp;quot;following&amp;quot; - links to someone who is one of your &amp;quot;followings&amp;quot;, i.e. someone you are following.&lt;br /&gt;
&lt;br /&gt;
Summary discussion:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* I'd say they're ready for experimentation on websites in the wild. Once we have examples in the wild, we can promote this to a draft of [[rel-follower]]. [[User:Tantek|Tantek]] 00:13, 21 October 2010 (UTC)&lt;br /&gt;
* We've had consensus on this for a while now - consider this an invitation for anyone to start stubbing out minimal descriptions for [[rel-follower]] and [[rel-following]], and then we can add them as brainstorming values as well as register them for use in HTML5 in the [[existing-rel-values]] page. [[User:Tantek|Tantek]] 16:55, 30 June 2011 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FAQ:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Q: Does &amp;lt;code&amp;gt;rel=following&amp;lt;/code&amp;gt; mean that I read all their content daily/hourly/in real time?[http://indiewebcamp.com/irc/2013-08-28/line/1377706665]&lt;br /&gt;
** A: &amp;lt;code&amp;gt;rel=following&amp;lt;/code&amp;gt; just means reading some amount, no implications about timeliness, nor comprehensiveness.[http://indiewebcamp.com/irc/2013-08-28/line/1377706765]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See below for the analysis and brainstorming that led to this outcome and for specific discussions.&lt;br /&gt;
&lt;br /&gt;
=== fan follower examples ===&lt;br /&gt;
Sites that have the semantic / implied-schema of &amp;quot;fan&amp;quot; or &amp;quot;follower&amp;quot;)&lt;br /&gt;
* http://crowdvine.com/ (has fans and mutual fans and want to meet)&lt;br /&gt;
* http://twitter.com/ (has followers vs friends)&lt;br /&gt;
* http://upcoming.org/ (has fans vs friends)&lt;br /&gt;
* http://www.sugarloot.com (has Fans vs Favorites)&lt;br /&gt;
&lt;br /&gt;
=== possible inverse of fan terms ===&lt;br /&gt;
Brainstorm list of possible terms (for an inverse of fan/follower):&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* source&lt;br /&gt;
** +1 I like this as a neutral term, &amp;lt;s&amp;gt;except that it would be better kept as a rel value for atom:source in [[hAtom]]&amp;lt;/s&amp;gt; (on re-reading the Atom spec, atom:source should be a class on a containing element) [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
* influence&lt;br /&gt;
* influencer&lt;br /&gt;
** 0 [[User:Tantek|Tantek]] - I like this one, it seems to represent the implied semantics.  If I follow someone, then they are an &amp;quot;influencer&amp;quot; to me. However, the point made by [[User:Donohoe]] below is a good one thus I've changed my opinion from +1 to +0 on this option.&lt;br /&gt;
** -1 Sounds like &amp;quot;influenza&amp;quot;, and just because I follow someone, doesn't mean they influence me. [[User:Gazza|Gazza]]&lt;br /&gt;
** -1 - influence can be negative as well as positive: &amp;quot;The child only shoplifted because he was under the influence of older boys&amp;quot;. [[User:AndyMabbett|Andy Mabbett]] 01:04, 26 Jan 2008 (PST)&lt;br /&gt;
*** -1 Argument from theoretical example. [[User:Tantek|Tantek]] 21:46, 15 June 2009 (UTC)&lt;br /&gt;
** -1 This seems too strong; the relationship is not meant to imply an endorsement; we have [[vote-links]] for that [[User:Kevin Marks|Kevin Marks]] Donohoe's reasoning below is good and I prefer 'following'&lt;br /&gt;
** -1 This value is assigned one of 2 ways; arbitrarily by app, or by the user. I don't trust an app to make a decision on what constitutes an ''influencer'' and I don't see a user choosing that in its current wording --[[User:Donohoe|Donohoe]] 19:55, 5 Aug 2008 (PDT)&lt;br /&gt;
*** I tend to agree with [[User:Donohoe|Donohoe]]'s reasoning. [[User:Tantek|Tantek]] 21:46, 15 June 2009 (UTC)&lt;br /&gt;
* leader&lt;br /&gt;
* star&lt;br /&gt;
* hero&lt;br /&gt;
* favorite&lt;br /&gt;
* guider&lt;br /&gt;
* role-model&lt;br /&gt;
* idol&lt;br /&gt;
** -1 [[User:Tantek|Tantek]] These all seem too strong and sometimes imply more subordination than most people want.&lt;br /&gt;
* subscription&lt;br /&gt;
** +1 Tony Stubblebine&lt;br /&gt;
** +1 this one seems most neutral to me (a good thing) [[User:STHayden|STHayden]] 08:35, 3 Mar 2008 (PST)&lt;br /&gt;
** -1 this makes sense in a feed-reader context, but not necessarily in a blogroll one; it implies the content rather than the person [[User:Kevin Marks|Kevin Marks]] 14:30, 24 Mar 2008 (PDT)&lt;br /&gt;
** +1 Was neutral, now in favor --[[User:Donohoe|Donohoe]] 19:11, 6 Aug 2008 (PDT)&lt;br /&gt;
** -1 against for same reasons as Kevin Marks. And &amp;quot;subscription&amp;quot; doesn't sound like a term for a person. --  [[User:Tantek|Tantek]]&lt;br /&gt;
* of-interest&lt;br /&gt;
* interest&lt;br /&gt;
* followee&lt;br /&gt;
* focus&lt;br /&gt;
* &amp;lt;span id=&amp;quot;following&amp;quot;&amp;gt;following&amp;lt;/span&amp;gt; - as the singular of &amp;quot;followings&amp;quot;. If someone is one of your &amp;quot;followings&amp;quot;, then you are following that someone, as opposed to if someone is one of your &amp;quot;followers&amp;quot;, then that someone is following you! It may sound a bit clumsy/awkward as a term at first, but I think that's actually a sign of novel usage, which has some appeal because then it means the term may be available for us to fill it with this meaning - or I should say, amplify this meaning as it [http://search.twitter.com/search?q=followings has been given by existing Twitter users].&lt;br /&gt;
** +1 [[User:Tantek|Tantek]] '''following''' is the best term I have seen for the inverse of fan/follower, and paired with '''follower''', provides a good enough complementary pair of relationships to express both directions.&lt;br /&gt;
** Note that Google has now [http://buzz.blogger.com/2008/08/show-off-your-followers.html adopted the &amp;quot;follow&amp;quot; terminology]. -- [http://factoryjoe.com/ Chris Messina]&lt;br /&gt;
** +1 'following'is widely adopted. Lets just decide on this and get it implemented. &lt;br /&gt;
** +1 I think 'following' is now well understood thanks to both Twitter and Blogger using it, and worth codifying here [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
* follows&lt;br /&gt;
** proposed by [http://schema.org/Person unknown authors at schema.org] I assume this meant to be a verb (like 'knows' ) rather than a plural adjective.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rejected fan follower terms ===&lt;br /&gt;
==== rel-fan ====&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
I would propose adding &amp;quot;rel-fan&amp;quot; or &amp;quot;rel-follower&amp;quot; to the collection of XFN values -- as being something like a &amp;quot;contact&amp;quot; or a &amp;quot;muse&amp;quot; but having a different purpose within the realm of social networking. Again, given that this is showing up in social networks like Pownce (fan), Twitter (follower), and that these words are becoming common, I wonder if it wouldn't make sense to even ditch rel-muse in favor of rel-follower and rel-fan (the former implying some kind of positive social stalking and the latter a kind of amiable appreciation for someone's work). &lt;br /&gt;
&lt;br /&gt;
This fan/follower designation seems sorely lacking from Flickr where not everyone falls into either contact, friend or family... but in many cases, you just like someone's photos and want to be able to check in on them every now and again, similar to the way that people &amp;quot;follow&amp;quot; or &amp;quot;subscribe&amp;quot; to blog feeds... Someone who reads my blog feed could be considered a &amp;quot;follower&amp;quot; -- as in, &amp;quot;someone who follows my blog&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
- Chris Messina&lt;br /&gt;
&lt;br /&gt;
Chris, rel-fan or rel-follower would work for you to point to people who follow you, but the converse case is probably more useful, saying who you follow (eg blogroll case too). We need a good noun for that relationship that describes how you view them, that is less coloured than 'muse' currently is by being classified as romantic. rel-source or rel-influence maybe? Very hard to come up with a good noun. &lt;br /&gt;
&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 12:57, 17 Aug 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
* Hence the existence of the HTML &amp;quot;rev&amp;quot; attribute. [[User:TobyInk|TobyInk]] 00:12, 25 Feb 2008 (PST)&lt;br /&gt;
** The [[rel-faq#Should_rev_even_be_used|use of rev has been deprecated]] since authors nearly always get it wrong. [[User:Tantek|Tantek]] 10:32, 6 Aug 2008 (PDT)&lt;br /&gt;
*** I'm not suggesting that we create a new microformat using rev — I'm pointing out that if we define &amp;lt;code&amp;gt;rel=fan&amp;lt;/code&amp;gt; (for linking to your fans) then &amp;lt;code&amp;gt;rev=fan&amp;lt;/code&amp;gt; &amp;quot;automatically pops into meaning&amp;quot;. (Besides which the usually quoted evidence of rev being &amp;quot;confusing&amp;quot; to authors (i.e. Google's analysis) is flaky at best.) [[User:TobyInk|TobyInk]] 15:26, 6 Aug 2008 (PDT)&lt;br /&gt;
**** Suggesting the use of &amp;lt;code&amp;gt;rev=fan&amp;lt;/code&amp;gt; (as you just did) *is* creating a new microformat using rev, so yes, you are suggesting it.  And Google's analysis backed up many years of my (and others') personal anecdotal experience with web developers where &amp;amp;gt;90% did not understand the difference between rel and rev. [[User:Tantek|Tantek]] 17:53, 6 Aug 2008 (PDT)&lt;br /&gt;
***** My point is that as per the [http://www.w3.org/TR/REC-html40/struct/links.html#adef-rev HTML 4 definition of &amp;lt;code&amp;gt;rev&amp;lt;/code&amp;gt;] any time anyone defines a new link type &amp;lt;code&amp;gt;rel=''X''&amp;lt;/code&amp;gt;, the meaning of &amp;lt;code&amp;gt;rev=''X''&amp;lt;/code&amp;gt; becomes defined too. This is unavoidable. We should define new link types in terms of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; rather than &amp;lt;code&amp;gt;rev&amp;lt;/code&amp;gt; for clarity, but we can't prevent people from taking advantage of the facilities inherent in (X)HTML to mark up the inverse meaning. (e.g. [http://changelog.ca/log/2005/09/12/proposed-microformats-for-reputation-and-trust-metrics &amp;lt;code&amp;gt;rev=tag&amp;lt;/code&amp;gt; mention], [http://singpolyma.net/2007/05/the-state-of-distributed-social-networking/ and again], [http://styrheim.weblogg.no/311005201154_revtags.html and again]) [[User:TobyInk|TobyInk]] 01:17, 7 Aug 2008 (PDT)&lt;br /&gt;
****** We can avoid use of 'rev' by (1) specifically recommending against use of it as the [[rel-faq#Should_rev_even_be_used|rel FAQ does]], and (2) by providing an inverse term that can be used with 'rel' so there is no need to use 'rev'. [[User:Tantek|Tantek]] 19:27, 15 June 2009 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== rel-reader ====&lt;br /&gt;
For blogrolls at least, what about rel-read / rel-reader? -- [[User:SteveIvy|Steve Ivy]]&lt;br /&gt;
&lt;br /&gt;
Steve, &amp;quot;read&amp;quot; is still a verb (and [[rel-values]] need to be nouns), and &amp;quot;reader&amp;quot; would still imply that they are a &amp;quot;reader&amp;quot; of yours, rather than vice versa. -- [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
How about &amp;quot;rel-reader&amp;quot; instead of &amp;quot;rel-follower&amp;quot; and &amp;quot;rel-reading&amp;quot; instead of &amp;quot;rel-following&amp;quot; ? It has the more 'neutral' and 'real world' connotation of actually reading and not 'following' people around. Also refers to the traditional word for such things in the book-world as in &amp;quot;Neil Gaiman's readers&amp;quot; and &amp;quot;I am reading Neil Gaiman&amp;quot; -- [[User:KP|Kartik]]&lt;br /&gt;
&lt;br /&gt;
On further thought and discussion with [[User:Tantek|Tantek]] (see: [http://logs.glob.uno/?c=freenode%23microformats&amp;amp;s=1+Jul+2014&amp;amp;e=1+Jul+2014#c72761 IRC logs reference] ), reader/reading denote textual content which seems too narrow for the Web.-- [[User:KP|Kartik]]&lt;br /&gt;
&lt;br /&gt;
==== rel-subscriber ====&lt;br /&gt;
What about ''subscriber'' instead - also very neutral and more akin to others in the list? --[[User:Donohoe|Donohoe]] 19:55, 5 Aug 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;subscriber&amp;quot; is no different from &amp;quot;reader&amp;quot; in this respect, and means the *opposite* of what we are looking for.  I.e. a rel=&amp;quot;subscriber&amp;quot; link to someone would mean that someone is a subscriber of my content/feed. -- [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== past examples ===&lt;br /&gt;
Sites that previously provided real world examples of fans vs friends:&lt;br /&gt;
* http://pownce.com/ (has fans vs friends) - until 2008-12-15 when the site moved to read-only mode.&lt;br /&gt;
&lt;br /&gt;
== favorites ==&lt;br /&gt;
Another possibility is perhaps 'favorite', that is, people do link to favorite bands for example, which is similar to saying they are a fan of the band. Thus you could add &amp;lt;code&amp;gt;rel=&amp;quot;favorite&amp;quot;&amp;lt;/code&amp;gt; to such hyperlinks to indicate that that music band over there is a favorite of yours. [[User:Tantek|Tantek]] 17:57, 2 Oct 2007 (PDT) based on a question raised by DanBri.&lt;br /&gt;
&lt;br /&gt;
== mentors and mentees ==&lt;br /&gt;
Though seemingly rare, I personally have found use for &amp;lt;code&amp;gt;rel=&amp;quot;mentor&amp;quot;&amp;lt;/code&amp;gt; and inverse &amp;lt;code&amp;gt;rel=&amp;quot;mentee&amp;quot;&amp;lt;/code&amp;gt; (see Wiktionary definitions: [http://en.wiktionary.org/wiki/mentor mentor], [http://en.wiktionary.org/wiki/mentee mentee]).  I don't have sufficient evidence to even consider proposing adding these to XFN, but I wanted to capture them here as a brainstorm while I look into using them personally and research examples in the wild.  I may just use them as [[POSH]] myself.&lt;br /&gt;
&lt;br /&gt;
[[User:Tantek|Tantek]] 02:34, 8 Jul 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
* +1 Erica OGrady&lt;br /&gt;
&lt;br /&gt;
== advisor and advisee ==&lt;br /&gt;
Similarly, I have seen folks reference someone as an advisor, or note that they are advising someone.  We could consider &amp;lt;code&amp;gt;rel=&amp;quot;advisor&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel=&amp;quot;advisee&amp;quot;&amp;lt;/code&amp;gt; to capture and represent these semantics.&lt;br /&gt;
&lt;br /&gt;
Note that the relationship of advising a company or organization would be much better captured by noting &amp;quot;advisor&amp;quot; as a &amp;quot;role&amp;quot; property value in an hCard listing that organization, e.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&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;Tantek Çelik&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;org&amp;quot;&amp;gt;Citizen Agency&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;role&amp;quot;&amp;gt;advisor&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Again, I think [[POSH]] usage of these terms would make a good experiment to see if there is sufficient use to formalize them.&lt;br /&gt;
&lt;br /&gt;
[[User:Tantek|Tantek]] 07:45, 29 Dec 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== Influence out and influenced in ==&lt;br /&gt;
&lt;br /&gt;
Needing to provide more options to describe the flow of influence I've been considering the following relationship terms that fall into two predicate groups, influence out(applied) and influence in(received).&lt;br /&gt;
&lt;br /&gt;
Influence out: &lt;br /&gt;
* 'follower'&lt;br /&gt;
* 'student'&lt;br /&gt;
* 'subscriber'&lt;br /&gt;
* 'listener'&lt;br /&gt;
* 'reader'&lt;br /&gt;
* 'viewer'&lt;br /&gt;
* 'supporter'&lt;br /&gt;
* 'collaborator'&lt;br /&gt;
&lt;br /&gt;
Influence in: &lt;br /&gt;
* 'inspiration'&lt;br /&gt;
* 'favorite'&lt;br /&gt;
* 'teacher'&lt;br /&gt;
* 'mentor'&lt;br /&gt;
* 'adviser'&lt;br /&gt;
* 'influence'&lt;br /&gt;
* 'source'&lt;br /&gt;
* 'collaborator'&lt;br /&gt;
&lt;br /&gt;
Inline with xfn convention the terms are all nouns and refer to the far side of the link they are used in.&lt;br /&gt;
&lt;br /&gt;
[[User:James Tindall|James Tindall]] 14:23, 31 Aug 2008 (BST)&lt;br /&gt;
&lt;br /&gt;
== scholarly ==&lt;br /&gt;
A possibility that might be added is scholarly definitions.  For example:&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;mentor&amp;quot;&amp;lt;/code&amp;gt;[Student's Teacher] (similar to above)&lt;br /&gt;
** or perhaps &amp;lt;code&amp;gt;rel=&amp;quot;teacher&amp;quot;&amp;lt;/code&amp;gt; to indicate the distinct scholarly semantic. - [[User:Tantek|Tantek]]&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;student&amp;quot;&amp;lt;/code&amp;gt;[Teacher's Student] (inverse of mentor)&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;classmate&amp;quot;&amp;lt;/code&amp;gt;[Student's classmate].  &lt;br /&gt;
Possible uses in Social Networking sites that involve adding your school, grading your teachers, etc.  Teacher &amp;amp;lt;-&amp;amp;gt; Teacher would be specified in with the existing XFN &amp;lt;code&amp;gt;rel=&amp;quot;co-worker&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;rel=&amp;quot;colleague&amp;quot;&amp;lt;/code&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
[[User:Navarr|Navarr]] 05:56, 13 Dec 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
== professional ==&lt;br /&gt;
* [[xpn]] / [[xpn-examples]] - proposal to extend (or replicate) XFN for business (or professional - hence X'''P'''N) relationships&lt;br /&gt;
&lt;br /&gt;
== business to business ==&lt;br /&gt;
There has been some discussion (on the microformats-discuss mailing list) about wanting to markup business to business relationships.&lt;br /&gt;
&lt;br /&gt;
While this is out of scope for XFN's person to person links, if a page/site does represent a company (e.g. if the [[representative hCard]] of the page was an organization) and links to other company sites, it could be useful.&lt;br /&gt;
&lt;br /&gt;
In particular &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; values of:&lt;br /&gt;
* &amp;lt;code&amp;gt;subsidiary&amp;lt;/code&amp;gt;. designates a link to a subsidiary company of a controlling/parent company&lt;br /&gt;
* &amp;lt;code&amp;gt;controlling&amp;lt;/code&amp;gt;. designates a link to the controlling/parent company of a subsidiary company&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Currently this is a theoretical example as no real world example pages of companies linking to other such company pages have been provided, and as such, there is insufficient research/usage/experience to merit consideration as a microformat.&lt;br /&gt;
&lt;br /&gt;
Those wishing to experiment with these rel values, should consider doing so as [[POSH]] and document their experience here so that we have some real world examples!&lt;br /&gt;
&lt;br /&gt;
[[User:Tantek|Tantek]] 19:27, 15 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
{{xfn-related-pages}}&lt;br /&gt;
* [[hcard|hCard]]&lt;br /&gt;
* [[hcard-brainstorming|hCard brainstorming]]&lt;br /&gt;
* [[social-network-portability]]&lt;/div&gt;</summary>
		<author><name>KP</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=64414</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=64414"/>
		<updated>2014-07-09T23:46:03Z</updated>

		<summary type="html">&lt;p&gt;KP: /* link elements and u- parsing */ added in favour&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&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;
=== 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;
&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;
&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Author: [[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;
Microformats 2.0 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 microformats 2.0 ‘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 microformats 2.0 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 microformats-2-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 [[microformats 2]] 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 microformats 1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats 1 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;
===Parsing Literal Values===&lt;br /&gt;
Author: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats 2.0 that all microformats be parseable 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;
* 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': ['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: [hcard]&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, geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [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;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr: 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;
[[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;
&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 downside is that [[invisible-metadata-is-considered-harmful]]. &lt;br /&gt;
&lt;br /&gt;
But 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.&lt;br /&gt;
&lt;br /&gt;
One 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;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head. &lt;br /&gt;
&lt;br /&gt;
A weaker argument is consistency with 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.&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;
&amp;lt;/div&amp;gt;&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;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>KP</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=microformats2-parsing-issues&amp;diff=64413</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=64413"/>
		<updated>2014-07-09T23:30:34Z</updated>

		<summary type="html">&lt;p&gt;KP: /* link elements and u- parsing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&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;
=== 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;
&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;
&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Extraction vs Interpretation ===&lt;br /&gt;
Author: [[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;
Microformats 2.0 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 microformats 2.0 ‘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 microformats 2.0 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 microformats-2-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 [[microformats 2]] 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 microformats 1 syntax and vocabularies. The very number of changes may make it more challenging (from a microformats 1 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;
===Parsing Literal Values===&lt;br /&gt;
Author: [[User:BenWard|Ben Ward]]&lt;br /&gt;
&lt;br /&gt;
It is proposed for microformats 2.0 that all microformats be parseable 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;
* 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': ['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: [hcard]&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, geo would end up like this:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        type: [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;
===Parsing properties from rel attributes===&lt;br /&gt;
tl;dr: 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;
[[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;
&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 downside is that [[invisible-metadata-is-considered-harmful]]. &lt;br /&gt;
&lt;br /&gt;
But 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.&lt;br /&gt;
&lt;br /&gt;
One 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;
&lt;br /&gt;
Another use-case is publishing links to PGP/GPG keys linked from the head. &lt;br /&gt;
&lt;br /&gt;
A weaker argument is consistency with 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.&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. The question is should the door be opened to hidden mf data? [[User:KP|Kartik]] 18:30, 2014-07-09 (EST)&lt;br /&gt;
&amp;lt;/div&amp;gt;&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;
== see also ==&lt;br /&gt;
* [[microformats2-parsing]]&lt;br /&gt;
* [[microformats2]]&lt;/div&gt;</summary>
		<author><name>KP</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=xfn-brainstorming&amp;diff=64401</id>
		<title>xfn-brainstorming</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=xfn-brainstorming&amp;diff=64401"/>
		<updated>2014-07-01T21:24:31Z</updated>

		<summary type="html">&lt;p&gt;KP: /* rel-reader */ added reader/reading&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt; XFN Brainstorming &amp;lt;/entry-title&amp;gt;&lt;br /&gt;
{{TOC-right}}&lt;br /&gt;
This page is for brainstorming about various uses and details of [[XFN]], as well as collecting input for potential extensions.&lt;br /&gt;
&lt;br /&gt;
== Required Reading ==&lt;br /&gt;
Before participating in any XFN brainstorming please read and understand the following:&lt;br /&gt;
* [http://gmpg.org/xfn/intro XFN intro]&lt;br /&gt;
* [http://gmpg.org/xfn/background XFN background]&lt;br /&gt;
* [[xfn-faq|XFN FAQ]] &lt;br /&gt;
* [http://gmpg.org/xfn/and XFN and other services]&lt;br /&gt;
* [[rel-faq]]&lt;br /&gt;
&lt;br /&gt;
Note that all existing XFN values were based on research that showed real world sites that indicated such relationships explicitly via text and hyperlinks to other sites.  Thus any new semantics or values will be more seriously considered if URLs demonstrating existing text labeling and hyperlinking behavior are provided.&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* [http://tantek.com/ Tantek Çelik]&lt;br /&gt;
* [[User:CiaranMc |CiaranMc ]]&lt;br /&gt;
* [http://factoryjoe.com/ Chris Messina]&lt;br /&gt;
* [http://kevinmarks.com/ Kevin Marks]&lt;br /&gt;
&lt;br /&gt;
== general ==&lt;br /&gt;
* [[xfn-wants]]&lt;br /&gt;
&lt;br /&gt;
== Identity Consolidation ==&lt;br /&gt;
See [[rel-me]] and [[identity-consolidation]]. &amp;lt;span id=&amp;quot;Frames&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Indicating non-identity ===&lt;br /&gt;
I think we need a way to indicate that another page should not be consolidated into your identity. - KevinMarks&lt;br /&gt;
&lt;br /&gt;
==== common name disambiguation ====&lt;br /&gt;
If you have a common name, creating a disambiguation page or pages to indicate which ones aren't you is useful for indexers and people alike. In fact there are examples of people already creating such a page and linking to pages that are not them. Real world use cases that would benefit:&lt;br /&gt;
* Kevin Kelly (the former Wired editor) has put together a page to indicate [http://kevinkelly.name|other people also called &amp;quot;Kevin Kelly&amp;quot;].&lt;br /&gt;
* [http://vadim.com Vadim Akslerod] has created a page of [http://vadim.com/vadim/ Vadims on the Net] that link to other people called Vadim.&lt;br /&gt;
&lt;br /&gt;
==== accidental or malicious rel-me links ====&lt;br /&gt;
If someone accidentally or maliciously links to one of my pages with rel=&amp;quot;me&amp;quot; it would be good to be able to actually deny the connection, rather than just passively not link back. See [http://socialgraph-resources.googlecode.com/svn/trunk/samples/findyours.html?q=kevinmarks.com | the social graph API results for kevinmarks.com] for examples. - KevinMarks&lt;br /&gt;
&lt;br /&gt;
This appears to be more of a theoretical use case (as compared to the common name disambiguation) because the real world use ''is'' to simply '''not''' link back, and I don't think we should encourage people to add links to things that are not them, nor are they likely to, especially if it is a spammer/stalker/griefer that is linking to them. - [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
==== notme proposal ====&lt;br /&gt;
initial proposal: &amp;lt;code&amp;gt;rel=&amp;quot;notme&amp;quot;&amp;lt;/code&amp;gt;, though very open to better suggestions.&lt;br /&gt;
&lt;br /&gt;
== Extending family relationships ==&lt;br /&gt;
&lt;br /&gt;
=== grandparent ===&lt;br /&gt;
&amp;lt;cite&amp;gt;[http://www.gmpg.org/xfn/background The XFN: Background page]&amp;lt;/cite&amp;gt; says:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
We considered adding &amp;quot;grandparent,&amp;quot; but in the end dropped the term because it seemed unlikely to be used in the near future. It may appear in future versions of XFN.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Presumably the assumption is that a grandparent won't have a website, but:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* I think it's important in some situations to capture the age difference in a relationship in a way that rel=&amp;quot;kin&amp;quot; doesn't seem to.&lt;br /&gt;
** Additional XFN rel values is the wrong way to represent age information (even relative). Instead, mark up each person's page with an hCard for them that has a &amp;lt;code&amp;gt;bday&amp;lt;/code&amp;gt; property, with even just the year if you want - that could then be used to determine an approximate age difference, which is presumably all that is desired. [[User:Tantek|Tantek]]&lt;br /&gt;
* ''rel=kin'' with an age difference of, say, 45 years, might represent any of parent, grandparent, uncle, sibling, cousin or more.&lt;br /&gt;
** Again, age (and thus differences) should be represented by use of the [[hCard]] 'bday' property, not rel. [[User:Tantek|Tantek]] 19:27, 15 June 2009 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== grandparent examples ====&lt;br /&gt;
If people actually find and document non-trivial examples of links to grandparent sites and this section gets too big, perhaps we can move it to [[grandparent-examples]].&lt;br /&gt;
&lt;br /&gt;
To date, no real world examples have been documented of URLs of grandchildren linking to their grandparents, thus, per the microformats [[process]], we should not complicate a format for a ''theoretical'' need. &lt;br /&gt;
&lt;br /&gt;
Anyone that cares to pursue this may find some real world examples to document in the following web searches (note that search links themselves are not examples, but merely a step towards finding real world examples which still need to be individually analyzed, checked against being false positives etc.) &lt;br /&gt;
* [http://www.google.co.uk/search?&amp;amp;q=%22my+grandpa%27s+website%22 search for &amp;quot;my grandpa's website&amp;quot;]&lt;br /&gt;
* [http://www.google.co.uk/search?&amp;amp;q=%22my+grandfather%27s+website%22 search for &amp;quot;my grandfather's website&amp;quot;]&lt;br /&gt;
* [http://www.google.co.uk/search?&amp;amp;q=%22my+grandma%27s+website%22 search for &amp;quot;my grandma's website&amp;quot;]&lt;br /&gt;
* [http://www.google.co.uk/search?&amp;amp;q=%22my+grandmother%27s+website%22 search for &amp;quot;my grandmother's website&amp;quot;]. &lt;br /&gt;
&lt;br /&gt;
See also [[genealogy-examples]].&lt;br /&gt;
&lt;br /&gt;
=== ancestor descendant ===&lt;br /&gt;
Even if they don't maintain it themselves (or are deceased) there might be a URL that does a good job of representing a person.&lt;br /&gt;
&lt;br /&gt;
Consider a site about one's family tree.  It might have something like:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
I can trace my family back to &amp;lt;a href=&amp;quot;http://en.wikipedia.org/wiki/William_I_of_England&amp;quot;&amp;gt;William the conqueror.&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In these cases it would be useful to have &amp;lt;code&amp;gt;rel=&amp;quot;ancestor&amp;quot;&amp;lt;/code&amp;gt;, and perhaps a corresponding &amp;lt;code&amp;gt;rel=&amp;quot;descendant&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
-CiaranMc&lt;br /&gt;
&lt;br /&gt;
See also: [[genealogy-brainstorming#Relationships]]&lt;br /&gt;
&lt;br /&gt;
* rel=&amp;quot;kin&amp;quot; can be considered sufficient until at least some number of non-trivial real world examples are provided.&lt;br /&gt;
&lt;br /&gt;
==== ancestor descendant examples ====&lt;br /&gt;
If this section gets too big, perhaps we can move it to [[ancestor-descendant-examples]].&lt;br /&gt;
* Wikipedia examples&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Winston_Churchill#Family_and_early_life Winston Churchill, with list if ancestors]&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Elizabeth_II_of_the_United_Kingdom#Marriage Queen Elizabeth II]: refers to &amp;quot;Queen Victoria as [her] great-great-grandmother&amp;quot;. &lt;br /&gt;
* See also [[genealogy-examples]].&lt;br /&gt;
&lt;br /&gt;
So far only a couple of (representative) real world examples (from just one site, Wikipedia) have been provided, thus, per the microformats [[process]], we should not complicate a format for a need clearly outside of the 80/20.&lt;br /&gt;
&lt;br /&gt;
== Simple Groups and Members ==&lt;br /&gt;
A very simple extension to XFN could enable decentralized group membership. E.g.&lt;br /&gt;
* rel=&amp;quot;group&amp;quot;.  A person could link from their page to the page of a group that they belong to (e.g. their company, school, DJ collective etc.) and thus assert that they belong to that group.&lt;br /&gt;
* rel=&amp;quot;member&amp;quot;.  The web pages of groups could link to who they consider members and thus assert that person's membership.&lt;br /&gt;
&lt;br /&gt;
The relationships could be required bi-directional in order to confirm group membership, that is, both the individual must link to the group with rel=&amp;quot;group&amp;quot; and the group must link to the individiual with rel=&amp;quot;member&amp;quot; in order for the membership to be considered &amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
See also [[group-brainstorming]] for more on this including documentation of examples.&lt;br /&gt;
&lt;br /&gt;
== fans and followers ==&lt;br /&gt;
It's becoming a common aspect of many social networks (see list below) that you have unreciprocated and non-friend-based connections to people. These connections are particularly noteworthy where you don't really ever expect to have your connections reciprocated, but instead are similar to the idea of &amp;quot;rel-muse&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
=== follower and following ===&lt;br /&gt;
The brainstorming on fans and followers and inverses thereof has appeared to settle (for many months - over a year(?)) on &amp;quot;follower&amp;quot; and &amp;quot;following&amp;quot; as mutual inverse relationship terms.&lt;br /&gt;
&lt;br /&gt;
Current summary:&lt;br /&gt;
&lt;br /&gt;
* rel=&amp;quot;follower&amp;quot; - links to someone who is a follower, that is they are following you.&lt;br /&gt;
* rel=&amp;quot;following&amp;quot; - links to someone who is one of your &amp;quot;followings&amp;quot;, i.e. someone you are following.&lt;br /&gt;
&lt;br /&gt;
Summary discussion:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* I'd say they're ready for experimentation on websites in the wild. Once we have examples in the wild, we can promote this to a draft of [[rel-follower]]. [[User:Tantek|Tantek]] 00:13, 21 October 2010 (UTC)&lt;br /&gt;
* We've had consensus on this for a while now - consider this an invitation for anyone to start stubbing out minimal descriptions for [[rel-follower]] and [[rel-following]], and then we can add them as brainstorming values as well as register them for use in HTML5 in the [[existing-rel-values]] page. [[User:Tantek|Tantek]] 16:55, 30 June 2011 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FAQ:&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* Q: Does &amp;lt;code&amp;gt;rel=following&amp;lt;/code&amp;gt; mean that I read all their content daily/hourly/in real time?[http://indiewebcamp.com/irc/2013-08-28/line/1377706665]&lt;br /&gt;
** A: &amp;lt;code&amp;gt;rel=following&amp;lt;/code&amp;gt; just means reading some amount, no implications about timeliness, nor comprehensiveness.[http://indiewebcamp.com/irc/2013-08-28/line/1377706765]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See below for the analysis and brainstorming that led to this outcome and for specific discussions.&lt;br /&gt;
&lt;br /&gt;
=== fan follower examples ===&lt;br /&gt;
Sites that have the semantic / implied-schema of &amp;quot;fan&amp;quot; or &amp;quot;follower&amp;quot;)&lt;br /&gt;
* http://crowdvine.com/ (has fans and mutual fans and want to meet)&lt;br /&gt;
* http://twitter.com/ (has followers vs friends)&lt;br /&gt;
* http://upcoming.org/ (has fans vs friends)&lt;br /&gt;
* http://www.sugarloot.com (has Fans vs Favorites)&lt;br /&gt;
&lt;br /&gt;
=== possible inverse of fan terms ===&lt;br /&gt;
Brainstorm list of possible terms (for an inverse of fan/follower):&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
* source&lt;br /&gt;
** +1 I like this as a neutral term, &amp;lt;s&amp;gt;except that it would be better kept as a rel value for atom:source in [[hAtom]]&amp;lt;/s&amp;gt; (on re-reading the Atom spec, atom:source should be a class on a containing element) [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
* influence&lt;br /&gt;
* influencer&lt;br /&gt;
** 0 [[User:Tantek|Tantek]] - I like this one, it seems to represent the implied semantics.  If I follow someone, then they are an &amp;quot;influencer&amp;quot; to me. However, the point made by [[User:Donohoe]] below is a good one thus I've changed my opinion from +1 to +0 on this option.&lt;br /&gt;
** -1 Sounds like &amp;quot;influenza&amp;quot;, and just because I follow someone, doesn't mean they influence me. [[User:Gazza|Gazza]]&lt;br /&gt;
** -1 - influence can be negative as well as positive: &amp;quot;The child only shoplifted because he was under the influence of older boys&amp;quot;. [[User:AndyMabbett|Andy Mabbett]] 01:04, 26 Jan 2008 (PST)&lt;br /&gt;
*** -1 Argument from theoretical example. [[User:Tantek|Tantek]] 21:46, 15 June 2009 (UTC)&lt;br /&gt;
** -1 This seems too strong; the relationship is not meant to imply an endorsement; we have [[vote-links]] for that [[User:Kevin Marks|Kevin Marks]] Donohoe's reasoning below is good and I prefer 'following'&lt;br /&gt;
** -1 This value is assigned one of 2 ways; arbitrarily by app, or by the user. I don't trust an app to make a decision on what constitutes an ''influencer'' and I don't see a user choosing that in its current wording --[[User:Donohoe|Donohoe]] 19:55, 5 Aug 2008 (PDT)&lt;br /&gt;
*** I tend to agree with [[User:Donohoe|Donohoe]]'s reasoning. [[User:Tantek|Tantek]] 21:46, 15 June 2009 (UTC)&lt;br /&gt;
* leader&lt;br /&gt;
* star&lt;br /&gt;
* hero&lt;br /&gt;
* favorite&lt;br /&gt;
* guider&lt;br /&gt;
* role-model&lt;br /&gt;
* idol&lt;br /&gt;
** -1 [[User:Tantek|Tantek]] These all seem too strong and sometimes imply more subordination than most people want.&lt;br /&gt;
* subscription&lt;br /&gt;
** +1 Tony Stubblebine&lt;br /&gt;
** +1 this one seems most neutral to me (a good thing) [[User:STHayden|STHayden]] 08:35, 3 Mar 2008 (PST)&lt;br /&gt;
** -1 this makes sense in a feed-reader context, but not necessarily in a blogroll one; it implies the content rather than the person [[User:Kevin Marks|Kevin Marks]] 14:30, 24 Mar 2008 (PDT)&lt;br /&gt;
** +1 Was neutral, now in favor --[[User:Donohoe|Donohoe]] 19:11, 6 Aug 2008 (PDT)&lt;br /&gt;
** -1 against for same reasons as Kevin Marks. And &amp;quot;subscription&amp;quot; doesn't sound like a term for a person. --  [[User:Tantek|Tantek]]&lt;br /&gt;
* of-interest&lt;br /&gt;
* interest&lt;br /&gt;
* followee&lt;br /&gt;
* focus&lt;br /&gt;
* &amp;lt;span id=&amp;quot;following&amp;quot;&amp;gt;following&amp;lt;/span&amp;gt; - as the singular of &amp;quot;followings&amp;quot;. If someone is one of your &amp;quot;followings&amp;quot;, then you are following that someone, as opposed to if someone is one of your &amp;quot;followers&amp;quot;, then that someone is following you! It may sound a bit clumsy/awkward as a term at first, but I think that's actually a sign of novel usage, which has some appeal because then it means the term may be available for us to fill it with this meaning - or I should say, amplify this meaning as it [http://search.twitter.com/search?q=followings has been given by existing Twitter users].&lt;br /&gt;
** +1 [[User:Tantek|Tantek]] '''following''' is the best term I have seen for the inverse of fan/follower, and paired with '''follower''', provides a good enough complementary pair of relationships to express both directions.&lt;br /&gt;
** Note that Google has now [http://buzz.blogger.com/2008/08/show-off-your-followers.html adopted the &amp;quot;follow&amp;quot; terminology]. -- [http://factoryjoe.com/ Chris Messina]&lt;br /&gt;
** +1 'following'is widely adopted. Lets just decide on this and get it implemented. &lt;br /&gt;
** +1 I think 'following' is now well understood thanks to both Twitter and Blogger using it, and worth codifying here [[User:Kevin Marks|Kevin Marks]]&lt;br /&gt;
* follows&lt;br /&gt;
** proposed by [http://schema.org/Person unknown authors at schema.org] I assume this meant to be a verb (like 'knows' ) rather than a plural adjective.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rejected fan follower terms ===&lt;br /&gt;
==== rel-fan ====&lt;br /&gt;
&amp;lt;div class=&amp;quot;discussion&amp;quot;&amp;gt;&lt;br /&gt;
I would propose adding &amp;quot;rel-fan&amp;quot; or &amp;quot;rel-follower&amp;quot; to the collection of XFN values -- as being something like a &amp;quot;contact&amp;quot; or a &amp;quot;muse&amp;quot; but having a different purpose within the realm of social networking. Again, given that this is showing up in social networks like Pownce (fan), Twitter (follower), and that these words are becoming common, I wonder if it wouldn't make sense to even ditch rel-muse in favor of rel-follower and rel-fan (the former implying some kind of positive social stalking and the latter a kind of amiable appreciation for someone's work). &lt;br /&gt;
&lt;br /&gt;
This fan/follower designation seems sorely lacking from Flickr where not everyone falls into either contact, friend or family... but in many cases, you just like someone's photos and want to be able to check in on them every now and again, similar to the way that people &amp;quot;follow&amp;quot; or &amp;quot;subscribe&amp;quot; to blog feeds... Someone who reads my blog feed could be considered a &amp;quot;follower&amp;quot; -- as in, &amp;quot;someone who follows my blog&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
- Chris Messina&lt;br /&gt;
&lt;br /&gt;
Chris, rel-fan or rel-follower would work for you to point to people who follow you, but the converse case is probably more useful, saying who you follow (eg blogroll case too). We need a good noun for that relationship that describes how you view them, that is less coloured than 'muse' currently is by being classified as romantic. rel-source or rel-influence maybe? Very hard to come up with a good noun. &lt;br /&gt;
&lt;br /&gt;
[[User:Kevin Marks|Kevin Marks]] 12:57, 17 Aug 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
* Hence the existence of the HTML &amp;quot;rev&amp;quot; attribute. [[User:TobyInk|TobyInk]] 00:12, 25 Feb 2008 (PST)&lt;br /&gt;
** The [[rel-faq#Should_rev_even_be_used|use of rev has been deprecated]] since authors nearly always get it wrong. [[User:Tantek|Tantek]] 10:32, 6 Aug 2008 (PDT)&lt;br /&gt;
*** I'm not suggesting that we create a new microformat using rev — I'm pointing out that if we define &amp;lt;code&amp;gt;rel=fan&amp;lt;/code&amp;gt; (for linking to your fans) then &amp;lt;code&amp;gt;rev=fan&amp;lt;/code&amp;gt; &amp;quot;automatically pops into meaning&amp;quot;. (Besides which the usually quoted evidence of rev being &amp;quot;confusing&amp;quot; to authors (i.e. Google's analysis) is flaky at best.) [[User:TobyInk|TobyInk]] 15:26, 6 Aug 2008 (PDT)&lt;br /&gt;
**** Suggesting the use of &amp;lt;code&amp;gt;rev=fan&amp;lt;/code&amp;gt; (as you just did) *is* creating a new microformat using rev, so yes, you are suggesting it.  And Google's analysis backed up many years of my (and others') personal anecdotal experience with web developers where &amp;amp;gt;90% did not understand the difference between rel and rev. [[User:Tantek|Tantek]] 17:53, 6 Aug 2008 (PDT)&lt;br /&gt;
***** My point is that as per the [http://www.w3.org/TR/REC-html40/struct/links.html#adef-rev HTML 4 definition of &amp;lt;code&amp;gt;rev&amp;lt;/code&amp;gt;] any time anyone defines a new link type &amp;lt;code&amp;gt;rel=''X''&amp;lt;/code&amp;gt;, the meaning of &amp;lt;code&amp;gt;rev=''X''&amp;lt;/code&amp;gt; becomes defined too. This is unavoidable. We should define new link types in terms of &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; rather than &amp;lt;code&amp;gt;rev&amp;lt;/code&amp;gt; for clarity, but we can't prevent people from taking advantage of the facilities inherent in (X)HTML to mark up the inverse meaning. (e.g. [http://changelog.ca/log/2005/09/12/proposed-microformats-for-reputation-and-trust-metrics &amp;lt;code&amp;gt;rev=tag&amp;lt;/code&amp;gt; mention], [http://singpolyma.net/2007/05/the-state-of-distributed-social-networking/ and again], [http://styrheim.weblogg.no/311005201154_revtags.html and again]) [[User:TobyInk|TobyInk]] 01:17, 7 Aug 2008 (PDT)&lt;br /&gt;
****** We can avoid use of 'rev' by (1) specifically recommending against use of it as the [[rel-faq#Should_rev_even_be_used|rel FAQ does]], and (2) by providing an inverse term that can be used with 'rel' so there is no need to use 'rev'. [[User:Tantek|Tantek]] 19:27, 15 June 2009 (UTC)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== rel-reader ====&lt;br /&gt;
For blogrolls at least, what about rel-read / rel-reader? -- [[User:SteveIvy|Steve Ivy]]&lt;br /&gt;
&lt;br /&gt;
Steve, &amp;quot;read&amp;quot; is still a verb (and [[rel-values]] need to be nouns), and &amp;quot;reader&amp;quot; would still imply that they are a &amp;quot;reader&amp;quot; of yours, rather than vice versa. -- [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
How about &amp;quot;rel-reader&amp;quot; instead of &amp;quot;rel-follower&amp;quot; and &amp;quot;rel-reading&amp;quot; instead of &amp;quot;rel-following&amp;quot; ? It has the more 'neutral' and 'real world' connotation of actually reading and not 'following' people around. Also refers to the traditional word for such things in the book-world as in &amp;quot;Neil Gaiman's readers&amp;quot; and &amp;quot;I am reading Neil Gaiman&amp;quot; -- [[User:KP|Kartik]]&lt;br /&gt;
&lt;br /&gt;
==== rel-subscriber ====&lt;br /&gt;
What about ''subscriber'' instead - also very neutral and more akin to others in the list? --[[User:Donohoe|Donohoe]] 19:55, 5 Aug 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;subscriber&amp;quot; is no different from &amp;quot;reader&amp;quot; in this respect, and means the *opposite* of what we are looking for.  I.e. a rel=&amp;quot;subscriber&amp;quot; link to someone would mean that someone is a subscriber of my content/feed. -- [[User:Tantek|Tantek]]&lt;br /&gt;
&lt;br /&gt;
=== past examples ===&lt;br /&gt;
Sites that previously provided real world examples of fans vs friends:&lt;br /&gt;
* http://pownce.com/ (has fans vs friends) - until 2008-12-15 when the site moved to read-only mode.&lt;br /&gt;
&lt;br /&gt;
== favorites ==&lt;br /&gt;
Another possibility is perhaps 'favorite', that is, people do link to favorite bands for example, which is similar to saying they are a fan of the band. Thus you could add &amp;lt;code&amp;gt;rel=&amp;quot;favorite&amp;quot;&amp;lt;/code&amp;gt; to such hyperlinks to indicate that that music band over there is a favorite of yours. [[User:Tantek|Tantek]] 17:57, 2 Oct 2007 (PDT) based on a question raised by DanBri.&lt;br /&gt;
&lt;br /&gt;
== mentors and mentees ==&lt;br /&gt;
Though seemingly rare, I personally have found use for &amp;lt;code&amp;gt;rel=&amp;quot;mentor&amp;quot;&amp;lt;/code&amp;gt; and inverse &amp;lt;code&amp;gt;rel=&amp;quot;mentee&amp;quot;&amp;lt;/code&amp;gt; (see Wiktionary definitions: [http://en.wiktionary.org/wiki/mentor mentor], [http://en.wiktionary.org/wiki/mentee mentee]).  I don't have sufficient evidence to even consider proposing adding these to XFN, but I wanted to capture them here as a brainstorm while I look into using them personally and research examples in the wild.  I may just use them as [[POSH]] myself.&lt;br /&gt;
&lt;br /&gt;
[[User:Tantek|Tantek]] 02:34, 8 Jul 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
* +1 Erica OGrady&lt;br /&gt;
&lt;br /&gt;
== advisor and advisee ==&lt;br /&gt;
Similarly, I have seen folks reference someone as an advisor, or note that they are advising someone.  We could consider &amp;lt;code&amp;gt;rel=&amp;quot;advisor&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rel=&amp;quot;advisee&amp;quot;&amp;lt;/code&amp;gt; to capture and represent these semantics.&lt;br /&gt;
&lt;br /&gt;
Note that the relationship of advising a company or organization would be much better captured by noting &amp;quot;advisor&amp;quot; as a &amp;quot;role&amp;quot; property value in an hCard listing that organization, e.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&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;Tantek Çelik&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;org&amp;quot;&amp;gt;Citizen Agency&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;role&amp;quot;&amp;gt;advisor&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Again, I think [[POSH]] usage of these terms would make a good experiment to see if there is sufficient use to formalize them.&lt;br /&gt;
&lt;br /&gt;
[[User:Tantek|Tantek]] 07:45, 29 Dec 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== Influence out and influenced in ==&lt;br /&gt;
&lt;br /&gt;
Needing to provide more options to describe the flow of influence I've been considering the following relationship terms that fall into two predicate groups, influence out(applied) and influence in(received).&lt;br /&gt;
&lt;br /&gt;
Influence out: &lt;br /&gt;
* 'follower'&lt;br /&gt;
* 'student'&lt;br /&gt;
* 'subscriber'&lt;br /&gt;
* 'listener'&lt;br /&gt;
* 'reader'&lt;br /&gt;
* 'viewer'&lt;br /&gt;
* 'supporter'&lt;br /&gt;
* 'collaborator'&lt;br /&gt;
&lt;br /&gt;
Influence in: &lt;br /&gt;
* 'inspiration'&lt;br /&gt;
* 'favorite'&lt;br /&gt;
* 'teacher'&lt;br /&gt;
* 'mentor'&lt;br /&gt;
* 'adviser'&lt;br /&gt;
* 'influence'&lt;br /&gt;
* 'source'&lt;br /&gt;
* 'collaborator'&lt;br /&gt;
&lt;br /&gt;
Inline with xfn convention the terms are all nouns and refer to the far side of the link they are used in.&lt;br /&gt;
&lt;br /&gt;
[[User:James Tindall|James Tindall]] 14:23, 31 Aug 2008 (BST)&lt;br /&gt;
&lt;br /&gt;
== scholarly ==&lt;br /&gt;
A possibility that might be added is scholarly definitions.  For example:&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;mentor&amp;quot;&amp;lt;/code&amp;gt;[Student's Teacher] (similar to above)&lt;br /&gt;
** or perhaps &amp;lt;code&amp;gt;rel=&amp;quot;teacher&amp;quot;&amp;lt;/code&amp;gt; to indicate the distinct scholarly semantic. - [[User:Tantek|Tantek]]&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;student&amp;quot;&amp;lt;/code&amp;gt;[Teacher's Student] (inverse of mentor)&lt;br /&gt;
* &amp;lt;code&amp;gt;rel=&amp;quot;classmate&amp;quot;&amp;lt;/code&amp;gt;[Student's classmate].  &lt;br /&gt;
Possible uses in Social Networking sites that involve adding your school, grading your teachers, etc.  Teacher &amp;amp;lt;-&amp;amp;gt; Teacher would be specified in with the existing XFN &amp;lt;code&amp;gt;rel=&amp;quot;co-worker&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;rel=&amp;quot;colleague&amp;quot;&amp;lt;/code&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
[[User:Navarr|Navarr]] 05:56, 13 Dec 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
== professional ==&lt;br /&gt;
* [[xpn]] / [[xpn-examples]] - proposal to extend (or replicate) XFN for business (or professional - hence X'''P'''N) relationships&lt;br /&gt;
&lt;br /&gt;
== business to business ==&lt;br /&gt;
There has been some discussion (on the microformats-discuss mailing list) about wanting to markup business to business relationships.&lt;br /&gt;
&lt;br /&gt;
While this is out of scope for XFN's person to person links, if a page/site does represent a company (e.g. if the [[representative hCard]] of the page was an organization) and links to other company sites, it could be useful.&lt;br /&gt;
&lt;br /&gt;
In particular &amp;lt;code&amp;gt;rel&amp;lt;/code&amp;gt; values of:&lt;br /&gt;
* &amp;lt;code&amp;gt;subsidiary&amp;lt;/code&amp;gt;. designates a link to a subsidiary company of a controlling/parent company&lt;br /&gt;
* &amp;lt;code&amp;gt;controlling&amp;lt;/code&amp;gt;. designates a link to the controlling/parent company of a subsidiary company&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Currently this is a theoretical example as no real world example pages of companies linking to other such company pages have been provided, and as such, there is insufficient research/usage/experience to merit consideration as a microformat.&lt;br /&gt;
&lt;br /&gt;
Those wishing to experiment with these rel values, should consider doing so as [[POSH]] and document their experience here so that we have some real world examples!&lt;br /&gt;
&lt;br /&gt;
[[User:Tantek|Tantek]] 19:27, 15 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== see also ==&lt;br /&gt;
{{xfn-related-pages}}&lt;br /&gt;
* [[hcard|hCard]]&lt;br /&gt;
* [[hcard-brainstorming|hCard brainstorming]]&lt;br /&gt;
* [[social-network-portability]]&lt;/div&gt;</summary>
		<author><name>KP</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=parsers&amp;diff=64400</id>
		<title>parsers</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=parsers&amp;diff=64400"/>
		<updated>2014-06-26T19:38:22Z</updated>

		<summary type="html">&lt;p&gt;KP: /* Python */  added PyPI page&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;
== 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 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>KP</name></author>
	</entry>
</feed>