A Blog Not Limited

to web design, standards & semantics

Getting Semantic With Microformats, Part 6: hResume

Nov 10, 2008

Published in

Microformats

I began this series a little over two months ago. I wanted to share my love of microformats and detail how I've implemented them, in hopes of encouraging more people to embrace them.

So far, I've covered a lot:

And now, as I conclude this series, it is time to talk about the hResume microformat which is used to add semantics and structure to résumé and CV information on the web.

hResume Background

Before I dive into the markup and details of hResume, how about a bit of background information?

Draft Specification

hResume is a draft microformat. What does this mean? Ultimately, it hasn't been officially approved. And that means that it can (and probably will) change to some degree until becomes a formal specification.

Does this matter? Maybe to you, not to me. I pretty much accept that most web technologies are moving targets. It is just the nature of the web. No reason for me to not implement a technology in which I believe.

The Best of Microformats

hResume is, at its base, one of the simpler microformats, with only eight properties. At the same time, hResume is a compound microformat; it utilizes three other microformats: rel-tag, hCard and hCalendar.

In many ways, this represents the best of microformats: they utilize existing standards.

And the Worst

That said, how hResume utilizes hCard and hCalendar was, at least for me, confusing and frustrating at times. Perhaps this is due to the draft status and will be resolved before final approval. Perhaps it is me and my inability to think of my résumé content in the way required to apply hCard and hCalendar.

Regardless of the reason, hResume also respresents the worst of microformats … at least from my perspective.

It isn't the hResume itself that I find problematic per se. It is the overwhelming lack of comprehendible information and good documentation. This is something I think plagues microformats, in general, and specifically the Microformats Wiki.

Granted, hResume is a draft, so it is hard to expect there to be a lot of people invested in sharing information about it. But the wiki information for hResume leaves much to be desired.

I realize how horrible it is to say this, especially when I owe the wiki (not to mention its authors and contributors) a debt of gratitude for providing me what information is there. But the wiki is difficult to digest at its best, and flat-out confusing at its worst.

And when there are very few other resources for hResume, it makes for a very painful and frustrating process to implement the microformat.

But that is why I'm blogging about microformats, and I hope others do as well. The more people that talk about them (good, bad or indifferent), the better the information available will be.

So, done with my mini-rant. Moving on.

History

hResume has a very simple history. Unlike hCard, hCalendar and hAtom, it does not have a tie to a "precursor" technology.

It was, however, developed based on research of existing resume formats such as HR-XML and Europass.

The Basics

As with all microformats, there are a few "rules" that I'll mention (yet again):

  • Properties and sub-properties are expressed as class values. These are what define the hResume microformat.
  • Property and sub-property names are case-sensitive.
  • The "root" property cannot be combined with any of its sub-properties. Thus, <p class="hresume contact"> is invalid.
  • The markup used is irrelevant to the microformat (though the markup should be valid and semantic).

The Profile

Update: 04/21/2010

Recently, the microformats community completed updates to the profile URIs for all microformats. The correct values have been updated in this article. See my Microformats Profile URIs Updated post for further details.

Where you implement hResume, you should be sure to include its profile in the <head>:

<head profile="http://microformats.org/wiki/hresume-profile/http://microformats.org/profile/hresume">

As I've mentioned, hResume can take advantage of both hCard and hCalendar. So if you choose to utilize these additional microformats with your hResume, you should be sure to include their profiles, as well.

The W3C allows multiple profile values (separated by white space), so you could conceivably have all three profiles:

<head profile="http://microformats.org/wiki/hresume-profile/http://microformats.org/profile/hresume http://purl.org/uF/hCard/1.0/http://microformats.org/profile/hcard http://purl.org/uF/hCalendar/1.0/http://microformats.org/profile/hcalendar">

However, because both hCard and hCalendar are formal specifications, they are included in the combined profile URL that covers all non-draft microformats. I recommend using this single, combined profile with the hResume profile:

<head profile="http://microformats.org/wiki/hresume-profile/http://microformats.org/profile/hresume http://purl.org/uF/2008/03/http://microformats.org/profile/specs">

The Example

Unlike all the other microformats I've covered in this series, I did not implement hResume on A Blog Not Limited. I don't really see a reason to have my résumé on my personal blog, plus I already had it on my design portfolio.

The following example is taken directly from the résumé on my portfolio. It is a rather long bunch of markup and information, so I've cut that which is redundant in terms of hResume and replaced it with ellipses. I've also removed class values that are related to styling and have nothing to do with the hResume microformat.

If needed, you can always view the source of my live page to see it in its full glory.

  1. <div class="hresume">
  2.       <div class="contact vcard">
  3.             <img src="/images/personal/emilyLewis.jpg" width="150" height="203" class="photo" alt="Emily Lewis" />
  4.             <h2 class="fn n" id="emily-hcard-name"><span class="given-name">Emily</span> <span class="additional-name">Paige</span> <span class="family-name">Lewis</span></h2>
  5.             <p class="adr"><span class="locality">Albuquerque</span>, <abbr class="region" title="New Mexico">NM<abbr> <span class="postal-code">87106</span> <abbr class="country-name" title="United States of America">USA</abbr></p>
  6.             <ul>
  7.                   <li><a href="mailto:[email protected]" class="email">eplewis[at]gmail[dot]com</a></li>
  8.                   <li><a href="http://www.emilylewisdesign.com/" class="url" rel="me">Design Portfolio</a></li>
  9.                   <li><a href="http://www.linkedin.com/in/emilyplewis/" rel="me">LinkedIn profile</a></li>
  10.             </ul>
  11.       </div>
  12.       <h3>Highlights of Qualifications</h3>
  13.       <ul class="summary">
  14.             <li>Web designer specializing in hand-coded semantic XHTML, cross-browser CSS, progressive enhancement accessibility and usability</li>
  15.             <li>Expert in the design of corporate web sites, intranets, email campaigns and e-commerce applications</li>
  16.             …
  17.       </ul>
  18.       <h3>Technical Expertise</h3>
  19.       <h4>Web Design & Development</h4>
  20.       <ul>
  21.             <li><a href="http://technorati.com/tag/xhtml" class="skill" rel="tag">XHTML</a> — 9 yrs</li>
  22.             <li><a href="http://technorati.com/tag/css" class="skill" rel="tag" >CSS</a> — 9 yrs</li>
  23.             …
  24.       </ul>
  25.       …
  26.       <h3>Experience & Accomplishments</h3>
  27.       <div class="vcalendar">
  28.             <div class="experience vevent vcard">
  29.                   <a class="include nonVisual" href="#emily-hcard-name"></a>
  30.                   <h4 class="title summary">Web Designer</h4>
  31.                   <p class="org fn">Pitney Bowes Business Insight</p>
  32.                   <p><abbr class="dtstart" title="2004-12-01">December 2004</abbr> – present</p>
  33.                   <ul class="description">
  34.                         <li>Designed interfaces and developed XHTML, CSS and graphics for main corporate site, international sites, marketing newsletters, corporate blog, corporate intranet and user conference site</li>
  35.                         …
  36.                   </ul>
  37.             </div>
  38.             …
  39.       </div>
  40.       <h3>Education</h3>
  41.       <div class="vcalendar">
  42.             <div class="education vevent vcard">
  43.                   <h4 class="summary">Web Design & Development Certification</h4>
  44.                   <p class="org fn"><a href="http://www.gwu.edu/index.cfm" class="url" title="Link opens off this site">George Washington University</a>, Center for Professional Development</p>
  45.                   <p><abbr class="dtstart" title="2001-09-01">September 2001</abbr>–<abbr class="dtend" title="2003-06-01">June 2003</abbr></p>
  46.                   <p>GPA 3.8</p>
  47.             </div>
  48.       </div>
  49.       …
  50. </div>
Root Property: hresume

