hcalendar-ru
hCalendar
hCalendar является простым, открытым, распределённым форматом для разметки календарных и иного рода событий. Данный микроформат основан на стандарте iCalendar (RFC 2445). hCalendar можно внедрить в HTML, XHTML и XML-подобные языки разметки. hCalendar — один из микроформатов.
Хотите уже сейчас разметить события на своих страницах с помощью hCalendar? Попробуйте использовать генератор hCalendar. Помимо автоматического создания микроформата, вы можете самостоятельно его разметить, используя пошаговую инструкцию.
Введение
Стандарт iCalendar (RFC 2445) уже довольно долгое время используется в сети и в прикладных приложениях (например, iCal в Mac OS X).
В дополнение к этому, блоггеры очень часто обсуждают различные события в своих блогах: грядущие события или описания старых. С добавлением небольших изменений, блоггеры смогут обсуждать события в своём блоге таким образом, что различные поисковые роботы и другие аггрегаторы смогут автоматически их получать, конвертировать в iCalendar, а затем использовать в любых прикладных приложениях или сервисах.
Данная спецификация включает в себя описание формата hCalendar в качестве проекции стандарта iCalendar на семантический (X)HTML. Таким образом, авторы блогов могут включать данный формат напрямую в свои страницы, а не ссылаться на определённый внешний файл.
Особенности реализации в XHTML
Стоит заметить, что поддержка <abbr>
в Internet Explorer далека от совершенства и для полной работоспособности данного элемента могут понадобиться другие средства.
См. подробнее особенности семантики.
Формат
Детальное описание
Стандарт iCalendar (RFC 2445) является основой для микроформата hCalendar.
Одной из целью hCalendar является использование названий свойств iCalendar в нижнем регистре для имён классов и создания иерархии из XHTML-элементов, похожей на иерархию элементов iCalendar.
Имя корневого класса
Корневым классом для hCalendar является vcalendar, отсюда следует, что элемент с таким классом и будет называться hCalendar.
Корневым классом для событий является vevent. Элемент с таким классом называется событием hCalendar (hCalendar event).
Для облегчения внедрения формата и его последующей автоматической обработки, оба класса, vevent и vcalendar, считаются корневыми. Если документ содержит элементы с именем класса vevent, но не содержит элементов с классом vcalendar, значит весь документ принимает на себя контекст vcalendar.
Свойства и подсвойства
Свойства hCalendar представляют собой вложенные внутри hCalendar (элемента с классом vcalendar или vevent) элементы. Элементы с указанными именами классов содержат в себе значения свойств hCalendar. У некоторых свойств есть подсвойства, которые обладают таким же свойством вложенности элементов.
Список свойств
Обязательные:
- dtstart (дата по ISO-стандарту (англ))
- summary
Необязательные:
- location
- url
- dtend (дата по ISO-стандарту), duration (период по ISO-стандарту)
- rdate, rrule
- category, description
- uid
- geo (latitude, longitude)
Данный список является незавершённым, но он отображает те свойства, которые используются при разметке hCalendar чаще остальных.
Семантические эквиваленты
Для некоторых свойств существуют более семантичные эквиваленты, поэтому они распознаются особым образом:
URL
в iCalendar превращается в<a class="url" href="...">...</a>
внутри элементаclass="vevent"
в hCalendar.ATTENDEE
,CONTACT
иORGANIZER
в iCalendar могут быть представлены с помощью микроформата hCard в hCalendar .- Названный
LOCATION
(с адресом и/или географическими координатами) в iCalendar может быть представлен вложенным в hCalendar hCard. Подобно ему, адрес вLOCATION
может быть представлен, используя микроформат adr, а географические данные — geo. UID
в iCalendar просто становится URL, где обозначено событие hCalendar.
Однозначные и многозначные свойства
Для свойств, которые встречаются (должны встречаться) только один раз (подобно N и FN из vCard), первый вложенный элемент с таким классом считается эффективным, остальные должны игнорироваться.
Для свойств, которые могут встречаться неоднократно (как TEL из vCard), каждый элемент с таким классом должен создавать новый экземпляр этого свойства. Многозначные свойства с подтипами (как TEL с WORK, HOME, CELL из vCard) могут быть оптимизированы таким образом, чтобы разделять один общий элемент для самого свойства, тогда подтипы становятся потомком элемента, содержащего свойство.
Удобочитаемость со стороны человека и машины
Если для отображения свойства используется элемент <abbr>
, тогда применённый к нему атрибут title
является значением такого элемента, а не содержимое этого элемента, который, заместо этого, предоставляет удобочитаемый вариант свойства. Данная спецификация рекомендует использовать элемент <abbr></code для отображения таких свойств, как:
- DTSTART
- DTEND
- DURATION
- RDATE
- RRULE
Примеры
iCalendar и hCalendar
Пример описания события в iCalendar:
BEGIN:VCALENDAR
PRODID:-//XYZproduct//EN
VERSION:2.0
BEGIN:VEVENT
URL:http://www.web2con.com/
DTSTART:20071005
DTEND:20071020
SUMMARY:Web 2.0 Conference
LOCATION:Argent Hotel\, San Francisco\, CA
END:VEVENT
END:VCALENDAR
Эквивалентная вышеприведённому примеру разметка hCalendar
<div class="vevent">
<a class="url" href="http://www.web2con.com/">http://www.web2con.com/</a>
<span class="summary">Web 2.0 Conference</span>:
<abbr class="dtstart" title="2007-10-05">October 5</abbr>-
<abbr class="dtend" title="2007-10-20">19</abbr>,
at the <span class="location">Argent Hotel, San Francisco, CA</span>
</div>
Вышеотмеченная разметка hCalendar будет отображена похожим образом:
http://www.web2con.com/
Web 2.0 Conference:
October 5-
19,
at the Argent Hotel, San Francisco, CA
Заметьте, что парсеры уже сейчас могут найти этот микроформат на этой странице.
hCalendar с размытым событием
Следующий пример отмечает время встречи, которая начинается в 8:30 AM EST, 12 марта 1998 года и заканчивается в 9:30 AM EST, 12 марта 1998 года.
BEGIN:VCALENDAR
BEGIN:VEVENT
UID:guid-1.host1.com
DTSTAMP:19980309T231000Z
DESCRIPTION:Project XYZ Review Meeting
SUMMARY:XYZ Project Review
DTSTART:19980312T133000Z
DTEND:19980312T143000Z
LOCATION:1CP Conference Room 4350
END:VEVENT
END:VCALENDAR
Эквивалент вышеприведённому примеру:
<div class="vevent">
<h3 class="summary">XYZ Project Review</h3>
<p class="description">Project XYZ Review Meeting</p>
<p>To be held on <abbr class="dtstart" title="1998-03-12T08:30:00-05:00">12 March 1998 from 8:30am EST</abbr>
until <abbr class="dtend" title="1998-03-12T09:30:00-05:00">9:30am EST</abbr></p>
<p>Location: <span class="location">1CP Conference Room 4350</span></p>
<small>Booked by: <span class="uid">guid-1.host1.com</span> on
<abbr class="dtstamp" title="19980309T231000Z">9 Mar 1998 6:00pm</abbr></small>
</div>
Его возможное отображение:
XYZ Project Review
Project XYZ Review Meeting
To be held on 12 March 1998 from 8:30am EST
until 9:30am EST
Location: 1CP Conference Room 4350
Booked by: guid-1.host1.com on 9 Mar 1998 6:00pm
Примечания к примеру
- Информация о продукте необязательна, так как hCalendar — формат для обмена. Когда hCalendar трансформируется обратно в iCalendar, сам транскодер может добавить его собственный ID (product ID).
- Окружение hCalendar элементом
<span class="vcalendar">
является необязательным, поэтому данный элемент в примере опущен. Если элемент vcalendar опускается, то vevent начинает принадлежать ко всему документу в целом, который в данном случае игрет роль vcalendar-контейнера. Авторы разметки могут напрямую указывать элементы с vcalendar, если у них, к примеру, на странице содержится несколько календарей, событийных веток.
- Информация о версии в hCalendar необязательна, так как её можно получить через атрибут profile элемента head.
- Даты по стандарту ISO 8601 (требуемые стандартом iCalendar) не являются слишком дружелюбными человеческому глазу. В добавление к этому, год часто распознаётся читателями из контекста. Именно поэтому спецификация рекомендует использовать элемент
<abbr>
, с помощью которого можно вынести неудобочитаемые данные в атрибут title, а приемлемые для осознавания сведения поместить в сам элемент.
- Для улучшения удобочитаемости следует использовать указанный в RFC 3339 формат данных:
YYYY-MM-DDThh:mm:ss
- Разница между ISO 8601 датой DTEND (2005-10-08) и удобочитаемой датой (7) не является ошибкой. DTEND — уникальное значение. Это значит, что события кончается прямо перед DTEND. Для событий, начинающихся в один день и заканчивающихся в другой, дата в DTEND должна быть указана на день позже актуальной.
- Местоположение в данном примере непосредственно содержит в себе данные, которые можно было бы разметить с помощью hCard.
Другие примеры
Примеры в сети
См. отдельную страницу с примерами в сети.
Кнопки
- См. другие кнопки
Реализации
См. реализации.
Ссылки
Нормативные
Информативные
Связанные спецификации
Связанные работы
Дополнительный материал
- JWZ - Hula
- Groupware Bad от Jamie Zawinski
- Блог Jason Klemow
- «Движение вперёд с микроформатами» от Jon Udell.
- См. также блоги с обсуждениям и статьи, отмеченные меткой hCalendar.
- Wikipedia о hCalendar
Связанные страницы