tl;dr, the three ways how to semantically annotate content in HTML5 documents:
- Microdata and RDFa are syntaxes (extending HTML) for semantically marking up content, but they don‘t supply vocabularies.
- Microformats is a convention (re-using what HTML provides) for semantically marking up content, and (solely!) supplies vocabularies for that purpose.
Schema.org is a collection of vocabularies (that can be used with various syntaxes, including Microdata and RDFa, but not Microformats), so this question should be: Microdata vs. Microformats? And why not invite RDFa to the party?
RDFa and Microdata are not the same, but conceptional similar. Microformats however differs strongly from both.
If your only aim would be to enhance the display of search results from search engines, it doesn’t matter which markup way you choose (as long as it is supported by the search engine). But "semantic markup", of course, allows much more: building the Semantic Web. Not without reason do Microformats relate to the term "lower-case semantic web", while RDFa relates to "upper-case Semantic Web" (Microdata is a newer syntax, but it would fit into the upper-case variant).
The main difference: extensibility. RDFa and Microdata use URIs, Microformats uses specific class names (for HTML’s
class attribute) and link types (for HTML’s
rel attribute). That means:
With Microformats you can only markup certain content if the Microformats community created and accepted an appropriate "vocabulary" (i.e., a Microformat).
With RDFa and Microdata you can create your own vocabulary if there doesn’t already exist an appropriate one (and there are many vocabularies).
Google says I can't use both "because it may confuse the parser".
I wouldn't let this stop me from implementing several markup ways. Also, Google kind of revoked this statement in a chat.
Update: On Google’s Structured Data documentation, it nowhere says they couldn’t handle different syntaxes on the same document. And their Testing Tool reports no errors if several syntaxes are used.
See also related questions on Stack Overflow: