1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var HCard = Microformat.create();
with(HCard) {
  container('vcard');

  one('fn', 'bday', 'tz', 'sort_string', 'uid', 'class');
  many('label', 'sound', 'title', 'role', 'key', 
       'mailer', 'rev', 'nickname', 'category', 'note',
       {logo: 'url', url: 'url', photo: 'url'});

  one('n', function(mf){with(mf){
    one('family_name', 'given_name', 'additional_name');
    many('honorific_prefix', 'honorific_suffix');
  }});

  many('email', function(mf){with(mf){
    many('type');
    many('value');
  }});

  many('tel', function(mf){with(mf){
    many('type');
    many('value');
  }});

  many('adr', function(mf){with(mf){
    one('post_office_box', 'extended_address', 'street_address',
        'locality', 'region', 'postal_code', 'country_name', 'value');
    many('type');
  }});

  one('geo', function(mf){with(mf){
    one('latitude', 'longitude');
  }});

  many('org', function(mf){with(mf){
    one('organization_name', 'organization_unit');
  }});
};