From sequences to a global open biodiversity record
2026-10-27
If we have enough time
Ocean Biodiversity Information System
Free to use. Free to contribute.
OBIS is the world’s largest open-access repository
for marine biodiversity data.
36 nodes
across 99 countries
representing 1,000+ institutions
and 6,000+ scientists.
Enormous potential…
…but NCBI alone is not enough
Two major eDNA data standards exist
1. MIxS
Minimum Information about any (x) Sequence — for raw sequences
Used by
INSDC NCBI ENA DDBJ
2. Darwin Core (DwC)
Community vocabulary for biodiversity data — species, location, date, basis of record
Used by
OBIS GBIF ALA
Developing landscape
scientificName, eventDate, decimalLatitude)Think of it as everyone agreeing to call the same column the same thing - so your data and someone else’s can sit in the same table!
Which one fits your data?
| # | Category | Example |
|---|---|---|
| 1 | DNA-derived occurrences | Metabarcoding (ASVs/OTUs assigned to taxa) |
| 2 | Enriched occurrences | Voucher specimen + barcoded |
| 3 | Targeted species detection | qPCR / ddPCR assays |
| 4 | Name references | Sequence in GenBank only |
| 5 | Metadata only | Dataset without sequences |
🔎 Use the GBIF decision tree to confirm your category
From field collection to taxonomy — what to capture at each step
⛵ Field Sampling
🧪 Biomarker / PCR
🧬 DNA Extraction
💻 Sequences & Taxonomy
Category 1 — DNA-derived occurrences · basisOfRecord = MaterialSample
Targeted species detection — additional fields vs metabarcoding
⛵ Field Sampling
🧪 PCR Protocol
🧬 DNA Extraction
🎯 Target & Quantity
Category 3 — Targeted species detection · basisOfRecord = MaterialSample
Your data needs to be in the right format + using the right vocabulary
Publishing DNA-derived data through biodiversity data platforms
DNA data is more complex than a lat/lon + species name
Your typical metabarcoding outputs:
| File | Content |
|---|---|
| OTU/ASV table | Sequences × Samples (read counts) |
| Taxonomy table | Sequence [ID] → taxon assignment |
| Sample metadata | Location, date, method |
| FASTA file | Actual DNA sequences |
The transformation:
One row = one unique sequence in one sample = one occurrence record
Option A — Occurrence Core
occurrence.csv
└── dna_derived.csv (linked via occurrenceID)
└── emof.csv (linked via occurrenceID)
Option B — Event Core (recommended for eDNA)
event.csv
└── occurrence.csv (linked via eventID)
└── dna_derived.csv (linked via occurrenceID)
└── emof.csv (linked via eventID or occurrenceID)
Why Event Core? Sample-level metadata (location, date, method) is recorded once per sampling event rather than repeated in every row.
Event core (mandatory fields)
eventID — unique, stable IDeventDate — YYYY-MM-DDdecimalLatitude, decimalLongitudeEvent table (strongly recommended fields)
minimumDepthInMeters, maximumDepthInMeterssampleSizeValue (volume of sample)sampleSizeUnit (units of volume sampled)samplingProtocol - (link to your field sampling SOP)→ the 📍where, 🕒when & 🧪how of collection
Occurrence (core) table (mandatory fields)
occurrenceID — unique, stable IDscientificName — taxon name to lowest possible taxon rankbasisOfRecord = “MaterialSample”occurrenceStatus = “present”If Occurrence core, also: eventDate, decimalLatitude, decimalLongitude
Occurrence table (strongly recommended fields)
scientificNameID (WoRMS AphiaID)organismQuantity (read count of sequence)organismQuantityType = “DNA sequence reads”sampleSizeValue (total read count in sample)sampleSizeUnit = “DNA sequence reads”samplingProtocol - (link to your SOP)associatedSequences (link to e.g. GenBank or ENA accession)→ what organism was detected 🐠🪸🪼
DNA Extension (example key fields)
DNA_sequence — ASV/OTU sequencetarget_gene — e.g. “COI”, “18S rRNA”pcr_primer_name_forward — and reverseseq_meth — e.g. “Illumina MiSeq”otu_class_appr — e.g. “DADA2 v1.18”otu_db — reference databasesop — link to your protocol→ 🧬the molecular context
All tables linked by eventID and occurrenceID
measurementType, measurementValue, measurementUniteventIDs decreases duplication| eventID | occurrenceID | measurementType | measurementValue | measurementUnit | |
|---|---|---|---|---|---|
| YEARsite1samp1 | temperature | 25 | C |
| measurementTypeID | measurementUnitID | |
|---|---|---|
| http://vocab.nerc.ac.uk/collection/P01/current/TEMPPR01/ | http://vocab.nerc.ac.uk/collection/P06/current/UPAA/ |
| Resource | Link |
|---|---|
| DNA Extension term definitions | rs.gbif.org/extension/gbif/1.0/dna_derived_data_2024-07-11.xml |
| DwC Term Quick Reference Guide | dwc.tdwg.org/terms/ |
| OBIS Manual (DNA chapter) | manual.obis.org/dna_data.html |
| GBIF DNA publishing guide | doi.org/10.35035/DOC-VF1A-NR22 |
Before publishing — check for:
occurrenceID and eventIDeventID, occurrenceID)Tools:
| Tool | What it checks |
|---|---|
obistools (R package) |
Taxonomy, geography, required fields |
| GBIF data validator | Darwin Core Archive structure |
| WoRMS Taxon Match Tool | Scientific names → AphiaIDs |
Integrated Publishing Toolkits (IPT) are hosted by OBIS nodes — you do not need to run your own server. OBIS has nodes covering most world regions. Find yours at obis.org/nodes.
scientificName field with Biota incertae sedisscientificName = Teleostei, scientificNameID = urn:lsid:marinespecies.org:taxname:293496scientificName, the ID of the taxon in another database in taxonConceptID and leave scientificNameID emptyCommon cases:
Options → you don’t have to choose between “share everything” or “share nothing”:
footprintWKT) instead of an exact pointNote: Generalizations should be documented alongside your data! See OBIS Manual & GBIF Guide for more details
obistools (R package)
Validation, QC, WoRMS matching, archive structure checks
OBIS R tutorial
Transform raw DNA data into a Darwin Core-compliant dataset
time: ~90 min
🎯 By the end of this tutorial, you will be able to:
obistools package to match taxon names against WoRMS, and check coordinates, dates, and required fields.Geographic outlier detection - OBIS eDNA taxonomy QC tool
Geographic outlier detection - OBIS eDNA taxonomy QC tool
Which information is entered where? A short exercise
Category 1 — DNA-derived occurrences — basisOfRecord = MaterialSample
From field collection to taxonomy — what to capture at each step
Step 1:⛵ Field Sampling
| Field Sampling | Maps to |
|---|---|
| Coordinates, location names | Event table: ..., ..., ... |
| Date, time | Event table: ..., ... |
| Environmental measurements (temperature, salinity, depth…) | eMoF table: ..., ..., ... |
| Sampling method / gear | Event table: ... and/or eMoF table |
| Sample volume, filter size | DNA table: ... , ... |
Category 1 — DNA-derived occurrences — basisOfRecord = MaterialSample
From field collection to taxonomy — what to capture at each step
Step 1:⛵ Field Sampling
| Field Sampling | Maps to |
|---|---|
| Coordinates, location names | Event table: decimalLatitude, decimalLongitude, locality |
| Date, time | Event table: eventDate, eventTime |
| Environmental measurements (temperature, salinity, depth…) | eMoF table: measurementType, measurementValue, measurementUnit |
| Sampling method / gear | Event table: samplingProtocol and/or eMoF table |
| Sample volume, filter size | DNA table: samp_size , size_frac |
Category 1 — DNA-derived occurrences — basisOfRecord = MaterialSample
From field collection to taxonomy — what to capture at each step
Step 2: 🧬 DNA Extraction
| DNA Extraction | Maps to |
|---|---|
| Volume of sample processed | DNA table: samp_vol_we_dna_ext |
| Extraction method / kit | DNA table: nucl_acid_ext, nucl_acid_amp |
| Concentration | DNA table: concentration, concentrationUnit |
| Purity ratio (A260/280) | DNA table: ratioOfAbsorbance260_280 |
Category 1 — DNA-derived occurrences — basisOfRecord = MaterialSample
From field collection to taxonomy — what to capture at each step
Step 3: 🧪 DNA Amplification
| DNA Amplification | Maps to (DNA table) |
|---|---|
| Target gene (e.g. COI, 18S rRNA) | DNA table: target_gene |
| Primer sequence + primer reference | DNA table: pcr_primer_forward, pcr_primer_name_forward, pcr_primer_reverse, pcr_primer_name_reverse + pcr_primer_reference |
| PCR conditions | DNA table: pcr_cond |
| Length of amplified product | DNA table: ampliconSize |
Category 1 — DNA-derived occurrences — basisOfRecord = MaterialSample
From field collection to taxonomy — what to capture at each step
Step 4: 💻 Sequences
| Sequences | Maps to |
|---|---|
| Sequencing platform + library layout | DNA table: seq_meth + lib_layout |
| Sequences per sample | DNA table: DNA_sequence (linked by occurrenceID) |
| Public repository where sequences deposited (NCBI, ENA) | Occurrence table: associatedSequences |
Category 1 — DNA-derived occurrences — basisOfRecord = MaterialSample
From field collection to taxonomy — what to capture at each step
Step 5: 🐠 Taxonomy
| Taxonomy | Maps to |
|---|---|
| Taxonomy assignment + annotation confidence | Occurrence table: scientificName, taxonID DNA table: annot |
| Reference database + pipeline used | Occurrence table: identificationRemarks, identificationReferences DNA table: otu_db + sop |
| Number of sequence reads per taxon & total | Occurence table: organismQuantity, organismQuantityType, & sampleSizeValue, sampleSizeUnit |
Category 3 — Targeted species detection — basisOfRecord = MaterialSample
Targeted species detection — additional fields vs metabarcoding
⛵ Step 1: Field Sampling → same as metabarcoding
🧬 Step 2: DNA Extraction → same as metabarcoding
🧪 Step 3: DNA Amplification → PCR conditions → pcr_cond
🎯 Step 4/5: Target & Quantity
| Target & Quantity | Maps to |
|---|---|
| Target gene region | target_gene, target_subfragment |
| Primers | pcr_primers |
| Copy number + concentration | estimatedNumberOfCopies + concentration, concentrationUnit |
| LOD, Cq, baseline | pcr_primer_lod, quantificationCycle, baselineValue |
🏠 Return to Home · © 2026 License: CC BY-NC 4.0