hCard представляет собой реализацию спецификации RFC 2426 (более известной как vCard) в виде микроформата. Основной его целью является предоставление стандарта оформления персональных данных на просторах Сети, но помимо этого имеется возможность указания информации об компаниях, организациях или местах. Как и любой другой микроформат, hCard реализуется без нарушения стандартов XHTML с помощью атрибутов тэга class, причем какие именно тэги используются - не важно. Для оформления данных используя этот микроформат достаточно лишь объявить какой-либо тэг hCard объектом с помощью class="vcard" и разместить внутри него все тэги, обозначающие какое-либо свойство объекта. Большая часть информации, предоставляемой в соответствии с этим микроформатом является опциональной, единственным обязательным свойством является имя объекта - class="fn". Помимо этого в атрибуте profile тэга <head> принято указывать адрес http://www.w3.org/2006/03/hcard.

В целом все свойства объектов hCard можно поделить на семь групп:

идентификационные
– различные варианты имен объекта.
адресные
– указания различных адресов, каким-либо образом ассоциирующихся с объектом: место жительство, работы и тому подобные.
телекоммуникационные
– любые формы контактной информации: номера телефонов, факс, адреса электронной почты и так далее.
географические
– месторасположение объекта.
организационные
– информация о должности и компании или организации, в которой работает объект.
уточняющие
– любая дополнительная информация об объекте.
безопасность
– ограничение доступа к информации в hCard.