The root property is hresume and it is required. All hResume information should be contained by an element assigned class="hresume":

<div class="hresume">

Required Property: contact

hResume has only one required property, contact, which indicates the name and contact information for the résumé owner. It can be used only once.

Additionally, hResume requires that the contact information be an hCard:

  1. <div class="contact vcard">
  2.       <img src="/images/personal/emilyLewis.jpg" width="150" height="203" class="photo" alt="Emily Lewis" />
  3.       <h2 class="fn n" id="emily-hcard-name"><span class="given-name">Emily</span> <span class="additional-name">Paige</span> <span class="family-name">Lewis</span></h2>
  4.       <p class="adr"><span class="locality">Albuquerque</span>, <abbr class="region" title="New Mexico">NM<abbr> <span class="postal-code">87106</span> <abbr class="country-name" title="United States of America">USA</abbr></p>
  5.       <ul>
  6.             <li><a href="mailto:[email protected]" class="email">eplewis[at]gmail[dot]com</a></li>
  7.             <li><a href="http://www.emilylewisdesign.com/" class="url" rel="me">Design Portfolio</a></li>
  8.             <li><a href="http://www.linkedin.com/in/emilyplewis/" rel="me">LinkedIn profile</a></li>
  9.       </ul>
  10. </div>
Identity Consolidation With rel-me

Also note in my example that I used rel-me on the links to my web sites:

  1. <li><a href="http://www.emilylewisdesign.com/" class="url" rel="me">Design Portfolio</a></li>
  2. <li><a href="http://www.linkedin.com/in/emilyplewis/" rel="me">LinkedIn profile</a></li>

As I detailed in Part 1, rel="me" is used on hyperlinks from one page about a person to other pages about that same person.

Issues With address

The hResume specification further recommends using <address> for containing the person's contact information.

According to the W3C, the <address> element is:

"… used by authors to supply contact information for a document or a major part of a document such as a form."

In the case of a résumé, <address> is semantically correct because the contact information is for the résumé owner.

However, you will note that I do not use <address> in my example (gasp!). This is because <address> can't contain block-level elements.

Sure, I could replace all the <p>s and the <ul> with <span>s, but that makes even less semantic sense to me than forgoing <address> entirely.

Optional Property: summary

The optional property summary indicates the overview of qualifications and objectives. It, too, can only be used once in an hResume.

In my résumé, I don't state an objective, but I do provide a list of qualifications:

  1. <h3>Highlights of Qualifications</h3>
  2. <ul class="summary">
  3.       <li>Web designer specializing in hand-coded semantic XHTML, cross-browser CSS, progressive enhancement accessibility and usability</li>
  4.       <li>Expert in the design of corporate web sites, intranets, email campaigns and e-commerce applications</li>
  5.       …
  6. </ul>
Optional Property: skill

The optional skill property is applied to content that indicates a person's specific skills. skill can be used multiple times within an hResume.

The specification requires that skill content be contained by a link assigned class="skill" and rel="tag":

  1. <ul>
  2.       <li><a href="http://technorati.com/tag/xhtml" class="skill" rel="tag">XHTML</a> — 9 yrs</li>
  3.       <li><a href="http://technorati.com/tag/css" class="skill" rel="tag">CSS</a> — 9 yrs</li>
  4.       …
  5. </ul>
Link Crazy

While I've applied the skill property as the specification indicates, I really do not like all the extra links. I don't quite understand why the specification requires that the property be applied to link … why not any element?

All those extra links seem superflous on a résumé. And I'm not entirely sure they provide added value, particularly for a potential employer. In fact, it could be a distraction for someone interested in learning about me and my professional qualifications.

Tagspaces Seem Irrelevant

Another problem I have with the specification is that it also requires the links be assigned rel="tag".

In Part 1, I explained that rel-tag indicates the destination of the link is a tag (or keyword) that tells what the current page — or part of the page — is about.

Additionally, rel-tag requires that the link destination (href) include the actual value of the tag as the final segment of the URL value. This is known as the "tagspace."

