SVG-DOM2
view release on metacpan or search on metacpan
lib/SVG/DOM2/Element/MetaData.pm view on Meta::CPAN
package SVG::DOM2::Element::MetaData;
use base "XML::DOM2::Element";
use strict;
sub new
{
my ($proto, %args) = @_;
return $proto->SUPER::new('metadata', %args);
}
sub data
{
my ($self) = @_;
warn "Trying to get DATA: $self\n";
if(not $self->{'data'}) {
# Generate with RDF:
my $result = {};
my ($rdf) = $self->getChildrenByName('rdf:RDF');
if($rdf) {
my ($work) = $rdf->getChildrenByName('cc:Work');
$result = $self->_format_rdf_hash($work);
$self->{'rdf'} = 1;
}
$self->{'data'} = $result;
}
return $self->{'data'};
}
sub _format_rdf
{
my ($self, $child) = @_;
# Resource
my $rdfns = $self->document->getNamespace('rdf');
my $resource = $child->getAttributeNS($rdfns, 'resource');
return $resource->value if defined $resource;
# Value
return $child->cdata->text if $child->hasCDATA;
# Structure
my $result;
my ($achild) = $child->getChildren;
return '' if not $achild;
if($achild->localName =~ /Bag|Alt|Seq/) {
# Array
$result = [ map { $self->_format_rdf($_) } $achild->getChildrenByName('rdf:li') ];
} elsif($achild->localName eq 'Agent') {
# Hash
$result = $self->_format_rdf_hash($achild);
}
return $result;
}
sub _format_rdf_hash
{
my ($self, $child) = @_;
my $result = {};
foreach my $achild ($child->getChildren) {
my $name = $achild->localName;
$result->{$name} = $self->_format_rdf($achild);
}
return $result;
}
sub list
{
my ($self) = @_;
return $self->list_hash($self->data);
}
sub list_data
{
my ($self, $data) = @_;
return '"'.$data.'"' if not ref($data);
if(UNIVERSAL::isa($data, 'HASH')) {
return $self->list_hash($data);
} elsif(UNIVERSAL::isa($data, 'ARRAY')) {
return $self->list_array($data);
}
}
sub list_array
{
my ($self, $array) = @_;
return '['.join(', ',map { $self->list_data($_) } @{$array}).']';
}
sub list_hash
{
my ($self, $hash) = @_;
return '{'.join(', ', map { $_.' = '.$self->list_data($hash->{$_}) } keys(%{$hash}) ).'}';
}
=head2 MetaData Fields
title - Image title
description - Image discription
subject - Array of subjects (contexts)
publisher - Company who publishes the work
( run in 1.742 second using v1.01-cache-2.11-cpan-140bd7fdf52 )