Значением каждого свойства является видимый пользователю текст, получающийся в результате обработки документа браузером (или другим парсером данных). Но стоит несколько остановиться на свойстве photo, так как для него действуют несколько другие правила размещения значения:

  • при использовании свойства photo в тэге <a>, значением является адрес из атрибута href;
  • в тэге <img>, значением является само изображение, то есть значение атрибута src
  • в <object>, значением является атрибут `data, то есть его источник данных.

Раз уж зашла речь об размещении значений свойств, то сразу хочется сказать об небольшом исключении в виде тэга <abbr>, где оно задается в атрибуте title, а внутри самого тэга - некое более удобное для чтения людьми его представление.

Если тэг, обозначенный любым свойством, содержит какую-либо информацию помимо самого значения свойства, то для отделения релевантного контента от лишней информации можно разместить внутри тэга свойства дочерние объекты, обозначив их атрибутом class="value". Это даст понять парсеру микроформата, что собрав воедино (методом конкатенации) все значения помеченных таким образом объектов он сможет получить значение исходного свойства. Описание получилось несколько запутанным, так что лучше продемонстрировать этот принцип на примере, в котором значению свойства fn будет присвоено значение "Иван Блинков":

<div class="vcard">
  <div class="fn">
    <span class="value">Иван </span>подпрыгнул три раза на месте,
    обернулся и увидел написанную на стене
    свою фамилию: <span class="value">Блинков</span>.
  </div>
</div>

Как не трудно заметить, значение свойства разбавлено массой ненужной информации, но с помощью тэгов с атрибутом class="value" мне удалось выделить лишь важную информацию, не поменяв при этом внешний вид документа. Парсер микроформатов, читая этот документ, соединит обе части и получит в итоге как раз "Иван Блинков", что и будет соответствовать желаемому имени объекта.

Вы заметили в предыдущем примере пробел после моего имени? Он был поставлен для того, чтобы при конкатенации составные части значения не слились в одно слово "ИванБлинков", не самый удобный подход к решению проблемы, но у него есть альтернатива в виде тэга <abbr> (не забываем про упомянутое чуть выше исключение):

<div class="vcard">
  <abbr class="fn" title="Иван Блинков">
    Иван
  </abbr>
  подпрыгнул три раза на месте,
  обернулся и увидел написанную на стене
  свою фамилию: Блинков.
</div>

Общей информации на сегодня хватит, так что перейду к деталям реализации.

Идентификационные свойства

СвойствоОписание
fnполное имя объекта (formatted name)
nимя, используется для идентификации составных частей fn (name)
nicknameпрозвище
bdayдень рождения в формате YYYY-MM-DD(birthday)
photoфотография

Свойство fn уже успели слегка обсудить, так что перейдем сразу к n. Как уже было сказано, используется он для детализации составных частей полного имени объекта, для чего оно имеет ряд подсвойств, используемых в дочерних элементах:

given-name
– имя.
additional-name
– отчество.
family-name
– фамилия.
honorific-preffix
– какой-либо префикс к имени, отображающий социальный статус человек.
honorific-suffix
– суффикс с тем же смыслом.

Выглядит это все примерно так, ничего сложного:

<div class="vcard">
  <div class="n">
    <span class="given-name">Иван</span>
    <span class="additional-name">Иванович</span>
    <span class="family-name">Блинков</span>
  </div>
</div>

Адресные свойства

Адрес может быть указан в двух формах:

  • adr - структурированной (с указанием составных частей);
  • label - не структурированной.

Для структурированного адреса используются подсвойства по аналогии с n:

СвойствоОписание
post-office-boxпочтовый адрес
extended-addressполный адрес (с номером подъезда, квартиры и т.д.)
street-addressулица
localityгород
regionрегион, штат или провинция
postal-codeиндекс
typeтип адреса, то есть то, как он связан с исходным идивидом, должен принимать одно из значений: dom, parcel, home, work, pref

label же используется просто для написания адреса по тому же принципу, как если бы Вы писали его, например, на конверте традиционного письма. Возможно использование подсвойства type как и в adr.

С телекоммуникационными свойствами все проще:

  • телефон - tel;
  • адрес электронной почты - email;
  • почтовый клиент - mailer (не понятно - и зачем он тут сдался?).

Телефонный номер может иметь тип (type):

  • home - домашний
  • msg - имеется автоответчик
  • work - рабочий
  • pref - предпочтительный
  • voice - голосовой
  • fax - факс
  • cell - мобильный aka сотовый
  • video - для видеоконференций
  • pager - пэйджер
  • bbs - bulletin board system
  • modem - возможно использование модема
  • isdn - integrated services digital network
  • pcs - personal communication service

Географические свойства также не отличаются особой сложностью:

  • tz - временная зона
  • long - широта
  • lat - долгота

С ручным заполнением этих свойств могут возникнуть некоторые проблемы, но при интеграции веб-приложения с сервисом вроде Google Earth - должно быть вполне удобно.

Свойства, описывающие индивида с точки зрения работы, немногочисленны:

  • title - должность
  • role - роль
  • logo - ссылка на логотип компании
  • agent - указание представителя индивида, например секретаря, например в виде ссылки на его hCard
  • org - название компании

Дополнительные свойства:

  • category - категория, то есть чем по сути является данный hCard, например - визитка
  • note - какие-либо замечания к остальным свойствам
  • rev - время последнего редактирования hCard, то есть время на которое данная информация является актуальной
  • sort-string - отмечает какая часть hCard (обычно часть имени), которая будет использована при сортировке списка из нескольких hCard
  • sound - адрес, указывающий на звуковой файл с правильным произношением имени индивида
  • url - адрес персонального или корпоративного сайта
  • uid - уникальный идентификационный номер в каком-либо специфицированном IANA формате (подсвойство type указывает в каком именно)

Для обеспечения ограничения доступа к данным из hCard используется два свойства - class и key. class определяет уровень доступа по примерно тому же принципу, что и в ООП: public или confidentional. А свойство key предоставляет публичный ключ, для расшифровки данных с закрытым доступом.

Хочется добавить, что благодаря своей структурированной архитектуре данный микроформат может использоваться в более широком спектре случаев, чем просто предоставление персональных данных, например, можно описывать и просто организацию или какое-либо место. Те же самые принципы могут быть использованы и при оформление персональных данных в формате XML - достаточно лишь использовать те же самые атрибуты hCard для произвольных тэгов XML.

В заключение хочу сказать, что в качестве источников информации для данной статьи были использованы официальная вики и презентация от Robert Costello, а подписаться на RSS можно вот ТУТ.

13 апреля 2008 |  Иван Блинков  |  Теория