#!/usr/bin/perl
use strict;
use HTML::HTML5::Builder ':standard';
use RDF::Trine;
use RDF::QueryX::Lazy;
my $source = q<http://danbri.org/foaf.rdf>;
my $data = RDF::Trine::Model->new;
RDF::Trine::Parser->parse_url_into_model($source => $data);
my ($who, $name);
my $result_name = RDF::QueryX::Lazy->new(<<SPARQL)->execute($data);
SELECT ?who ?name
WHERE {
<$source> foaf:primaryTopic ?who .
?who foaf:name ?name .
}
SPARQL
if (my $result = $result_name->next)
{
($who, $name) = @{$result}{qw/who name/};
}
my $result_mboxes = RDF::QueryX::Lazy->new(<<SPARQL)->execute($data);
SELECT ?mbox
WHERE {
<$source> foaf:primaryTopic ?who .
?who foaf:mbox ?mbox .
}
SPARQL
print "Content-Type: text/html\r\n\r\n";
print html(
head(title($name->literal_value)),
body(
-about => $who->uri,
-vocab => 'http://xmlns.com/foaf/0.1/',
h1(-property => 'name', $name->literal_value),
h2('Mailboxes'),
ul(-rel => 'mbox',
map {
my $e = $_->{mbox}->uri;
li(a(-href=>$e, $e))
} $result_mboxes->get_all
),
)
);