Given these requirements, all of my skill links are directing to Technorati, since it provides such tagspaces.

However, this makes these links even more irrelevant as far as I'm concerned. If I'm going to have all these links, I would much prefer they go to something that provides discrete information about the tag, such as Wikipedia, but there aren't entries for all of my skills and I wanted to at least be consistent.

Ultimately, I may end up changing the link destinations to Wikipedia pages where they are available and removing skill links for which there aren't Wikipedia entries. Or I may decide to remove the skill links entirely. They are optional.

Optional Property: experience

The optional experience property indicates a person's various work experiences. It can be used multiple times.

The specification requires each work "event" be an hCalendar and that each work role/title be an hCard:

  1. <div class="vcalendar">
  2.       <div class="experience vevent vcard">
  3.             <a class="include nonVisual" href="#emily-hcard-name"></a>
  4.             <h4 class="title summary">Web Designer</h4>
  5.             <p class="org">Pitney Bowes Business Insight</p>
  6.             <p><abbr class="dtstart" title="2004-12-01">December 2004</abbr> – present</p>
  7.             <ul class="description">
  8.                   <li>Designed interfaces and developed XHTML, CSS and graphics for main corporate site, international sites, marketing newsletters, corporate blog, corporate intranet and user conference site</li>
  9.                   …
  10.             </ul>
  11.       </div>
  12.       …
  13. </div>
The Include Pattern: Avoiding Redundancy

