Drupal studio · Diego Suarez, Madagaskar
Opgericht 2025 · 12°16′ Z

Species External Entity

Een Drupal-module die een soortnaam of Catalogue of Life-ID omzet in een live entiteit: taxonomie, foto's, beschermingsstatus en ecologische gegevens afkomstig van openbare biodiversiteits-API's en lokaal gespiegeld voor snelheid.

Wat het is

Species External Entity, machinenaam species_ext, zet een soortnaam of een Catalogue of Life taxon-ID om in een volledige Drupal-entiteit. De taxonomie, beschrijving, foto's, instandhoudingsstatus en ecologische relaties worden live verzameld uit openbare biodiversiteits-API's en vervolgens lokaal gespiegeld zodat pagina's snel blijven.

Het wordt geleverd als twee modules: species_ext, de data-engine, en de optionele species_ext_map, een presentatielaag die de opgeloste velden omzet in kaarten, grafieken en een fotogalerij. De data-engine draait in productie op Biodiversa, Museo Avellonia en het Quercus Project. Op het Quercus Project voeden zijn soortendata ook de Ecosystems-viewer van MADDev.

In één oogopslag

Modules
species_ext, de data-engine: bronplugins, resolvers, de lokale mirror en de veldtypen van de entiteit species_x; species_ext_map, een optionele presentatielaag voor kaarten, grafieken en een galerij
Drupal core
10 of 11
Vereist
entities_ext, dynamic_mirror_base, key en de Link-module van Drupal core; species_ext_map heeft bovendien de Leaflet contrib-module nodig
Entiteitstype
species_x, met als sleutel het taxon-ID van de Catalogue of Life
Weergave
Standaard, BigPipe of progressief laden, zodat kritieke velden meteen verschijnen en verrijkingsvelden binnenstromen zonder de pagina te blokkeren
Status
Live in productie op Biodiversa, Museo Avellonia en het Quercus Project

Wat bezoekers en curatoren zien

Op sites die de optionele submodule species_ext_map installeren, voegt een soortpagina een GBIF-dichtheidskaart van waarnemingen per jaar toe, getekend met Leaflet, een fenologiehistogram, een populatietrendgrafiek, een fotogalerij en een opzoek- en zoekwidget; deze toont alleen wat species_ext al heeft geresolveerd en doet zelf geen data-aanroepen. Het draait op Museo Avellonia en het Quercus Project. Op het Quercus Project bevatten soortpagina's ook SEO-markup en een mooie /species/{name}-URL in plaats van het interne pad van de entiteit.

Een curator kan een soort als uitgelicht markeren en via een kleine lokale entiteit die naast de geresolveerde data staat, eigen foto's toevoegen. Die toevoegingen worden nooit overschreven door de maandelijkse verversing vanuit upstream.

Wat het toevoegt aan een Drupal-site

Entiteitstype

species_x: een externe entiteit gekoppeld aan het Catalogue of Life taxon-ID, met velden, weergavemodi en Beheer weergave zoals elke andere Drupal-entiteit, ook al voert niemand de inhoud ervan handmatig in.

Bronplug-ins

Eén @SpeciesSource-plug-in per upstream, op gewicht doorlopen totdat er één resolveert: een lokale Catalogue of Life-checklist zonder netwerkoproep, de Catalogue of Life API, Wikipedia, GBIF, iNaturalist, de IUCN Red List, EOL en GloBI.

Routes

/admin/config/services/species-ext: elke bron in- of uitschakelen, de IUCN API-sleutel instellen en de weergavemodus kiezen. /species-ext/lookup: een POST-endpoint voor autocomplete en taxonopzoeking. Een disambiguatieroute verwerkt een naam die overeenkomt met meer dan één taxon.

Drush-commando's

species-ext:warm, om onmiddellijk één of meer soorten op te warmen; species-ext:warm-queue, om de opwarmwachtrij onmiddellijk te legen.

Veldvergrendeling

Een SpeciesDmbAdapter verbindt species_x-velden met dynamic_mirror_base, zodat een redacteur een geresolveerd veld kan vergrendelen of lokaal kan overschrijven, via dezelfde workflow als de andere externe-entiteitsmodules van MADDev.

Databronnen en licenties

  • Catalogue of Life: taxonomie, de geaccepteerde naam, auteurschap en synoniemen; een lokale checklisttabel beantwoordt ook veelvoorkomende opzoekingen zonder netwerkoproep
  • Wikipedia: een beschrijving in eenvoudige taal
  • GBIF: waarnemingsrecords, verspreiding, fenologiedata en een begrenzingskader voor de kaart; voor species_ext_map, een vooraf gerenderde tegellaag met waarnemingsdichtheid die geen GBIF-sleutel nodig heeft en geen ruwe waarnemingsdata naar de server downloadt
  • iNaturalist: een volksnaam, een taxonsamenvatting, foto's, waarnemingsaantallen en recente waarnemingen
  • IUCN Red List: beschermingsstatus, populatietrend, bedreigingen en habitat
  • EOL (Encyclopedia of Life): een beschrijving wanneer Wikipedia er geen heeft
  • GloBI (Global Biotic Interactions): het interactieweb, wat een soort eet, door welke soorten het wordt gegeten, en waarop het leeft

Een soort wordt één keer opgezocht, de eerste keer dat deze wordt uitgelicht, en materialiseert in een lokale spiegeltabel zodat pagina's snel blijven; een cronjob ververst deze maandelijks. Uitgaande aanroepen worden gebundeld en ontdubbeld via de gedeelde request_bus, en een bron die een time-out krijgt, maakt nooit een reeds opgeslagen waarde leeg. GBIF-, iNaturalist- en IUCN Red List-sleutels zijn optioneel en staan in de key-module in plaats van in code; zonder een IUCN-sleutel degradeert de module netjes in plaats van te falen.

Ontwerpbeslissingen

  • Bronresolutie op veldniveau. Elk veld wordt onafhankelijk bepaald aan de hand van de upstream die het levert, in plaats van dat één API gezaghebbend is voor het hele record.
  • Gewogen fallback-identiteit. Bronplugins worden op gewicht doorlopen en de eerste die een resultaat oplevert, wint. Catalogue of Life dekt net iets meer dan 80% van de bekende soorten, dus een soort die erin ontbreekt, krijgt alsnog een identiteit via de artikeltitel op Wikipedia, een iNaturalist-ID of een GBIF-taxonsleutel.
  • Eenmalig materialiseren, maandelijks verversen. Een soort wordt de eerste keer dat deze wordt uitgelicht opgeslagen in een lokale mirror, in plaats van dat de pagina bij elke weergave tot zeven live API-aanroepen afvuurt, en wordt daarna via cron actueel gehouden in plaats van op aanvraag.
  • Bewerkingen van curatoren worden nooit overschreven. Een uitgelicht-vlag en foto's van curatoren worden lokaal opgeslagen en overleven elke upstream-verversing.
  • Gebouwd om herbruikbaar te zijn. Niets in species_ext is specifiek voor één site; de eigen aangelegenheden van een site blijven in de eigen module van dat project.

Start een project.

Vertel ons over de soorten- of biodiversiteitsgegevens die uw Drupal-site moet tonen.