<html><body>
<p><font size="2" face="sans-serif">For sets that have a more complicated condition (e.g. all eprints that are in the live archive and do have a PDF or Word document attached) we set a field with a Yes/No value and then provide just a filter on this field.</font><br>
<br>
<font size="2" face="sans-serif">Best regards,</font><br>
<font size="2" face="sans-serif">Martin</font><br>
<br>
<font size="2" face="sans-serif">--</font><br>
<font size="2" face="sans-serif">Dr. Martin Brändle</font><br>
<font size="2" face="sans-serif">Zentrale Informatik</font><br>
<font size="2" face="sans-serif">Universität Zürich</font><br>
<font size="2" face="sans-serif">Stampfenbachstr. 73</font><br>
<font size="2" face="sans-serif">CH-8006 Zürich</font><br>
<br>
<img width="16" height="16" src="cid:1__=4EBB0837DFD595188f9e8a93df9@lotus.uzh.ch" border="0" alt="Inactive hide details for John Salter ---06.06.2018 12:15:45---Hi Laurent, The code that was in my head is below - does that ma"><font size="2" color="#424282" face="sans-serif">John Salter ---06.06.2018 12:15:45---Hi Laurent, The code that was in my head is below - does that make more sense (I only wrote it in an</font><br>
<br>
<font size="1" color="#5F5F5F" face="sans-serif">Von:        </font><font size="1" face="sans-serif">John Salter &lt;J.Salter@leeds.ac.uk&gt;</font><br>
<font size="1" color="#5F5F5F" face="sans-serif">An:        </font><font size="1" face="sans-serif">Laurent Cloarec &lt;Laurent.Cloarec@ut-capitole.fr&gt;</font><br>
<font size="1" color="#5F5F5F" face="sans-serif">Kopie:        </font><font size="1" face="sans-serif">&quot;eprints-tech@ecs.soton.ac.uk&quot; &lt;eprints-tech@ecs.soton.ac.uk&gt;</font><br>
<font size="1" color="#5F5F5F" face="sans-serif">Datum:        </font><font size="1" face="sans-serif">06.06.2018 12:15</font><br>
<font size="1" color="#5F5F5F" face="sans-serif">Betreff:        </font><font size="1" face="sans-serif">Re: [EP-tech] OAI : need some explanations about custom sets and filters</font><br>
<font size="1" color="#5F5F5F" face="sans-serif">Gesendet von:        </font><font size="1" face="sans-serif">eprints-tech-bounces@ecs.soton.ac.uk</font><br>
<hr width="100%" size="2" align="left" noshade style="color:#8091A5; "><br>
<br>
<br>
<tt><font size="2">Hi Laurent,<br>
The code that was in my head is below - does that make more sense (I only wrote it in an email - it might not be 100% right!)?<br>
<br>
BUT:<br>
*** I DON'T THINK THIS IS A GOOD IDEA ***<br>
Setting the 'satisfy_all' on the search to 0 (an 'OR' join) would mean that the restriction on the eprint_status field would be an OR - and therefore records that matched another filter, but were in the inbox or review area would also be returned - and this is *NOT* what you need!<br>
<br>
You could get round this by performing two searches - one on the archive dataset, and the other on the deletion dataset - and then combining both before outputting data.<br>
<br>
Cheers,<br>
John<br>
<br>
############ Config #############<br>
$oai-&gt;{custom_sets} = [<br>
 &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp;spec =&gt; &quot;test_set&quot;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp;name =&gt; &quot;test_set&quot;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp;filters =&gt; [<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ meta_fields =&gt; [ &quot;full_text_status&quot; ], value =&gt; &quot;public&quot;, },<br>
 &nbsp; &nbsp; &nbsp; &nbsp;],<br>
 &nbsp; &nbsp; &nbsp; &nbsp;satisfy_all =&gt; 0, #new option<br>
 &nbsp; &nbsp; &nbsp; &nbsp;},<br>
];<br>
<br>
############ cgi/oai2 (see lines flagged with '## addition ##') #############<br>
 &nbsp; &nbsp; &nbsp; &nbsp;push @$filters, {<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;meta_fields =&gt; [qw( eprint_status )],<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;value =&gt; &quot;archive deletion&quot;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;match =&gt; &quot;EQ&quot;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;merge =&gt; &quot;ANY&quot;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp;};<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;# custom sets<br>
 &nbsp; &nbsp; &nbsp; &nbsp;my $satisfy_all = 1; ## addition ##<br>
 &nbsp; &nbsp; &nbsp; &nbsp;if( defined $args-&gt;{set} )<br>
 &nbsp; &nbsp; &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;my $custom_sets = $repo-&gt;config( &quot;oai&quot;, &quot;custom_sets&quot; );<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;my( $info ) = grep { $_-&gt;{spec} eq $args-&gt;{set} } @{$custom_sets||[]};<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if( defined $info )<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;my $_filters = $info-&gt;{filters};<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$_filters = [$info] if !defined $_filters;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;push @$filters, @$_filters;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete $args-&gt;{set};<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$satisfy_all = $info-&gt;{satisfy_all} if defined $info-&gt;{satisfy_all}; &nbsp;## addition ##<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
 &nbsp; &nbsp; &nbsp; &nbsp;}<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;my $searchexp = $ds-&gt;prepare_search(<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;allow_blank =&gt; 1,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;filters =&gt; [<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@{$filters},<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;],<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;custom_order =&gt; &quot;eprintid&quot;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;limit =&gt; ($PAGESIZE+1),<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;satisfy_all =&gt; $satisfy_all, ## addition ##<br>
 &nbsp; &nbsp; &nbsp; &nbsp;);<br>
