XML-Generator-RFC822-RDF
view release on metacpan or search on metacpan
lib/XML/Generator/RFC822/RDF.pm view on Meta::CPAN
my $self = shift;
my $msg = shift;
if ($self->{'__brief'}) {
return 1;
}
my $count = 1;
my $parsed = Email::MIME->new($msg->as_string());
my @parts = $parsed->parts();
$self->start_element({Name => "rfc822:Body"});
$self->start_element({Name => "rdf:Seq"});
my $sha1_msgid = sha1_hex($msg->header("Message-ID"));
my $body = sprintf("x-urn:ietf:params:rfc822:Body#%s",$sha1_msgid);
foreach (@parts) {
my $mpart = sprintf("%s_%s",$body,$count++);
$self->start_element({Name => "rdf:li",
Attributes => {"{}rdf:resource" => {Name => "rdf:resource",
Value => encode_utf8($mpart)}}});
$self->end_element({Name => "rdf:li"});
}
$self->end_element({Name => "rdf:Seq"});
$self->end_element({Name=>"rfc822:Body"});
$self->{'__parts'} = \@parts;
return 1;
}
sub _dump_body_parts {
my $self = shift;
my $msg = shift;
if ($self->{'__brief'}) {
return 1;
}
my $count = 1;
foreach my $part (@{$self->{'__parts'}}) {
my $mpart = sprintf("x-urn:ietf:params:rfc822:Body#%s_%s",
sha1_hex($msg->header("Message-ID")),
$count++);
$self->start_element({Name=>"rdf:Description",
Attributes=>{ "{}rdf:about" => {Name => "rdf:about",
Value => encode_utf8($mpart)}}});
$self->start_element({Name=>"rfc822:content-type"});
$self->characters({Data=>&_prepare_text($self->{'__parts'}->[0]->content_type())});
$self->end_element({Name=>"rfc822:content-type"});
$self->start_element({Name=>"rdf:value"});
$self->start_cdata();
# Oof - do I need to mime_decode all this too?
$self->characters({Data=>&_prepare_text($self->{'__parts'}->[0]->body_raw())});
$self->end_cdata();
$self->end_element({Name=>"rdf:value"});
$self->end_element({Name=>"rdf:Description"});
}
return 1;
}
sub _dump_emails {
my $self = shift;
foreach my $email (keys %{$self->{'__addrs'}}) {
$self->start_element({Name=>"rdf:Description",
Attributes=>{"{}rdf:about" => {Name => "rdf:about",
Value => &_prepare_mbox($email)}}});
#
my $fn = $self->{'__addrs'}->{$email};
$self->start_element({Name => "vCard:FN"});
my @keys = grep { /^\w/ } keys %$fn;
if (scalar(@keys) > 1) {
$self->start_element({Name => "rdf:Bag"});
foreach my $name (@keys) {
$self->start_element({Name=>"rdf:li"});
$self->characters({Data => &_prepare_text($name)});
$self->end_element({Name=>"rdf:li"});
}
$self->end_element({Name => "rdf:Bag"});
}
else {
$self->characters({Data => &_prepare_text($keys[0]) });
}
$self->end_element({Name => "vCard:FN"});
#
$self->start_element({Name => "vCard:EMAIL"});
$self->characters({Data => $email});
$self->end_element({Name => "vCard:EMAIL"});
$self->end_element({Name => "rdf:Description"});
}
return 1;
}
sub _dump_relations {
my $self = shift;
if (! exists($self->{'__relations'})) {
return 1;
}
( run in 1.707 second using v1.01-cache-2.11-cpan-ceb78f64989 )