1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
package HTTP::OAI::Metadata::OAI_Eprints;
use strict;
use warnings;
use Carp;
use XML::LibXML;
use HTTP::OAI::Metadata;
use vars qw( @ISA );
@ISA = qw( HTTP::OAI::Metadata );
sub new {
my $self = shift->SUPER::new(@_);
my %args = @_;
my $dom = XML::LibXML->createDocument();
$dom->setDocumentElement(my $root = $dom->createElementNS('http://www.openarchives.org/OAI/1.1/eprints','eprints'));
# $root->setAttribute('xmlns','http://www.openarchives.org/OAI/2.0/oai-identifier');
$root->setAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
$root->setAttribute('xsi:schemaLocation','http://www.openarchives.org/OAI/1.1/eprints http://www.openarchives.org/OAI/1.1/eprints.xsd');
for(qw( content metadataPolicy dataPolicy submissionPolicy )) {
Carp::croak "Required argument $_ undefined" if !defined($args{$_}) && $_ =~ /metadataPolicy|dataPolicy/;
next unless defined($args{$_});
my $node = $root->appendChild($dom->createElement($_));
$args{$_}->{'URL'} ||= [];
$args{$_}->{'text'} ||= [];
foreach my $value (@{$args{$_}->{'URL'}}) {
$node->appendChild($dom->createElement('URL'))->appendChild($dom->createTextNode($value));
}
foreach my $value (@{$args{$_}->{'text'}}) {
$node->appendChild($dom->createElement('text'))->appendChild($dom->createTextNode($value));
}
}
$args{'comment'} ||= [];
for(@{$args{'comment'}}) {
$root->appendChild($dom->createElement('comment'))->appendChild($dom->createTextNode($_));
}
$self->dom($dom);
$self;
}
1;
|