<div dir="ltr">Markus, <div><br></div><div>Thanks, that's it!  I just wasn't providing for the ability to do that in the R client. </div><div><br></div><div>Scott</div></div><br><div class="gmail_quote"><div dir="ltr">On Fri, Jan 13, 2017 at 3:12 PM Markus Döring <<a href="mailto:mdoering@gbif.org">mdoering@gbif.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div style="word-wrap:break-word" class="gmail_msg">
Hi Scott,
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">if I understand you correctly you should be able to request a download with a filter like this one that uses a primary AND nested with some ORs:</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">
<div class="gmail_msg">"predicate": {</div>
<div class="gmail_msg">        "type": "and",</div>
<div class="gmail_msg">        "predicates": [</div></div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg">
<div class="gmail_msg">            {</div>
<div class="gmail_msg">                "type": "or",</div>
<div class="gmail_msg">                "predicates": [</div>
<div class="gmail_msg">                    {</div>
<div class="gmail_msg">                        "type": "equals",</div>
<div class="gmail_msg">                        "key": "TAXON_KEY",</div>
<div class="gmail_msg">                        "value": "2475470"</div>
<div class="gmail_msg">                    },</div>
<div class="gmail_msg">                    {</div>
<div class="gmail_msg">                        "type": "equals",</div>
<div class="gmail_msg">                        "key": "TAXON_KEY",</div>
</div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg">                        "value": "2475471"</div></div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg">
<div class="gmail_msg">                    },</div>
<div class="gmail_msg">                    {</div>
<div class="gmail_msg">                        "type": "equals",</div>
<div class="gmail_msg">                        "key": "TAXON_KEY",</div>
</div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg">                        "value": "2475472"</div>
<div class="gmail_msg">                    }</div>
<div class="gmail_msg">                ]</div>
<div class="gmail_msg">            },</div></div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg">
<div class="gmail_msg">            {</div>
<div class="gmail_msg">                "type": "or",</div>
<div class="gmail_msg">                "predicates": [</div>
<div class="gmail_msg">                    {</div>
<div class="gmail_msg">                        "type": "equals",</div>
</div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg">                        "key": "BASIS_OF_RECORD",</div>
<div class="gmail_msg">                        "value": "PRESERVED_SPECIMEN"</div>
<div class="gmail_msg">                    },</div>
<div class="gmail_msg">                    {</div>
<div class="gmail_msg">                        "type": "equals",</div>
<div class="gmail_msg">                        "key": "FOSSIL_SPECIMEN",</div>
<div class="gmail_msg">                        "value": "2475471"</div>
<div class="gmail_msg">                    }</div>
<div class="gmail_msg">                ]</div>
<div class="gmail_msg">            },</div>
<div class="gmail_msg">            {</div>
<div class="gmail_msg">                "type": "equals",</div>
<div class="gmail_msg">                "key": "HAS_COORDINATE",</div>
<div class="gmail_msg">                "value": "true"</div>
<div class="gmail_msg">            },</div>
<div class="gmail_msg">            {</div>
<div class="gmail_msg">                "type": "equals",</div>
<div class="gmail_msg">                "key": "HAS_GEOSPATIAL_ISSUE",</div>
<div class="gmail_msg">                "value": "false"</div>
<div class="gmail_msg">            },</div>
<div class="gmail_msg">            {</div>
<div class="gmail_msg">                "type": "greaterThanOrEquals",</div>
<div class="gmail_msg">                "key": "YEAR",</div>
<div class="gmail_msg">                "value": "1949"</div>
<div class="gmail_msg">            },</div>
<div class="gmail_msg">            {</div>
<div class="gmail_msg">                "type": "lessThanOrEquals",</div>
<div class="gmail_msg">                "key": "YEAR",</div>
<div class="gmail_msg">                "value": "2011"</div>
<div class="gmail_msg">            },</div>
<div class="gmail_msg">            {</div>
<div class="gmail_msg">                "type": "greaterThanOrEquals",</div>
<div class="gmail_msg">                "key": "MONTH",</div>
<div class="gmail_msg">                "value": "3"</div>
<div class="gmail_msg">            },</div>
<div class="gmail_msg">            {</div>
<div class="gmail_msg">                "type": "lessThanOrEquals",</div>
<div class="gmail_msg">                "key": "MONTH",</div>
<div class="gmail_msg">                "value": "8"</div>
<div class="gmail_msg">            }</div>
<div class="gmail_msg">        ]</div>
<div class="gmail_msg">    }</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">Best,</div>
<div class="gmail_msg">Markus</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">
<blockquote type="cite" class="gmail_msg"></blockquote></div></div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg">
<div class="gmail_msg">On 13 Jan 2017, at 21:35, Scott Chamberlain <<a href="mailto:myrmecocystus@gmail.com" class="gmail_msg" target="_blank">myrmecocystus@gmail.com</a>> wrote:</div>
<br class="m_7509105005525895912Apple-interchange-newline gmail_msg">
</blockquote></div></div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg">
<div dir="ltr" class="gmail_msg">Hi! 
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">A rgbif user is asking me about a particular download query, see <a href="https://github.com/ropensci/rgbif/issues/245" class="gmail_msg" target="_blank">https://github.com/ropensci/rgbif/issues/245</a> </div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">TLDR: AFAICT this can't work as the API is set up right now. Or am I wrong?  </div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">That is, he wants to get data for records that match</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">- 10 taxa with their taxonKey value</div>
<div class="gmail_msg">- 3 different basisofrecord values</div>
<div class="gmail_msg">- country = US </div>
<div class="gmail_msg">- hasCoordinate = TRUE</div>
<div class="gmail_msg">- hasGeospatialIssue = FALSE</div>
<div class="gmail_msg">- year range between 1949 and 2011</div>
<div class="gmail_msg">- month range between 3 and 8</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">For the taxonKey values, I think he needs to combine those with <b class="gmail_msg">
OR</b> operator:</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">
<div class="gmail_msg">"predicate": {</div>
<div class="gmail_msg">        "type": "or",</div>
<div class="gmail_msg">        "predicates": [</div>
<div class="gmail_msg">            {</div>
<div class="gmail_msg">                "type": "equals",</div>
<div class="gmail_msg">                "key": "TAXON_KEY",</div>
<div class="gmail_msg">                "value": "2475470"</div>
<div class="gmail_msg">            },</div>
<div class="gmail_msg">            {</div>
<div class="gmail_msg">                "type": "equals",</div>
<div class="gmail_msg">                "key": "TAXON_KEY",</div>
<div class="gmail_msg">                "value": "2475470"</div>
<div class="gmail_msg">            }</div>
<div class="gmail_msg">        ]</div>
<div class="gmail_msg">    }</div>
</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">However, he should combine the other parameters (basisofrecord, hasCoordinate, year, month, etc) using
<b class="gmail_msg">AND</b> AFAICT. </div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg"><b class="gmail_msg">BUT</b>, AFAICT the API only allows one <b class="gmail_msg">predicate</b> key so you can't do what I think is needed here. That is, to say (taxonkey = 1 OR 2 OR 3) + (country = US AND hasCoordinate = true, etc.)</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">I tried sending two <b class="gmail_msg">predicate</b> keys in the API and only the second goes through. </div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">Any guidance much appreciated :)</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">The best solution I can think of is to do the query he's doing, but do one for each taxon. Seem like a good solution?</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">Best, Scott<br class="gmail_msg">
</div>
</div></div></blockquote></div></div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg">
_______________________________________________<br class="gmail_msg">
API-users mailing list<br class="gmail_msg">
<a href="mailto:API-users@lists.gbif.org" class="gmail_msg" target="_blank">API-users@lists.gbif.org</a><br class="gmail_msg">
<a href="http://lists.gbif.org/mailman/listinfo/api-users" class="gmail_msg" target="_blank">http://lists.gbif.org/mailman/listinfo/api-users</a><br class="gmail_msg">
</div>
</blockquote>
</div>
<br class="gmail_msg">
</div>
</div>

</blockquote></div>