The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use HTML::Microformats;
use RDF::TrineX::Functions -shortcuts;
use RDF::iCalendar::Exporter;

my $hcalendar = <<'HTML';

	<div class="hentry" id="fooble">
		<span class="entry-title">Foo</span>
		<span class="published updated">2011-02-02</span>
	</div>
	
	<div class="vfreebusy">
		<b class="summary">I'm busy some times</b>
		<i class="freebusy">
			<u class="fbtype">busy</u>
			<b class="value">19980415T133000Z/19980415T170000Z</b>
			<b class="value">19990415T133000Z/19990415T170000Z</b>
		</i>
	</div>

  <div class="vevent">
    <h1 class="uid" id="xmas">
      <span class="summary">Christmas</span> Schedule
    </h1>
    <abbr class="dtstart" title="0001-12-25" style="display:none"></abbr>
    <p class="comment rrule"><span class="freq">Yearly</span>
    period of festive merriment.</p>
    <div class="attendee vcard">
      <b class="role">
        <abbr title="REQ-PARTICIPANT">Required for merriment:</abbr>
      </b><br>
      <span class="fn">
        <span class="honorific-prefix nickname">Santa</span>
        <span class="given-name">Claus</span>
      </span>
      (<span class="adr><span class="region">North Pole</span></span>)
    </div>
	 <p class="location geo">12;34</p>
  </div>
  
    <div class="vtodo">
      <h2 class="uid" id="shopping">Shopping</h2>
      <abbr class="dtstart" title="2008-12-01">In December</abbr>, don't forget
      to <span class="summary">buy everyone their presents</span> before the
      shops shut on <abbr class="due" title="2008-12-24T16:00:00">Christmas
      Eve</abbr>!
      <a class="attach" rel="enclosure" href="data:,Perl%20is%20good">attachment</a>
		<div class="valarm">
			<span class="summary">Reminder!</span>
			<span class="trigger">-PT12H</span>
		</div>
    </div>
    
    <div class="vevent">
      <h2 id="jones" class="uid summary">Jones' Christmas Lunch</h2>
      <p class="comment">The Joneses have been having a wonderful lunch 
      <abbr class="rrule" title="FREQ=YEARLY">every year</abbr> at
      <abbr class="dtstart" title="2003-12-25T13:00:00Z">1pm for the last
      few years</abbr>.</p>
      <p><span class="attendee">Everyone</span>'s invited.</p>
      <i class="category">Foo</i>
      <i class="category">Bar</i>
      <i class="category">Baz</i>
      <a rel="tag" href="/tag/Foo">Foo</a>
		<div class="location vcard">
			 <p class="adr">
				<span class="fn extended-address">Jones Household</span>
				<span class="locality">Lewes</span>
				<span class="region">East Sussex</span>
			 </p>
		 </div>
    </div>
  
  <div class="vevent">
    <h2 class="summary">Boxing Day</h2>
    <p class="comment">
      <abbr class="rrule" title="FREQ=YEARLY">Every year</abbr>
      <abbr class="dtstart" title="0001-12-26">the day after</abbr>
      <a class="related-to" href="#xmas" rel="vcalendar-sibling">Christmas</a>
      is Boxing Day. Nobody knows quite why this day is called that.
    </p>
	 <p class="contact organizer attendee vcard">
		<a class="fn email" href="mailto:alice@example.net">Alice Jones</a>
		<span class="role">required</span>
		<span class="sent-by vcard">
			<a class="fn email" href="mailto:bob@example.net">Bob Jones</a>
		</span>
	 </p>
	 <p class="location adr">
		<span class="locality">Lewes</span>
		<span class="region">East Sussex</span>
	 </p>
  </div>
  
  <div class="vevent">
  <p>Our organisation has been offering a series of <span class="summary"
  >summer lectures</span> since
  <abbr class="dtstart" title="19970105T083000">January 1997</abbr>. They
are
  <span class="rrule">
    held <span class="freq">yearly</span>,
    every <span class="interval">2</span>nd year (1999, 2001, etc),
    every <span class="byday">Sunday</span>
    in January <abbr class="bymonth" title="1" style="display:none"></abbr>
    at <span class="byhour">8</span>:<span class="byminute">30</span> and
    repeated at <span class="byhour">9</span>:30.
  </span>
</p>
</div>

HTML

my $doc = HTML::Microformats->new_document($hcalendar, 'http://hcal.example.net/')->assume_all_profiles;
my @objects = $doc->objects('hCalendar');
print $objects[0]->to_icalendar;

#print rdf_string($doc->model =>'RDFXML');
#print "========\n";
#my @cals = RDF::iCalendar::Exporter->new->export_calendars($doc->model);
#print "========\n";
#print $_ foreach @cals ;