EPrints Technical Mailing List Archive
See the EPrints wiki for instructions on how to join this mailing list and related information.
Message: #03228
< Previous (by date) | Next (by date) > | < Previous (in thread) | Next (in thread) > | Messages - Most Recent First | Threads - Most Recent First
[EP-tech] Re: OAI-PMH
- To: eprints-tech@ecs.soton.ac.uk
- Subject: [EP-tech] Re: OAI-PMH
- From: Florian Heß <hess@ub.uni-heidelberg.de>
- Date: Mon, 07 Jul 2014 16:18:08 +0200
Am 04.07.2014 15:34, schrieb Ian Stuart:
But have a good look at what the http://<your.server.address/cgi/oai2?verb=ListSets returns (and there's a reason for those bloody horrible SetNames)
Hi Ian,For special needs besides of what can be done with the advanced search, EPrints should support partially dynamic but human-readable set names as defined in the configuration. We have OAI clients that *expect* set names composed in a certain way, e.g. containing literal field values as in "ddc:300" or "doc-type:article".
We must use a hack here to include a list of kind-of-automatically pregenerated custom sets into the configuration. I would humbly prefer some better (e.g. out of the box) method to achieve that, admittedly:
# in cfg.d/oai.pl: use UBHD::EPrints::DINISets2010 qw(cfg_setspecs); $oai->{custom_sets} = [ cfg_setspecs(), # ... ]; # in a .pm file residing in an %INC directory: package UBHD::EPrints::DINISets2010; use base 'Exporter'; our @EXPORT_OK = qw( sets_for_eprint cfg_setspecs ); my %fields = ( 'ddc' => {spec => sub {{ filters => [{ meta_fields => [ "subjects" ], value => shift }] }}, eprint => sub { my $ep = shift; return map { "ddc:$_" } @{$ep->value("subjects")}; }
}, 'doc-type' => {spec => sub {{ filters => [{ meta_fields => [ "type" ], value => shift }] }}, eprint => sub { my $ep = shift; return "doc-type:".$ep->value("type") },
}, ); my %sets; while ( defined($_ = <DATA>) ) { chomp; ($_) = split /\s*#/; next if !$_;my ($setSpec, $type, $value, $name) = m{ \A (([\w-]+):(\S+)) \s (.+) \z }xms
or die "Odd format in line!"; my $spec = $sets{$setSpec} = $fields{$type}{spec}->($value); $spec->{spec} = $setSpec; $spec->{name} = $name; } close DATA; sub cfg_setspecs { values %sets } sub sets_for_eprint { my ($eprint) = @_; return map { $_->{eprint}->($eprint) } values %fields; } 1; __DATA__ ddc:000 Generalities, Science ddc:004 Data processing Computer science ddc:010 Bibliography ... doc-type:preprint Preprint doc-type:workingPaper WorkingPaper doc-type:article Article doc-type:PeriodicalPart PeriodicalPart doc-type:Periodical Periodical doc-type:book Book ... Florian -- UB Heidelberg (Altstadt) Plöck 107-109, 69117 HD Abt. Informationstechnik http://www.ub.uni-heidelberg.de/
- References:
- [EP-tech] OAI-PMH
- From: Andrew Beeken <anbeeken@lincoln.ac.uk>
- [EP-tech] Re: OAI-PMH
- From: Ian Stuart <Ian.Stuart@ed.ac.uk>
- [EP-tech] OAI-PMH
- Prev by Date: [EP-tech] Re: ePrints sales enquiry : Apology for using the wrong email address
- Next by Date: [EP-tech] Re: ePrints sales enquiry : Apology for using the wrong email address
- Previous by thread: [EP-tech] Re: OAI-PMH
- Next by thread: [EP-tech] ePrints sales enquiry : Apology for using the wrong email address
- Index(es):