Because the specification requires the assignment of hCard for all job roles/titles and hCard requires the fn property (the person's formatted name), this would mean that for each experience in my résumé, I would have to list all the name information.

This makes no sense whatsoever and goes against the expected format/content of a résumé.

Fortunately, the microformats folks came up with the include design pattern, which allows data from one area of a page be used in other areas of the same page.

By using the include pattern, I can include my fn information from my contact hCard in my experience hCard and avoid having to repeat it.

First, I had to assign my contact hCard fn information an id that I can reference in my include:

<h2 class="fn n" id="emily-hcard-name"><span class="given-name">Emily</span> <span class="additional-name">Paige</span> <span class="family-name">Lewis</span></h2>

Then, for all of my experience hCards, I added an <a> assigned class="include" with an href value equal to the fn id:

  1. <div class="vcalendar">
  2.       <div class="experience vevent vcard">
  3.             <a class="include nonVisual" href="#emily-hcard-name">Emily Paige Lewis</a>
  4.             <h4 class="title">Web Designer</h4>
  5.             <p class="org fn">Pitney Bowes Business Insight</p>
  6.             <p><abbr class="dtstart" title="2004-12-01">December 2004</abbr> – present</p>
  7.             <ul class="description">
  8.                   <li>Designed interfaces and developed XHTML, CSS and graphics for main corporate site, international sites, marketing newsletters, corporate blog, corporate intranet and user conference site</li>
  9.                   …
  10.             </ul>
  11.       </div>
  12.       …
  13. </div>

Alternately, the include pattern allows for the use of <object> rather than a link. <object> is actually more semantically correct than <a>, however it causes some display issues.

In Safari, for example:

Display of include object in Safari

Chrome does the same thing with scrollbars:

Display of include object in Chrome

Opera doesn't show the scrollbars, but shows a ton of white space where <object> is:

Display of include object in Opera

Both IE6 and IE7 show something (I don't know what to call it) for the <object>:

Display of include object in IE

Given these display inconsistencies, the link is the recommended method for the include pattern. Yet it, too, has issues.

Well, not "issues" really, just something to keep in mind: the link must have inner content to guarantee accessibility for screenreaders.

This means it will display on the browser, which necessitates that I use CSS to hide the content (via display:none) so that the link doesn't appear multiple times.

Datetime Design Pattern

Update: 06/02/2009

The datetime design pattern is now deprecated in favor of the value class pattern. See part 8 of this series for more on this new pattern.

For each of my work "events" I use hCalendar as recommended. This also means I'm using the datetime design pattern for my start and end dates:

<p><abbr class="dtstart" title="1999-11-01">November 1999</abbr> – <abbr class="dtend" title="2004-01-01">January 2004</abbr></p>

This pattern specifies that the containing element is an <abbr> which has a title attribute value that reflects "machine-readable" date/time information while the contained information (and what displays in the browsers) is "human-readable" date/time information.

Further, the datetime design pattern specifies that the title value should be expressed in ISO 8601 format.

As I detailed in Part 4, there are accessibility concerns surrounding the datetime design pattern that have yet to be addressed.

Optional Property: education

The optional education property indicates education "events," such as undergraduate schooling. education can be used multiple times within an hResume.

Similar to experience, the specification requires that each education "event" be an hCalendar. And while it isn't part of the specification, I also added hCard information for each institution:

  1. <div class="vcalendar">
  2.       <div class=" education vevent vcard">
  3.             <h4 class="summary">Web Design & Development Certification</h4>
  4.             <p class="org fn"><a href="http://www.gwu.edu/index.cfm" class="url" title="Link opens off this site">George Washington University</a>, Center for Professional Development</p>
  5.             <p><abbr class="dtstart" title="2001-09-01">September 2001</abbr>–<abbr class="dtend" title="2003-06-01">June 2003</abbr></p>
  6.             <p>GPA 3.8</p>
  7.       </div>
  8. </div>

What I Didn't Use

hResume also supports affiliation and publication information. I did not use either of these in my résumé because they aren't relevant to me (yet). But here are some examples of how I would implement them.

Optional Property: affiliation

The optional affiliation property indicates organizations with which a person is affiliated. affiliation can be used multiple times in an hResume.

The specification requires that the organization contained by affiliation be an hCard:

  1. <ul>
  2.       <li class="affliation vcard"><span class="fn org">Association for Accounting Marketing</span></li>
  3.       <li class="affliation vcard"><span class="fn org">NM Adobe Users Group</span></li>
  4. </ul>
Publications

hResume doesn't have a property specific to publications. Instead, the specification recommends the use of <cite> to indicate publications a person has authored:

<cite>"Choosing the Best Managed Care Plan"</cite>, New OD, September 1998

Tools to Make it Easier

That covers the entirety of hResume. Now, how about making it easier on yourself? There are a few tools to help you implement hResume:

Other Tools

Unfortunately, I couldn't find any hResume aggregators or extractors, although I've seen mention that SimplyHired uses hResume to aggregate job seekers' résumés. Unfortunately, I couldn't find specific information about this, nor did I see any hResume on the site.

I also couldn't find any browser plugins or add-ons, though, interestingly, an earlier version of the Tails Firefox extension supported hResume. But this doesn't work with the current version of Firefox.

On some level, this lack of tools this surprises me. But it also doesn't.

As I ranted at the beginning of this article, the available information on hResume is minimal and not too easy to digest. Plus, hResume is a draft. Doesn't surprise me that folks haven't invested too much in developing tools for it.

I hope this changes.

Benefits

For me, when someone asks why I'm using microformats, the answer is simply "Why wouldn't I?" Standards, semantics and microformats are all good in my world.

But here are just a few benefits of hResume and microformats for those who need convincing.

Standardization & Innovation

hResume provides a standardized way for people to control their résumé data, which is a needed foundation for innovative tools and technologies.

If job boards were to embrace hResume, this standardization means that résumé content could be housed and updated in one location, and then pinged to job boards when there are updates.

This standardization also provides the foundation for people to have rich and useful résumés that could be easily searched by potential employers and clients.

Semantics & Simplicity

hResume adds structure and meaning to résumé content and makes it both human– and machine–readable. All with existing standards for markup and data.

And despite my own struggle implementing hResume, it is intentionally simple. Just a few class names added to markup and hResume is in place.

That's It?

Well, that's all I have for hResume. But it isn't the true end of this series.

I have one more article: a conclusion where I plan to discuss what I've learned during the process of writing this series.

I also plan to touch on accessibility, semantics and standards (again). And a brief discussion of the "microformats vs. RDF" debate is in order. And whatever else may occur to me.

Until then …

Update: 12/07/2008

Jia Mi has translated this article in Chinese: 使用微格式来丰富网站语义:hResume.

I don't read Chinese, so I can't attest for the translation. But the intention is good, so I'm promoting it.

Update: 1/08/2009

Jan Sládek has translated this article in Czech: Kódujme sémanticky s mikroformáty: hResume.

HTML5 Cookbook

Interested in HTML5?
Get the Cookbook!

I was a contributing author for HTML5 Cookbook, available for sale on Amazon! Get yours now! (I hear chapters 1, 4 and 5 are particularly good.)

P.S. Don't forget my book Microformats Made Simple is still for sale!

Tags:

Share the Love

Sean's Gravatar

Sean opines:

11/14/2008

bookmarked on delicious to read later - loving this whole series.

Emily's Gravatar

Emily responds:

11/15/2008

@Sean - Thanks so much. I’m thrilled it has turned out to be such a helpful series.

And if you have any feedback once you get a chance to read this one, please don’t hesitate.

Anthony Johnston's Gravatar

Anthony Johnston opines:

11/15/2008

Nice post, I completely missed the profile property on my implementation. Fixed now - thanks, all the best, Ant

Emily's Gravatar

Emily responds:

11/15/2008

@Anthony - Thanks and happy to have added something useful to your implementation.

Also, love your resume/CV builder. Great to see development that makes it easier for folks to use microformats :)

Anuj's Gravatar

Anuj opines:

12/02/2008

Hi Emily

Thanks for informative post. I am new to microformats hence just had a small query. I took my profile from linked-in and was trying to retrieve certain info programmatically like summary, experience etc based on class names.

But I am not able to retrieve my website information. Below is how it looks like

div id=“additional-information” h2 Additional Information /h2

h3 Mehta. Anuj’s Websites: /h3

ul class=“websites”   li   a href=“http://anuj-mehta.blogspot.com/” class=“url” rel=“me nofollow” target=“_blank”                     My Blog                   /a             /li           /ul           /div

 

Please guide me how can I retrieve this info?

Thanks in advance

Emily's Gravatar

Emily responds:

12/02/2008

Anuj - Unfortunately, I don’t understand what you are having problems with or what your question is.

Please email me with further details.

Kurt Greenbaum's Gravatar

Kurt Greenbaum opines:

02/26/2009

Sounds like you’ve sort of addressed this when you said, you “couldn’t find any hResume aggregators or extractors.” I have been trying to play with hresume because I am maintaining my profile on LinkedIn and it would be handy to have a resume on my blog, managed from the LinkedIn profile (two locations, one place to screw around with it).

But for the non-programmer, I’m not sure I’m up to trying to build myself an hresume template. Kinda surprised that templates are so hard to find out there. There’s a zillion free WP themes…but no resumes? Maybe it’s because, as you mentioned, the format is in “draft.”

Anyway, thanks for the informative post. Maybe I’ll see if I can walk my way through building a template. :)

kminek's Gravatar

kminek opines:

06/24/2011

your article helped me alot while implementing hResume inside my app which lets you manage your resume online - you can check it out here:

hresume.co.cc

geetings :)

Commenting is not available in this channel entry.

The Coolest Person I Know

Emily Lewis

Yeah, that would be me: .

I'm a freelance web designer of the standardista variety, which means I get excited about things like valid POSH, microformats and accessibility. I ply my trade from my one-person design studio in Albuquerque, New Mexico 87106 USA.

A Blog Not Limited is my personal blog where I pontificate about web design, web standards, semantics and whatever else strikes my fancy. Head on over to Emily Lewis Design if you'd like to see my work or, even better, hire me.

More

I Tweet, Therefore I Am

Follow @emilylewis on Twitter!