metaformats specification

From Microformats Wiki
Revision as of 21:41, 2 April 2022 by Tantek (talk | contribs) (→‎parse an element for class microformats: link h-*, set aside parsed head item and append it to end of items array after finishing parsing (prioritize visible data in body))
Jump to navigation Jump to search

metaformats is an extension to the microformats2-parsing for parsing invisible data published in HTML meta tags, both with an explicit methodology, and for backward compatibility with existing vocabularies that have multiple testable interoperable implementations.

This is a Living Specification that is subject to change as research discovers meta tag vocabularies in wide use and consumed by multiple implementations. Additional implementations are not encouraged at this time. This specification has no stable portions. Features are untested, unless explicitly labeled stable, draft, or proposed, or in stable, draft, or proposed sections. All features are likely to change substantively. While stable features are unexpected, it is a living specification and may eventually document some. When stable features are documented, substantive changes may be proposed by issues and errata filed in response to implementation experience, requiring consensus among participating implementers as part of an explicit to be defined change control process.
Participate
Open Issues
IRC
Editor
Tantek Çelik
License
Per CC0, to the extent possible under law, the editors have waived all copyright and related or neighboring rights to this work. In addition, as of 2024-11-22, the editors have made this specification available under the Open Web Foundation Agreement Version 1.0.
Initial publication
2022-04-01

algorithm changes

For each of the following subsections, apply the changes therein to the steps in the same subsection in the microformats2-parsing specification.

parse an element for class microformats

Before the step: "if none found, parse child elements …", insert these steps at the same level:

  • if none found and the element is a head element and there were no root class names found on the html element
    • parse meta elements for backcompat properties (defined in meta backward compatible parsing)
    • if there is a meta[property=og:type] then
      • get that meta element’s content attribute value
      • if it’s "article" then imply a head element root class name of h-entry
      • if it’s "profile" then imply a head element root class name of h-card
      • if it's "music" or "video" then imply a head element root class name of h-cite
    • end if
    • if there is no implied head element root class name and there is a meta[name=twitter:card] then
      • get that meta element’s content attribute value
      • if it's "summary" or "summary_large_image" then imply a head element root class name of h-entry
    • end if
    • if there is no implied head element root class name and
      • there is a meta[property^=og:] or meta[name^=twitter:]
    • then imply a head element root class name of h-entry
    • if there is an implied head element root class name
      • set aside the parsed 'item' from that root and its properties
      • after parsing the rest of the document, append that parsed 'item' from the head element to the end of the top level 'items' array
    • end if

parsing an element for properties

parsing a p- property

insert before "else return the textContent of the element after …":

  • else if meta.p-x[content], then return the content attribute

parsing a u- property

insert before "else return the textContent of the element after …":

  • else if meta.u-x[content], then get the content attribute

parsing a dt- property

insert before "else return the textContent of the element after …":

  • else if meta.dt-x[content], then return the content attribute

meta backward compatible parsing

The following list of meta elements are to be parsed as the listed microformats2 equivalent properties.

  • if meta[property="og:title"], parse content attribute as p-name
  • else meta[name="twitter:title"], parse content as p-name
  • if meta[property="og:description"], parse content as p-summary
  • else meta[name="twitter:description"], parse content as p-summary
  • if meta[property="og:image"], parse content as u-photo
  • else meta[name="twitter:image"], parse content as u-photo
  • if meta[property="og:video"], parse content as u-video
  • if meta[property="og:audio"], parse content as u-audio
  • if meta[property="article:published_time"], parse content as dt-published
  • if meta[property="article:modified_time"], parse content as dt-updated
  • if meta[property="article:author"], parse content as p-author

Background

The following past work was used to develop this specification:

See Also