Alvis-Convert

 view release on metacpan or  search on metacpan

lib/Alvis/Document/Meta.pm  view on Meta::CPAN

########################################################################
#
# Parses a Meta specification for a document and maps fields to 
# Dublin Core. 
#
#   -- Kimmo Valtonen
#
########################################################################

use strict;

$Alvis::Document::Meta::VERSION = '0.1';

#########################################################################
#
#        Mappings 
#
#########################################################################

#
# Metadata mappings. Ripped off Anders's e-mail.
#
my %MetaMap=(
	     "rights" => "dc:rights",
	     "coverage" => "dc:coverage",
	     "creator" => "dc:creator",
	     "content" => "dc:description",
	     "geo.country" => "dc:coverage",
	     "email" => "dc:publisher",
	     "language " => "dc:language",
	     "identifier-url" => "dc:identifier",
	     "timemodified" => "dc:date",
	     "last-modified" => "dc:date",
	     "copyright " => "dc:copyright",
	     "classification " => "dc:subject",
	     "url" => "dc:identifier",
	     "timecreated " => "dc:date",
	     "category" => "dc:subject",
	     "description " => "dc:description",
	     "location" => "dc:coverage",
	     "originator" => "dc:creator",
	     "subject" => "dc:subject",
	     "author " => "dc:creator",
	     "publisher " => "dc:publisher",
	     "pd" => "dc:date",
	     "publisher-email" => "dc:publisher",
	     "abstract" => "dc:description",
	     "documenttype" => "dc:type",
	     "content-type"=>"dc:type",
	     "doc-rights" => "dc:rights",
	     "page-topic" => "dc:subject",
	     "keyword" => "dc:subject",
	     "document-rights" => "dc:rights",
	     "keywords " => "dc:subject",
	     "resource-type " => "dc:type",
	     "summary" => "dc:description",
	     "creation-date" => "dc:date",
	     "type " => "dc:type",
	     "document-classification" => "dc:subject",
	     "country" => "dc:coverage",
	     "progid" => "dc:format",
	     "content-language " => "dc:language",
	     "title " => "dc:title",
	     "created" => "dc:date",
	     "doc-type" => "dc:type",
	     "mimetype" => "dc:type",
	     "server"=>"server"
	     );

my %DCMap=(
	   "dc:coverage" => "dc:coverage",
	   "dc:date.x-metadatalastmodified" => "dc:date",
	   "dc:language" => "dc:language",
	   "dc:title" => "dc:title",
	   "dc:date.created" => "dc:date",
	   "dc:format" => "dc:format",
	   "dc:description" => "dc:description",
	   "dc:source" => "dc:source",
	   "dc:date.modified" => "dc:date",
	   "dc:creator" => "dc:creator",
	   "dc:coverage.placename" => "dc:coverage",
	   "dc:rights" => "dc:rights",
	   "dc:subject" => "dc:subject",
	   "dc:contributor" => "dc:contributor",
	   "dc:type" => "dc:type",
	   "dc:identifier" => "dc:identifier",
	   "dc:publisher" => "dc:publisher",
	   "dc:date" => "dc:date"
	   );

#########################################################################

my ($ERR_OK,
    $ERR_UNK_FIELD_NAME,
    $ERR_PARSE
    )=(0..2);

my %ErrMsgs=($ERR_OK=>"",
	     $ERR_UNK_FIELD_NAME=>"Unrecognized field name.",
	     $ERR_PARSE=>"Parsing the meta text failed."
	     );

sub new
{
    my $proto=shift;
 
    my $class=ref($proto)||$proto;
    my $parent=ref($proto)&&$proto;
    my $self={};
    bless($self,$class);

    $self->_set_err_state($ERR_OK);

    $self->_init(@_);

    if (defined($self->{text}))
    {
	if (!$self->parse($self->{text}))
	{
	    $self->_set_err_state($ERR_PARSE,
				  "Text:\"$self->{text}\".");



( run in 2.079 seconds using v1.01-cache-2.11-cpan-ceb78f64989 )