<br>
<br>
<br>
-----Original Message-----<br>
From: Laurent Cloarec [</font></tt><tt><font size="2"><a href="mailto:Laurent.Cloarec@ut-capitole.fr">mailto:Laurent.Cloarec@ut-capitole.fr</a></font></tt><tt><font size="2">] <br>
Sent: 06 June 2018 10:02<br>
To: John Salter &lt;J.Salter@leeds.ac.uk&gt;<br>
Cc: eprints-tech@ecs.soton.ac.uk<br>
Subject: [EP-tech] OAI : need some explanations about custom sets and filters<br>
<br>
</font></tt><tt><font size="2"><a href="http://mailman.ecs.soton.ac.uk/pipermail/eprints-tech/2018-May/007320.html">http://mailman.ecs.soton.ac.uk/pipermail/eprints-tech/2018-May/007320.html</a></font></tt><tt><font size="2"><br>
[EP-tech] OAI : need some explanations about custom sets and filters<br>
<br>
Hi<br>
<br>
If EPrints::DataSet::prepare_search calls EPrints::Search::new, I don't see <br>
exactly how one could &quot;define a key on the oai set config to switch satisfy_all <br>
between 1 and 0 as necessary&quot; in such an overloading version of oai2 script...<br>
<br>
Best regards<br>
Laurent Cloarec<br>
<br>
<br>
John Salter J.Salter at leeds.ac.uk<br>
Tue May 29 19:39:04 BST 2018<br>
&gt; <br>
&gt; Hi Laurent,<br>
&gt; <br>
&gt; If I remember correctly, it's an 'AND' in the vanilla oai2 interface.<br>
&gt; <br>
&gt; <br>
&gt; From: [EPRINTS_ROOT]/cgi/oai2<br>
&gt; <br>
&gt; <br>
&gt; my $searchexp = $ds-&gt;prepare_search(<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; allow_blank =&gt; 1,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; filters =&gt; [<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @{$filters},<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ],<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; custom_order =&gt; &quot;eprintid&quot;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; limit =&gt; ($PAGESIZE+1) );<br>
&gt; <br>
&gt; <br>
&gt; EPrints::DataSet::prepare_search calls EPrints::Search::new - the default setting for a search is 'satisfy_all' = 1.<br>
&gt; <br>
&gt; <br>
&gt; You could copy the cgi script above into:<br>
&gt; <br>
&gt; [EPRINTS_ROOT]/archives/[ARCHIVEID]/cgi/oai2<br>
&gt; <br>
&gt; and define a key on the oai set config to switch satisfy_all between 1 and 0 as necessary.<br>
&gt; <br>
&gt; <br>
&gt; I have not tried this. It's a possible solution for what you need - but entirely untested!<br>
&gt; <br>
&gt; If it doesn't work, or you have other questions, let me know!<br>
&gt; <br>
&gt; <br>
&gt; Cheers,<br>
&gt; <br>
&gt; John<br>
&gt; <br>
&gt; PS You may also be interested in </font></tt><tt><font size="2"><a href="http://bazaar.eprints.org/411/">http://bazaar.eprints.org/411/</a></font></tt><tt><font size="2">&nbsp;- which &nbsp;flags anything that has a datestamp, but that is not currently live as 'deleted' in the OAI-PMH interface (which is more compliant with that standard).<br>
&gt; <br>
&gt; The changes may have been merged into the core of EPrints - comparing the cgi/oai2 files should show if this is the case.<br>
&gt; <br>
&gt; ________________________________<br>
&gt; From: eprints-tech-bounces at ecs.soton.ac.uk &lt;eprints-tech-bounces at ecs.soton.ac.uk&gt; on behalf of Laurent Cloarec &lt;Laurent.Cloarec at ut-capitole.fr&gt;<br>
&gt; Sent: 29 May 2018 14:47:52<br>
&gt; To: eprints-tech at ecs.soton.ac.uk<br>
&gt; Subject: [EP-tech] OAI : need some explanations about custom sets and filters<br>
&gt;&gt; <br>
&gt;&gt; </font></tt><tt><font size="2"><a href="https://wiki.eprints.org/w/OAI">https://wiki.eprints.org/w/OAI</a></font></tt><tt><font size="2"><br>
&gt;&gt; <br>
&gt;&gt; Hi there<br>
&gt;&gt; <br>
&gt;&gt; As we do need to define an OAI custom set into our repository, I'd like to know<br>
&gt;&gt; if the different filters criteria work only with an implicit &quot;AND&quot; operator<br>
&gt;&gt; (unfortunately not &quot;OR&quot;), and if exists a negative operator (kind of &quot;!=&gt;&quot;)...<br>
&gt;&gt; <br>
&gt;&gt; Regards<br>
&gt;&gt; --<br>
&gt;&gt; Laurent Cloarec<br>
&gt;&gt; Service Commun de la Documentation - Service du Numérique Documentaire<br>
&gt;&gt; Université Toulouse 1 Capitole<br>
<br>
<br>
*** Options: </font></tt><tt><font size="2"><a href="http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech">http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech</a></font></tt><tt><font size="2"><br>
*** Archive: </font></tt><tt><font size="2"><a href="http://www.eprints.org/tech.php/">http://www.eprints.org/tech.php/</a></font></tt><tt><font size="2"><br>
*** EPrints community wiki: </font></tt><tt><font size="2"><a href="http://wiki.eprints.org/">http://wiki.eprints.org/</a></font></tt><tt><font size="2"><br>
*** EPrints developers Forum: </font></tt><tt><font size="2"><a href="http://forum.eprints.org/">http://forum.eprints.org/</a></font></tt><tt><font size="2"><br>
</font></tt><br>
<br>
</body></html>