Do not copy Routine for taxonomic validation, modified from Ricardo Ortiz & Camila Plata: "Script Taxonomic Validation using GBIF's API" from SiB Colombia scripts for Biodiversity data validation and cleaning in OPEN REFINE https://github.com/SIB-Colombia/data-quality-open-refine Originally published by Zermoglio, PF, Plata Corredor, CA, Wieczorek, JR, Ortiz Gallego, R & Buitrago, L (2021). Guía para la limpieza de datos sobre biodiversidad con OpenRefine. Versión 3. Copenhagen: GBIF Secretariat. DOI: https://doi.org/10.15468/doc-gzjg-af18 Copy from here [ { "op": "core/text-transform", "description": "Text transform on cells in column scientificName using expression grel:value.trim().replace(/\\u00A0/,' ').replace(/\\s+/,' ')", "engineConfig": { "facets": [], "mode": "row-based" }, "columnName": "scientificName", "expression": "grel:value.trim().replace(/\\u00A0/,' ').replace(/\\s+/,' ')", "onError": "keep-original", "repeat": false, "repeatCount": 10 }, { "op": "core/column-addition", "description": "Create column NomAPI at index 6 based on column scientificName using expression grel:value.replace(\" \",\"%20\")", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "NomAPI", "columnInsertIndex": 6, "baseColumnName": "scientificName", "expression": "grel:value.replace(\" \",\"%20\")", "onError": "set-to-blank" }, { "op": "core/column-addition-by-fetching-urls", "description": "Create column callAPI at index 6 by fetching URLs based on column NomAPI using expression grel:\"http://api.gbif.org/v1/species/match?strict=true&name=\"+value+\"&kingdom=\"+cells['kingdom'].value", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "callAPI", "columnInsertIndex": 6, "baseColumnName": "NomAPI", "urlExpression": "grel:\"http://api.gbif.org/v1/species/match?strict=true&name=\"+value+\"&kingdom=\"+cells['kingdom'].value", "onError": "set-to-blank", "delay": 5, "cacheResponses": true }, { "op": "core/column-move", "description": "Move column infraspecificEpithet to position 6", "columnName": "infraspecificEpithet", "index": 6 }, { "op": "core/column-addition", "description": "Create column specificEpithetSuggested at index 6 based on column callAPI using expression grel:split(value.parseJson().get(\"canonicalName\"),' ')[1]", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "specificEpithetSuggested", "columnInsertIndex": 6, "baseColumnName": "callAPI", "expression": "grel:split(value.parseJson().get(\"canonicalName\"),' ')[1]", "onError": "set-to-blank" }, { "op": "core/column-move", "description": "Move column specificEpithet to position 6", "columnName": "specificEpithet", "index": 6 }, { "op": "core/column-addition", "description": "Create column suggestedGenus at index 6 based on column callAPI using expression grel:if(value.parseJson().get(\"status\")=='SYNONYM',(split(value.parseJson().get(\"canonicalName\"),' ')[0]),value.parseJson().get(\"genus\"))", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "genusSuggested", "columnInsertIndex": 6, "baseColumnName": "callAPI", "expression": "grel:if(value.parseJson().get(\"status\")=='SYNONYM',(split(value.parseJson().get(\"canonicalName\"),' ')[0]),value.parseJson().get(\"genus\"))", "onError": "set-to-blank" }, { "op": "core/column-move", "description": "Move column family to position 6", "columnName": "genus", "index": 6 }, { "op": "core/column-addition", "description": "Create column suggestedFamily at index 6 based on column callAPI using expression grel:value.parseJson().get(\"family\")", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "familySuggested", "columnInsertIndex": 6, "baseColumnName": "callAPI", "expression": "grel:value.parseJson().get(\"family\")", "onError": "set-to-blank" }, { "op": "core/column-move", "description": "Move column family to position 6", "columnName": "family", "index": 6 }, { "op": "core/column-addition", "description": "Create column suggestedOrder at index 6 based on column callAPI using expression grel:value.parseJson().get(\"order\")", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "orderSuggested", "columnInsertIndex": 6, "baseColumnName": "callAPI", "expression": "grel:value.parseJson().get(\"order\")", "onError": "set-to-blank" }, { "op": "core/column-move", "description": "Move column order to position 6", "columnName": "order", "index": 6 }, { "op": "core/column-addition", "description": "Create column suggestedClass at index 6 based on column callAPI using expression grel:value.parseJson().get(\"class\")", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "classSuggested", "columnInsertIndex": 6, "baseColumnName": "callAPI", "expression": "grel:value.parseJson().get(\"class\")", "onError": "set-to-blank" }, { "op": "core/column-move", "description": "Move column class to position 6", "columnName": "class", "index": 6 }, { "op": "core/column-addition", "description": "Create column suggestedPhylum at index 6 based on column callAPI using expression grel:value.parseJson().get(\"phylum\")", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "phylumSuggested", "columnInsertIndex": 6, "baseColumnName": "callAPI", "expression": "grel:value.parseJson().get(\"phylum\")", "onError": "set-to-blank" }, { "op": "core/column-move", "description": "Move column phylum to position 6", "columnName": "phylum", "index": 6 }, { "op": "core/column-addition", "description": "Create column suggstedKingdom at index 6 based on column callAPI using expression grel:value.parseJson().get(\"kingdom\")", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "kingdomSuggested", "columnInsertIndex": 6, "baseColumnName": "callAPI", "expression": "grel:value.parseJson().get(\"kingdom\")", "onError": "set-to-blank" }, { "op": "core/column-addition", "description": "Create column kingdomValidation at index 6 based on column suggstedKingdom using expression grel:if(value==cells[\"kingdom\"].value,'1','0').toString()", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "kingdomValidation", "columnInsertIndex": 6, "baseColumnName": "kingdomSuggested", "expression": "grel:if(value==cells[\"kingdom\"].value,'1','0').toString()", "onError": "set-to-blank" }, { "op": "core/column-move", "description": "Move column kingdom to position 6", "columnName": "kingdom", "index": 6 }, { "op": "core/column-addition", "description": "Create column suggestedTaxonomicStatus at index 6 based on column callAPI using expression grel:value.parseJson().get(\"status\")", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "taxonomicStatusSuggested", "columnInsertIndex": 6, "baseColumnName": "callAPI", "expression": "grel:value.parseJson().get(\"status\")", "onError": "set-to-blank" }, { "op": "core/column-addition", "description": "Create column suggestedRank at index 6 based on column callAPI using expression grel:value.parseJson().get(\"rank\")", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "taxonRankSuggested", "columnInsertIndex": 6, "baseColumnName": "callAPI", "expression": "grel:value.parseJson().get(\"rank\")", "onError": "set-to-blank" }, { "op": "core/column-addition", "description": "Create column canonicalNameSuggested at index 6 based on column callAPI using expression grel:value.parseJson().get(\"canonicalName\")", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "canonicalNameSuggested", "columnInsertIndex": 6, "baseColumnName": "callAPI", "expression": "grel:value.parseJson().get(\"canonicalName\")", "onError": "set-to-blank" }, { "op": "core/column-addition", "description": "Create column acceptedScientificName(species) at index 6 based on column callAPI using expression grel:value.parseJson().get(\"species\")", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "acceptedScientificName", "columnInsertIndex": 6, "baseColumnName": "callAPI", "expression": "grel:value.parseJson().get(\"species\")", "onError": "set-to-blank" }, { "op": "core/column-addition", "description": "Create column suggestedScientificName at index 6 based on column callAPI using expression grel:value.parseJson().get(\"scientificName\")", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "scientificNameSuggested", "columnInsertIndex": 6, "baseColumnName": "callAPI", "expression": "grel:value.parseJson().get(\"scientificName\")", "onError": "set-to-blank" }, { "op": "core/column-addition", "description": "Create column suggestedscientificNameAuthorship at index 6 based on column suggestedScientificName using expression grel:value.partition(cells[\"canonicalNameSuggested\"].value)[2]", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "scientificNameAuthorshipSuggested", "columnInsertIndex": 9, "baseColumnName": "scientificNameSuggested", "expression": "grel:value.partition(cells[\"canonicalNameSuggested\"].value)[2].trim()", "onError": "set-to-blank" }, { "op": "core/column-addition", "description": "Create column authorshipValidation at index 6 based on column suggstedAuthorship using expression grel:if(value==cells[\"scientificNameAuthorship\"].value,'1','0').toString()", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "scientificNameAuthorshipValidation", "columnInsertIndex": 9, "baseColumnName": "scientificNameAuthorship", "expression": "grel:if(value==cells['scientificNameAuthorshipSuggested'].value,1,0).toString()", "onError": "set-to-blank" }, { "op": "core/column-move", "description": "Move column scientificNameAuthorship to position 9", "columnName": "scientificNameAuthorship", "index": 9 }, { "op": "core/column-move", "description": "Move column scientificName to position 6", "columnName": "scientificName", "index": 6 }, { "op": "core/column-addition", "description": "Create column taxonMatchType at index 6 based on column callAPI using expression grel:value.parseJson().get(\"matchType\")", "engineConfig": { "mode": "row-based", "facets": [] }, "newColumnName": "taxonMatchType", "columnInsertIndex": 6, "baseColumnName": "callAPI", "expression": "grel:value.parseJson().get(\"matchType\")", "onError": "set-to-blank" }, { "op": "core/column-removal", "description": "Remove column scientificNameSuggested", "columnName": "scientificNameSuggested" } { "op": "core/column-removal", "description": "Remove column callAPI", "columnName": "callAPI" } { "op": "core/column-removal", "description": "Remove column NomAPI", "columnName": "NomAPI" } ]