Sheet nl_content
The nl_content sheet tells the app what each column in your data sheet represents. All columns from the data sheet that you want to display must appear either in Taxa definition (for taxa columns) or in Custom data definition (for your additional data). Columns not referenced here are silently ignored and can serve as helper or curator-notes columns.
Start with the taxonomy
Start with the Taxa definition table alone to confirm your taxonomy tree renders correctly, then add custom data, filters, and advanced features iteratively.
Table Taxa definition
on sheet nl_content
Declares the taxonomic hierarchy. The order of rows defines the tree structure: the first row is the highest rank, the last row is the leaf level. You have complete freedom in what units you choose - formal Linnaean ranks, informal categories, or folk taxa are all valid. At least one row is required.
Occurrence records
If you use occurrence records, the taxon level whose Taxon name is exactly Occurrence (case insensitive) must be the last row in this table, below all other ranks. See Occurrence and Collection Mode.
- Columns:
- Column name |
- Taxon name |
- Order by |
- Parent taxon indication |
- Italicize
Column Column name
member of table Taxa definition on sheet nl_content
The header of the data sheet column that holds taxon names for this rank. Must match a column header in the data sheet (case-insensitive). In the data sheet the column can be plain (genus) or split into genus.name and genus.authority columns to store the authority separately.
column nameAccepted content: e.g. Regnum, Kingdom, MajorGroup
How to use: Use the plain column name here. In the data sheet, follow the way taxon data are entered.
Four-rank hierarchy
If needed, you could have In your Taxa definition sheet:.authority for the class and family too, or ommit it in the genus.
| Column name | other columns… |
|---|---|
class | … |
family | … |
genus | … |
species | … |
In your data sheet:
| class | family | genus.name | genus.authority | species.name | species.authority | other columns… |
|---|---|---|---|---|---|---|
Magnoliopsida | Rosaceae | Rosa | L. | Rosa canina | L. | … |
Magnoliopsida | Magnoliaceae | Magnolia | Herb. | Magnolia liliifera | (L.) Baill. | … |
Liliopsida | Poaceae | Triticum | L. | Triticum aestivum | L. | … |
Column Taxon name
member of table Taxa definition on sheet nl_content
The human-readable rank label shown in the app UI (e.g. Family, Řád, Tribu). This is what users see as the rank heading.
How to use: For multilingual projects, add Taxon name:en, Taxon name:fr, etc. columns to provide translated rank labels per language. Occurrence is a keyword value and needs to be entered as-is, not translated.
WARNING
The special value Occurrence (case-insensitive) activates collection mode for that rank level. See Occurrence and Collection Mode.
Bilingual rank labels with an occurrence rank
Suppose in your Supported languages table you have entries for English ( In your Taxa definition table:en) and French (fr).
| Column name | Taxon name:en | Taxon name:fr | other columns… |
|---|---|---|---|
family | Family | Famille | … |
species | Species | Espèce | … |
catalogId | Occurrence | Occurrence | … |
In your data sheet:
| family | species.name | species.authority | catalogId | other columns… |
|---|---|---|---|---|
Rosaceae | Rosa canina | L. | NHM-2645 | … |
Rosaceae | Rubus idaeus | L. | NHM-67890 | … |
Poaceae | Triticum aestivum | L. | NHM-54321 | … |
Column Order by
member of table Taxa definition on sheet nl_content
alphabet (or leave empty) Controls how taxa at this level are sorted in the tree. alphabet (the default) sorts alphabetically. as is preserves the row order from the data sheet - useful for a non-alphabetical display sequence.
as is, alphabet, (empty)How to use: Leave empty for the vast majority of cases to get the default alphabetical sorting. Use as is only for the topmost rank, if it is ordered in your data sheet in a meaningful sequence that alphabetical sorting would destroy (e.g. Ferns → Bryophytes → Dicots).
Preserving custom order for the top rank
Suppose you have a simple three-rank hierarchy of major groups → families → species, and you want to preserve a specific order of the major groups that is not alphabetical. In your Taxa definition sheet:
| Column name | Taxon name | Order by | other columns… |
|---|---|---|---|
majorGroup | Group | as is | … |
family | Family | … | |
species | Species | … |
Data as they are entered in your data sheet:
| majorGroup | family | species | other columns… |
|---|---|---|---|
Ferns | Polypodiaceae | Polypodium vulgare | … |
Ferns | Polypodiaceae | Drynaria heracleum | … |
Ferns | Aspleniaceae | Asplenium trichomanes | … |
Bryophytes | Sphagnaceae | Sphagnum magellanicum | … |
Bryophytes | Pleuroziaceae | Pleurozia purpurea | … |
Dicots | Rosaceae | Rosa canina | … |
Dicots | Apiaceae | Anthriscus sylvestris | … |
... will get displayed in this order when compiled (note the top-level groups order preserved, but families and species are alphabetical):
┌── Ferns
│ ├── Aspleniaceae
│ │ └── Asplenium trichomanes
│ └── Polypodiaceae
│ ├── Drynaria heracleum
│ └── Polypodium vulgare
├── Bryophytes
│ ├── Pleuroziaceae
│ │ └── Pleurozia purpurea
│ └── Sphagnaceae
│ └── Sphagnum magellanicum
└── Dicots
├── Apiaceae
│ └── Anthriscus sylvestris
└── Rosaceae
└── Rosa canina Column Parent taxon indication
member of table Taxa definition on sheet nl_content
(empty)Controls what is shown in parentheses next to each taxon name in lists. Empty (default) shows the immediate parent taxon name. none hides the parent indication entirely - useful for species where the genus is already embedded in the full name. A column name from the taxa table (e.g. Family) shows that specific ancestor instead of the immediate parent.
How to use: Set to none for species if the genus is part of the full species name. Set to a higher rank column name (e.g. Family) when you want to skip an intermediate rank in the parenthetical.
For occurrence records
Keep the Parent taxon indication column empty for the occurrence rank level to show the taxon to which the occurrence is identified.
Species showing Family as parent (skipping Genus)
| Column name | Taxon name | Parent taxon indication | other columns… |
|---|---|---|---|
cls | Class | … | |
fam | Family | … | |
gen | Genus | Family | … |
spec | Species | Family | … |
catalogId | Occurrence | … |
In your data sheet:
| cls | fam | gen | spec | catalogId | other columns… |
|---|---|---|---|---|---|
Magnoliopsida | Rosaceae | NHM-1 | … | ||
Magnoliopsida | Rosaceae | Rosa | NHM-2 | … | |
Magnoliopsida | Rosaceae | Rosa | Rosa canina | NHM-3 | … |
Magnoliopsida | Rosaceae | Rosa | Rosa rubiginosa | NHM-4 | … |
Magnoliopsida | Rosaceae | Rubus | Rubus idaeus | NHM-5 | … |
Liliopsida | NHM-6 | … | |||
Liliopsida | Poaceae | Triticum | Triticum aestivum | NHM-7 | … |
... will get displayed like this (note that both Rosa canina and Rosa rubiginosa show Rosaceae as the parent, skipping the genus; all occurrences reference their identified-to taxon):
┌── Magnoliopsida
│ │ ╚══ NHM-1 (class: Magnoliopsida)
│ └── Rosaceae (class: Magnoliopsida)
│ ├── Rosa
│ │ │ ╚══ NHM-2 (genus: Rosa)
│ │ ├── Rosa canina (family: Rosaceae)
│ │ │ ╚══ NHM-3 (species: Rosa canina)
│ │ └── Rosa rubiginosa (family: Rosaceae)
│ │ ╚══ NHM-4 (species: Rosa rubiginosa)
│ └── Rubus
│ └── Rubus idaeus (family: Rosaceae)
│ ╚══ NHM-5 (species: Rubus idaeus)
└── Liliopsida
│ ╚══ NHM-6 (class: Liliopsida)
└── Poaceae (class: Liliopsida)
└── Triticum (family: Poaceae)
└── Triticum aestivum (family: Poaceae)
╚══ NHM-7 (species: Triticum aestivum) Column Italicize
member of table Taxa definition on sheet nl_content
no (or leave empty) Whether taxon names at this rank are rendered in italics. Conventionally used for genus and species.
yes, no, (empty)How to use: Set to yes for genus and species ranks. Leave empty or no for higher ranks.
Italicizing genus and species
| Column name | Taxon name | Italicize | other columns… |
|---|---|---|---|
Family | Family | … | |
Genus | Genus | yes | … |
Species | Species | yes | … |
Table Custom data definition
on sheet nl_content
Declares every non-taxon column you want to use for additional data. Rows corresponds to columns in data sheet and controls the column's display title, data type, template rendering, placement in the taxon card and more.
Data paths support dot notation for structured sub-fields (redListEvaluation.year) and # notation for arrays (habitat#). Include one row for the root path and one row for each sub-path you want to control them independently.
This is by far the most complex configuration table in the entire system. Once you are familiar with how it works, the other tables will be a breeze. Take your time to understand the concepts of data paths, data types, templates and other features as they are the key to unlocking the full potential of your project.
TIP
Read about the data path concept to understand how arrays (#) and structured sub-fields (.) let you represent complex data using plain spreadsheet columns.
- Columns:
- Column name |
- Title |
- Search category title |
- Data type |
- Template |
- Placement |
- Hidden |
- Belongs to
Column Column name
member of table Custom data definition on sheet nl_content
The data path of the column this row configures. Simple column names (redlist), dotted sub-fields (origPub.author), and array paths (habitat#) are all valid. For structured and array data, include one row for the root path (e.g. habitat) and one row for each item path (e.g. habitat#).
data pathHow to use: Every column from data sheet that you want to appear as data point in your project must have a row here. Columns from the data sheet used only as template inputs for other columns can be listed with hidden = yes to avoid displaying them.
Simple column, array column and a structured column with sub-fields
Here we have a simple column (redlist), several habitats with an array column (habitat#) with its root path (habitat and a title applied once for all its items), and a structured column (dimmensions) with two sub-fields (dimmensions.beakToTail with its title and dimmensions.wingspan with its title).
| Column name | Title | Data type | other columns… |
|---|---|---|---|
redlist | Red List | category | … |
habitat | Habitat | list bullets | … |
habitat# | text | … | |
dimmensions | list | … | |
dimmensions.beakToTail | Beak to tail length | number | … |
dimmensions.wingspan | Wingspan | number | … |
In your data sheet, the Note: in this example we write-out the habitat# column becomes multiple columns (e.g., habitat1, habitat2) containing individual habitats per taxon (you could also opt for a single habitat column with pipe-separated values), and the dimmensions.beakToTail and dimmensions.wingspan columns contain measurements that belong together under a common dimmensions root path. Note that there is no need to enter the intermediate data path items (no habitat column before habitat1 and habitat2, no dimmensions column before dimmensions.beakToTail and dimmensions.wingspan) as they do not carry any data. It is only your terminal ('leaf') data paths that matter as columns. The example leaves out most of the taxonomic structure for brevityredlist category verbatim for simplicity. For this and similar controlled vocabularies your data entry will be simpler, if you enter the RedList codes ('EN', 'VU') and set up the Category display for them.
| …other columns | species | redlist | habitat1 | habitat2 | dimmensions.beakToTail | dimmensions.wingspan | other columns… |
|---|---|---|---|---|---|---|---|
| … | Aquilla chrysaetos | Vulnerable | Forests | 150 | 120 | … | |
| … | Buteo buteo | Least Concern | Forest | Farmland | 60 | 110 | … |
| … | Falco peregrinus | Least Concern | Mountains | Urban | 55 | 100 | … |
Column Title
member of table Custom data definition on sheet nl_content
(empty)The label shown before the data value in the taxon card. | Tooltip text after the title to show a small info icon with a tooltip on hover - e.g. Total length | Average head-to-tail length in cm.
How to use: Provide a title typically for all top-level fields. Omit where no title is desired, commonly for sub-items within arrays or structured objects where the parent row's title serves as the heading.
Title with tooltip
| Column name | Title |
|---|---|
wingLength | Wing length | Average head-to-tail length measured in cm |
Structured and array sub-items without titles
Note that contrary to the example in Column name, the redList here is not a simple field, but a structured one with sub-properties. Just to show you that your data depend completely on your needs and nothing is pre-defined.
| Column name | Title |
|---|---|
redList | RedList category | The IUCN Red List category and latest evaluation year |
redList.code | |
redList.lastEvaluationYear | |
habitat | Usual habitats |
habitat# |
Column Search category title
member of table Custom data definition on sheet nl_content
(empty) Unique (non-empty) If non-empty, a filter dropdown appears in the search sidebar with this label allowing you to filter data on this column. The filter type (categorical checkboxes vs. numeric range) is determined automatically from the Data type value.
Add a pipe-separated prefix to group the filter with others under a common section heading - e.g. Ecology | Habitat and Ecology | Life form both appear under an Ecology section. Prepend ! for one or few important data filters you want to display above all other filters in a dedicated row. Ideal for your most important filters that you want users to see right away without scrolling through the full filter list.
How to use: Set for any column whose values users should be able to filter by. Omit for display-only or template-only columns. Use the Group | Label pattern to organise multiple logically related filters into named sections. Prepend ! to the filter label to pin it above all other filters in a dedicated row.
TIP
Most data types support filters, see Filters and Search Categories for the full eligibility table.
Grouped filter titles
| Column name | Search category title |
|---|---|
habitat | Ecology | Habitat |
lifeform | Ecology | Life form |
redlist | Red List |
country | ! Country checklist |
Column Data type
member of table Custom data definition on sheet nl_content
The data type for this column. Determines how the app reads and render the raw cell value (or its sub-columns) You have already seen this in the case of taxon data type when filling-in the Taxa definition table), where the taxon data type allowed you to use its [column].name and [column].authority properties to enter the taxonomic name and authority.
For array or object root entries (paths using # or . children), use the special list data type to indicate a compound value. Append an optional separator keyword after a space:
| Value | Result |
|---|---|
list or list bullets | Unordered bullet list (default) |
list numbered | Ordered list starting at 1 |
list unmarked | List with no bullets or numbers |
list space | Items on one line, separated by a space |
list comma | Items on one line, separated by , |
list [any string] | Items on one line, separated by that string |
See Data Types for the full type reference.
dataTypeDefAccepted content: list may be followed by a separator keyword (e.g. list comma, list bullets, list space) or any data type name.
How to use: Choose the appropriate data type whenever the column holds numbers, dates, images, maps, months, intervals, or other structured data - the right type enables the correct filter, renderer, and search indexing.
Numbers and units
Store bare numbers in your data cells and use the Template column to add units at display time (e.g. {{unit "m"}}). Entering 5 m in a cell instead of 5 turns the value into text and disables numeric filtering. Read more about the unit template.
Displaying related items on the same line
Use the list data type combined with space, comma or custom separator to display related items from structured or array fields on the same line instead of a vertical list. For example, habitat# with list comma will show multiple habitats in one line separated by commas instead of a bullet list.
Common data type values
The below is a non-normative list of suggestions for common data types and their effects. Explore the Data Types reference for the full list of types and their capabilities. As always, nothing is set in stone and the best choice depends on your specific data and how you want to use it - experiment with different types to find the best fit for your project.
| Column name | Data type | Effect |
|---|---|---|
redlist | category | Colored badge; categorical filter |
wingLength | number | Numeric value of exact measurement; numeric filter |
wingspan | interval | Numeric value of the typical range; numeric filter |
collectionDate | date | Parsed and formatted date; date filter |
distribution | mapregions | SVG distribution choropleth map + inline region list |
flowering | months | Compact month range display; categorical filter |
photo | image | Clickable thumbnail; filterable by title |
basionym | taxon | Clickable taxon link; filtrable by taxon name |
fieldIdentification | markdown | Rendered formatted text through Markdown; not filterable but searchable in full-text |
Structured items with `list` data type
Use the list data type for structured fields with multiple sub-items (e.g. dimmensions.beakToTail, dimmensions.wingspan) or array fields (e.g. habitat#) to group them under a common heading and get a compact display. The separator keyword controls how the items are displayed.
| Column name | Title | Data type | comment |
|---|---|---|---|
info | list space | No | |
info.redList | Red List | category | The category data type renders the red list category as a colored badge when set up in Category display. |
info.status | Status | category | This |
distribution | Distribution | list comma | Unlike the |
distribution# | text | The | |
confuseSpecies | Easy to confuse with | list bullets | An array field displayed as a bullet list under the common heading 'Easy to confuse with'. |
confuseSpecies# | taxon | The |
In your data sheet, you have multiple columns for the sub-items (e.g. dimmensions.beakToTail, dimmensions.wingspan), or multiple columns for array items (e.g. habitat1, habitat2) ...
| …other columns | species.name | species.authority | info.redList | info.status | distribution | confuseSpecies1.name | confuseSpecies1.authority | confuseSpecies2.name | confuseSpecies2.authority | other columns… |
|---|---|---|---|---|---|---|---|---|---|---|
| … | Sibon nebulatus | Linnaeus, 1758 | Least Concern | Native | Costa Rica | Panama | Colombia | Ecuador | Venezuela | Dipsas elegans | Boulenger, 1896 | Tropidodipsas fasciata | Günther, 1858 | … |
The above will render something similar to this in the taxon card:
Sibon nebulatus (Linnaeus, 1758) (family Colubridae)
--------------------------------------------------------------
RED LIST: [Least Concern] STATUS: [Native]
DISTRIBUTION: Costa Rica, Panama, Colombia, Ecuador, Venezuela
EASY TO CONFUSE WITH:
- Dipsas elegans (Boulenger, 1896)
- Tropidodipsas fasciata Günther, 1858 Column Template
member of table Custom data definition on sheet nl_content
(empty)A Handlebars expression applied to the raw data value before the type-specific renderer runs. Use {{value}} for the current field's value, {{taxon.name}} for the taxon name, {{taxon.authority}}, {{taxon.fullname}}, and {{data.columnname}} for any other field on the same row.
For image, sound, and map types, the template produces the source URL. For mapregions, it produces the SVG file path. For geopoint, it is the map link URL (use {{lat}} and {{long}}).
For more details see the Dynamic content with templates section.
How to use: Use when you need to modify the spreadsheet value for display: append a unit, display an image with its thumbnail, build a URL, or transform the raw value before display.
TIP
The {{unit "m"}} helper automatically scales numeric values to the most readable unit in the same category (e.g. 0.05 → 5 cm, 1500 → 1.5 km). See Templates → {{unit}}.
TIP
For image and map columns, use the {{img}} helper to declare a thumbnail and a full-size variant from a single slug in your data cell. The app precaches only thumbnails (fast, small) and fetches the full-size file on demand when a user opens it. Use of {{value}} pattern (e.g. scannedSpecimens/{{value}}.jpg) is discouraged as it disables the thumbnail option and forces the user to download full-size images. See Templates → {{img}}.
Common template patterns
| Purpose | Template value |
|---|---|
Auto-scale a measurement unit | {{unit "m"}} |
Image with thumbnail ( | img/{{img (thumb "_640")}}.jpg |
Image with thumbnail ( | img/{{img (thumb "_640") (full "_2400")}}.jpg |
Link to a GBIF species page (use with markdown data type) | [{{taxon.name}}](https://www.gbif.org/species/{{value}}) |
SVG map path from a static file, typical example for a simple location map | maps/laos.svg |
SVG map path - per-taxon selection from a data column, advanced use case for distribution maps with a limited number of predefined variants | maps/{{data.region}}.svg |
Geopoint link to OpenStreetMap | https://www.openstreetmap.org/?mlat={{lat}}&mlon={{long}}&zoom=8 |
Column Placement
member of table Custom data definition on sheet nl_content
top (or leave empty) Defines where the data field appears in the taxon card.
When details is used, the field won't show up in the taxon card, but will appear upon clicking that taxon in a details tab determined by its data type: image and sound → Media tab; map and mapregions → Map tab; text and markdown → Text tab.
See Placement Options for the layout diagram and guidance table.
tokenSetAccepted content: One or two pipe-separated keywords (spaces around | are ignored). When combining two keywords, one must be a position (top, bottom, left, middle, right) and the other must be details. details alone is also valid.
How to use: Use left, middle, or right for compact single-value fields (status badges, dates, short measurements). Use top or bottom for longer content (descriptions, distribution lists). Use details for rich content (large images, full maps, long notes) that users seek out by clicking the taxon.
For column groups - entries sharing the same parent in the Column name (e.g. origPub.author, origPub.year, … being grouped inside origPub), fill in the same Placement value on every row of the group. All rows in a group share one placement as they will appear together - the app will report an error if they differ.
TIP
Filling in Placement on every row of a column group makes the table self-documenting: you can see at a glance where each row will appear without having to trace back to a root row.
Sample placement choices
| Column name | Data type | Placement | comment | other columns… |
|---|---|---|---|---|
redlist | category | left | … | |
collectionDate | date | right | Instead of putting | … |
description | markdown | details | This text may be long, so let's give it the full horizontal space. | … |
distribution | mapregions | middle | details |
| … |
photo | image | details | This won't show up on the main card, but users can click the taxon name to see the image in the Media tab. | … |
Column group - repeat the same Placement on every row
When a column is split into child paths (e.g. origPub.author, origPub.year), fill in the same Placement on every row of the group. This makes each row self-contained and immediately readable.
| Column name | Data type | Placement | comment | other columns… |
|---|---|---|---|---|
origPub | list comma | bottom | Root row - declares the list container | … |
origPub.author | text | bottom | Same Placement as the root - the group appears at the bottom of the taxon card | … |
origPub.year | text | bottom | Same Placement as the root | … |
Column Hidden
member of table Custom data definition on sheet nl_content
no (or leave empty) Controls whether and when a data field is displayed.
- Empty or
no: field is always shown. yes: field is completely hidden from the taxon card (data is still loaded and available in templates via{{data.*}}).data: hidden from the taxon card but drives a filter button in the sidebar. Also makes the column available in the Trait Matrix analysis tool without a visible filter.- Conditional expression: show or hide the field based on the current state of a filter. The subject is the column name of any filter-enabled column.
| Expression | Effect |
|---|---|
if incountry notset | Hide if the incountry filter has no value selected |
unless incountry isset | Hide unless the incountry filter has at least one value |
unless incountry is "Czechia", "Vanuatu" | Hide unless incountry has Czechia or Vanuatu selected |
unless incountry notsetor "Czechia" | Hide unless incountry is unset or has Czechia selected |
How to use: Most of your rows will leave this empty. Use yes for columns needed as template inputs but not for display. Use data for filter-only or Trait Matrix columns that you don't want to show up on the taxon card (could be complex systems of traits you don't want to inflate your taxon card). Use a conditional expression for region- or scenario-specific fields that should only appear when a relevant filter is active. This could be used to create eg. a country filter for a regional checklist project, where you only want to show country-specific status or distribution fields when the user has selected that country in the filter - keeping the taxon card clean of irrelevant fields for users interested in other regions.
Conditional visibility per country filter
This will show the status_cz column only when the user has selected Czechia in the incountry filter, and the status_fr column only when France is selected. When no country is selected, or a different country is selected, both columns are hidden. This way we can have one column per country with specific status information without cluttering the taxon card with irrelevant fields for users interested in other countries.
| Column name | Title | Search category title | Hidden | other columns… |
|---|---|---|---|---|
country | Country | Country | data | … |
status_cz | Status in Czechia | unless country is "Czechia" | … | |
status_fr | Status in France | unless country is "France" | … |
Column Belongs to
member of table Custom data definition on sheet nl_content
If your dataset includes occurrences, this column controls whether a data column belongs to taxon or occurrence rows.
taxon: the column belongs to taxon rows.occurrence: the column belongs to occurrence rows only.
Every column must belong to one entity or the other - there is no shared option.
For column groups (origPub.author, origPub.year, …), fill in the same Belongs to value on every row of the group. The app will report an error if rows in the same group disagree. See Occurrence and collection mode for more information.
taxon, occurrenceAccepted content: For column groups, every row in the group must carry the same value.
How to use: Set to taxon for columns that contain taxon-level information. Set to occurrence for every column that carries occurrence-specific data (e.g. collector name, collection date, catalog number, locality).
For column groups, repeat the same value on every row - this makes each row self-contained and easy to audit at a glance.
TIP
In the filter sidebar, taxon filters are always visible, but when the user switches to Occurrence mode, occurrence filters become visible.
TIP
Filling in Belongs to on every row of a column group makes the table self-documenting: you can see at a glance which entity each row belongs to without having to trace back to a root row.
Mixed taxon and occurrence columns
| Column name | Title | Belongs to | other columns… |
|---|---|---|---|
redlist | Red List | taxon | … |
description | Description | taxon | … |
collector | Collector | occurrence | … |
In your data sheet, the Using this pattern you can define separate rows for taxa-related data and others for occurrence-related data.collector column would only have values in occurrence rows, while redlist and description would have values in taxon rows. Taxonomy is simplified for this example and the catalogNumber column is the occurrence level taxon from Taxa definition table.
| family | species | catalogNumber | redlist | description | collector | comment | other columns… |
|---|---|---|---|---|---|---|---|
Accipiteridae | Medium-large raptors with a robust body... | This is a taxon row (it has no catalogNumber), here we enter the family-level information that will show up on the family-level taxon card, no Red List information (this is a family), but a family-level description. | … | ||||
Accipiteridae | NHM-1 | John Doe | This is an occurrence row (it has a catalogNumber), this occurrence is identified only to the | … | |||
Accipiteridae | Accipiter gentilis | Least Concern | The northern goshawk is ... | This is a taxon row (it has no catalogNumber), here we enter the species-level information that will show up on the species-level taxon card. | … | ||
Accipiteridae | Accipiter gentilis | NHM-2 | Jane Smith | This is an occurrence row (it has a catalogNumber), this occurrence is identified to species level and carries the name of the collector. | … |
In the checklist view, this will render to something like this:
┌────────────────────────────────────────────────────────┐
│ Accipiteridae │
│ Description: Medium-large raptors with a robust body...│
├────────────────────────────────────────────────────────┤
│ │ NHM-1 (family: Accipiteridae) │
│ │ Collector: John Doe │
├────────────────────────────────────────────────────────┤
│ ┌────────────────────────────────────────────────────┐ │
│ │ Accipiter gentilis (family: Accipiteridae) │ │
│ │ Red List: Least Concern │ │
│ │ Description: The northern goshawk is ... │ │
│ ├────────────────────────────────────────────────────┤ │
│ │ │ NHM-2 (species: Accipiter gentilis) │ │
│ │ │ Collector: Jane Smith │ │
│ └────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────┘Column group - repeat the same Belongs to on every row
When a column is split into child paths, fill in the same Belongs to on every row of the group. This keeps the table readable without any hidden inheritance.
| Column name | Title | Belongs to | comment | other columns… |
|---|---|---|---|---|
origPub | Original publication | taxon | Root row | … |
origPub.author | Author | taxon | Same Belongs to as the root | … |
origPub.year | Year | taxon | Same Belongs to as the root | … |
collector | Collector | occurrence | Occurrence-level column | … |
Table Search online
on sheet nl_content
Defines external search engine links that appear in the Details pane for each taxon, allowing users to look up taxa in online databases, herbaria, encyclopaedias, and other resources. Each row is one link.
This table can be left completely empty if you do not want to provide external search links, but it is a great way to enhance the user to easily look up the taxa in relevant third party online resources.
Search links vs. shortcodes
A similar functionality is provided by Database shortcodes. These two features both link to external resources but serve distinct purposes. Search Online links are universal buttons in the Details pane that query an external site - GBIF, Google Images, a herbarium portal - by taxon name, configured once and applied to every taxon automatically. Database Shortcodes are inline links embedded in individual markdown fields using @code:ID syntax to point at a *specific known record* - for example @inat:193429759 for a particular iNaturalist observation. In short: use Search Online for universal, name-based discovery; use Database Shortcodes when curating specific, citable external records for individual data entries.
- Columns:
- Title |
- Icon |
- Search URL template |
- Restrict to taxon
Column Title
member of table Search online on sheet nl_content
The display label of the external search link shown in the Details pane. Appears as a button label next to the icon. For multilingual projects, use Title:en, Title:fr, etc.
How to use: Keep it short and recognisable. For multilingual projects use language-suffixed columns.
Bilingual search link titles
| Title:en | Title:fr | other columns… |
|---|---|---|
NYBG Virtual Herbarium | Herbier virtuel NYBG | … |
Google Images | Images Google | … |
Column Icon
member of table Search online on sheet nl_content
Filename (including extension) of the icon image located in usercontent/online_search_icons/. The icon should be square, at preferrably at least 200 × 200 px, with a white or transparent background. Accepted formats: .jpg, .png, .webp, .svg.
NaturaList comes with icons shipped for GBIF (gbif.png), iNaturalist (inat.png), and Google (google.png), but you can add your own icons for any other search engines or online databases you want to link to.
filename.jpg, .png, .webp, .svgAccepted content: File must exist in usercontent/online_search_icons/.
How to use: Prepare one icon per search engine and upload it to usercontent/online_search_icons/ before compiling.
Icon filenames
| Title | Icon | other columns… |
|---|---|---|
GBIF | gbif.png | … |
Google Images | google.png | … |
eBird | ebird.png | … |
Column Search URL template
member of table Search online on sheet nl_content
The URL users are taken to when clicking the link, with Handlebars placeholders for dynamic values. The most common variable is {{taxon.name}}; {{taxon.authority}}, {{data.columnname}}, etc. are also available.
To construct the URL, search for a known taxon on the target site, copy the results URL, strip unnecessary parameters, and replace the taxon name portion with {{taxon.name}}. Some sites use complex search forms which send data as a POST request instead of a URL query - in that case, you can often use your browsers Dev Tools to see the format of the form submission and deduct the name of parameter used to pass the taxon name and then construct the URL with the appropriate placeholders.
For multilingual projects, you can provide language-specific URL templates if the target site has language-specific URL patterns - for example, Google search URLs differ for google.com vs. google.fr - by using Search URL template:en, Search URL template:fr, etc.
URLHow to use: Supports multilingual variants if the target site has language-specific URL patterns.
Common search URL templates
| Title | Search URL template | other columns… |
|---|---|---|
Google Images | https://www.google.com/search?q={{taxon.name}}&tbm=isch | … |
GBIF Taxa | https://www.gbif.org/species/search?q={{taxon.name}} | … |
Smithsonian, US National Herbarium (US) | https://collections.nmnh.si.edu/search/botany/?qn={{taxon.name}} | … |
Column Restrict to taxon
member of table Search online on sheet nl_content
If non-empty, the search link is shown only for taxa that are descendants of the named taxon (or the taxon itself). Multiple taxa can be listed comma-separated: Aceropyga, Baeturia restricts the link to descendants of either genus. Leave empty to show the link for every taxon.
Accepted content: Taxon name(s) excluding authority, comma-separated. Matching is case-insensitive.
How to use: Use when the linked database covers only a subset of your project's taxa - for example, a beetle database link on a vertebrate checklist should be restricted to Coleoptera, as the database would likely be of limited use for e.g., mammal taxa.
Restricting a mammal database link
Supposing your project has taxa covering different vertebrate groups, but the Mammal Diversity Database only has information on mammals, you can restrict that search link to Mammalia so it only appears for relevant taxa.
| Title | Search URL template | Restrict to taxon | comment | other columns… |
|---|---|---|---|---|
Mammal Diversity DB | https://www.mammaldiversity.org/taxa.html#genus={{taxon.name}} | Mammalia | This link will only show up for taxa that are mammals. | … |
GBIF Taxa | https://www.gbif.org/species/search?q={{taxon.name}} | This link will show up for all taxa. | … |
Table Single-access keys
on sheet nl_content
Embeds dichotomous or polytomous identification keys directly in the spreadsheet, navigable from within the app. Each key is a block of rows using four columns. Multiple keys can coexist in the same table and can be even chained (e.g. key to insect orders can automatically lead to a key for specific families).
As the user navigates a key, the main checklist filter updates in real time to show only the taxa still reachable given the choices made so far.
This table can be left completely empty if you do not use identification keys or plan to add them later once your data is ready.
Formatting key text
Use Markdown ****bold**** in Text cells to highlight the diagnostic character being contrasted, and __italics__ for taxon names. If needed, you can use other Markdown formatting or @citekey bibliography citations (see Bibliography table).
Column Step
member of table Single-access keys on sheet nl_content
A text code starts a new key. You can use any text, but it's recommended to use the taxon name from among your taxa which covers the key (e.g. Coleoptera for a key to beetles families; beetles will be accepted, you may use a non-taxon identifier if your key doesn't cover an entire taxon). An integer starts or continues a question step within the current key. All rows sharing the same integer are the choices for that one question. Step integers must be strictly ascending within a key, and a Target integer must always be higher than the current Step integer.
If a key result is a taxon name that matches the Step header of another key, the app automatically offers that second key as a continuation - enabling multi-level key chains, hence the interest to use names of taxa as Step headers.
Accepted content: Step integers must be strictly ascending within a key.
How to use: Use a unique text code for each key header, then ascending integers (1, 2, 3…) for question steps within that key.
A minimal dichotomous key
| Step | Text | Target | Images |
|---|---|---|---|
reptiles | Key to Reptiles of Vanuatu | Covers species recorded since 1990 | 1 | |
1 | Body covered with scales, no limbs | 2 | |
1 | Four limbs present | 3 | |
2 | Yellow/black banded | Pelamis platura | |
2 | Uniform olive | Aipysurus laevis | |
3 | ... | ... |
Three chained keys: European beetle families and two family-level keys
The Target values Carabidae and Coccinellidae in the first key match the Step header codes of the two lower keys exactly, so the app automatically chains into them. This supposes you have all those taxa in your data sheet.
| Step | Text | Target | Images |
|---|---|---|---|
beetles_europe | Key to Selected European Beetle Families | Following @beetles2018, covers Carabidae, Coccinellidae, and Cerambycidae... | 1 | |
1 | Body flattened and elongate; hind angles of pronotum acute... | Carabidae | |
1 | Body strongly convex (hemispherical) or elongate-cylindrical... | 2 | |
2 | Body hemispherical; elytra smooth, brightly colored with discrete spots... | Coccinellidae | |
2 | Body elongate-cylindrical; antennae at least half body length... | Cerambycidae | |
Carabidae | Key to Selected *Carabidae* | Covers *Carabus*, *Cicindela*, and *Pterostichus*... | 1 | |
1 | Elytra with metallic violet or blue iridescence; surface with fused chain-like ridges... | Carabus violaceus | |
1 | Elytra not iridescent; surface finely striate or nearly smooth... | 2 | |
2 | Eyes very large and prominent; elytra dark metallic with pale spots... | Cicindela campestris | |
2 | Eyes moderate; elytra uniformly black, finely striate... | Pterostichus melanarius | |
Coccinellidae | Key to Selected *Coccinellidae* | Covers *Coccinella*, *Harmonia*, and *Adalia*... | 1 | |
1 | Elytra red with 7 black spots (3+3+1 scutellar); pronotum white... | Coccinella septempunctata | |
1 | Elytral pattern variable or with fewer than 7 spots... | 2 | |
2 | Elytra orange to red, pattern highly variable (melanic to pale)... | Harmonia axyridis | |
2 | Elytra red with 2 black spots or black with 2 red spots... | Adalia bipunctata |
Column Text
member of table Single-access keys on sheet nl_content
For a key header row: the title and optional description in Title | Description format (pipe-separated). For a question step row: the text describing this choice. Markdown is supported - use **bold** for diagnostic characters and *italics* for taxon names.
How to use: Header rows use Title | Description format; step rows describe the diagnostic character or choice.
Column Target
member of table Single-access keys on sheet nl_content
Where this choice leads. Enter a higher integer to continue to the next question step, a taxon name as the final identification result, or another key Step ID (text code) to chain to another key.
Accepted content: Integer target must be strictly higher than the current Step number.
How to use: Required for all step choice rows. Leave empty for key header rows.
Column Images
member of table Single-access keys on sheet nl_content
Optional image(s) from usercontent/keys/ folder to display alongside this step choice. Each entry is a filename optionally followed by a #-led caption: wing.jpg #Dorsal view. Separate multiple entries with a pipe |. The caption is displayed below the image in fullscreen view.
Accepted content: Each pipe-separated token must be a filename with a valid extension, optionally followed by #Caption. A #-only token with no preceding filename is invalid and will be skipped with a compiler error.
How to use: One or several images can illustrate the precise feature being described.
WARNING
Images are only permitted on numeric step rows, not on key header rows.
Single image without caption, two images with captions
| Step | Text | Target | Images |
|---|---|---|---|
1 | Elytra metallic, surface with fused chain-like ridges... | Carabus violaceus | carabus_habitus.jpg |
1 | Elytra not metallic; surface smooth or finely striate... | 2 | wing_dorsal.jpg #Dorsal view | wing_ventral.jpg #Ventral view |
Table Bibliography
on sheet nl_content
Stores BibTeX entries that can be cited using @citekey notation in any Markdown field throughout the project. Each row contains one or several complete BibTeX entries.
Citations are rendered in APA style. The @citekey syntax supports narrative @smith2020, parenthetical [@smith2020] and several other forms (for a complete reference, see github.com/dominik-ramik/bibtex-json-toolbox).
This table can be left completely empty if you do not use bibliographic references.
Citations vs. database shortcodes
The @citekey citation syntax is distinct from database shortcodes (see Database Shortcodes), which use a similar @code:ID notation but link to external occurrence records.
Column BibTeX entries
member of table Bibliography on sheet nl_content
One complete BibTeX entry per row, copied directly from a reference manager. Alternatively, enter an F: directive (F:references.bib or F:bibtex/literature.bib) to load entries from a file in usercontent/ at compile time. Those entries will be baked-in and if you update the BibTeX file, simply recompile to update the bibliography in the app.
All bibliographic entries will be displayed as a list in References in the Side panel. Clicking on individual citations in the text will display the corresponding full reference.
How to use: Use direct BibTeX entries for small bibliographies. Use F: directives for larger reference lists maintained in a dedicated .bib file or sourced from a reference manager export.
Direct BibTeX entry and F: directive
| BibTeX entries |
|---|
@article{smith2020, author={Smith, J.}, title={A new species}, journal={Zootaxa}, year={2020}, volume={4801}, pages={1--12}} |
F:references.bib |
In your data sheet, you can then cite these references with @smith2020 or any other citekey defined in your BibTeX entries. Supposing description is a markdown field, the citation will be rendered as a clickable link.
| …other columns | species | description | other columns… |
|---|---|---|---|
| … | Pilophorus smithii | Recently split from P. examplei based on the findings of @smith2020. | … |
Table Database shortcodes
on sheet nl_content
Defines custom shortcodes for embedding clickable links to external biological databases or any URL-based resource in Markdown fields. The app ships with several built-in shortcodes that are always available without any table entries:
| Code | Target |
|---|---|
@gbif:ID | GBIF occurrence record |
@gbif.s:ID | GBIF species/taxon page |
@inat:ID | iNaturalist observation |
@ebird:ID | eBird checklist |
@clml:ID | Macaulay Library asset |
@obse:ID | Observation.org record |
This table is optional. Omit it entirely if the built-in shortcodes are sufficient.
Shortcodes are used in data fields with markdown data type using the syntax @code:ID or @code:Author Name:ID.
WARNING
Database shortcodes (@code:ID) are distinct from bibliography citations (@citekey). Shortcodes link to external occurrence records; citations link to bibliography entries. Do not confuse the two syntaxes.
- Columns:
- Code |
- Label template |
- URL template
Column Code
member of table Database shortcodes on sheet nl_content
The keyword written after @ in the shortcode syntax. Must be lowercase letters a-z only, with one optional dot separator (e.g. mydb or mydb.type). No digits, underscores, or hyphens. Defining a code that matches a built-in shortcode logs an info message and overwrites the built-in for that project.
pattern (regex)^[a-z]+(\.[a-z]+)?$ - only lowercase a-z with one optional dot separatorHow to use: Choose a short, memorable code that reflects the database name. Use a dot separator to distinguish record types from the same source (e.g. mydb.occurrence and mydb.taxon).
Custom shortcode codes
| Code | other columns… |
|---|---|
pvnh | … |
pvnh.type | … |
gbif.s | … |
Column Label template
member of table Database shortcodes on sheet nl_content
The text shown as the hyperlink label. Use {{id}} where the record ID should appear and optionally {{author}} for author attribution. The {{author}} placeholder is replaced by the author string followed by a space, or by an empty string if no author was provided - design the template so it reads naturally either way.
Accepted content: Must contain {{id}}. May also contain {{author}}.
How to use: Place {{author}} before a noun so the label reads naturally with or without an author: {{author}}Herbarium record ({{id}}) or inside the parentheses: Herbarium record ({{author}}{{id}}).
Label template with optional author
| Code | Label template | other columns… |
|---|---|---|
pvnh | {{author}}PVNH ({{id}}) | … |
Column URL template
member of table Database shortcodes on sheet nl_content
The full URL of the target record with {{id}} substituted for the record identifier. Must contain {{id}}.
Accepted content: Must contain {{id}} where the record identifier should be substituted.
How to use: Find the URL pattern for a record page on the target database and replace the record ID portion with {{id}}.
URL template for a herbarium
| Code | Label template | URL template |
|---|---|---|
pvnh | {{author}}PVNH ({{id}}) | https://symbiota.pvnh.net/collections/individual/index.php?occid={{id}}&clid=0 |
In your data sheet, suppose voucherNotes is a markdown field.
| …other columns | species | voucherNotes | comment | other columns… |
|---|---|---|---|---|
| … | Ficus wassa | See atypical leaf form on @pvnh:Chanel Sam:00005183 and @pvnh:Pat Curry:00005190. | Both @pvnh shortcodes link to specific herbarium records in the Port Vila Herbarium collection, with collector attribution for each record. | … |
The above example would render in the app as two clickable links opening the corresponding specimen pages in the Port Vila Herbarium collection. Displayed: See atypical leaf form on Chanel Sam PVNH (00005183) and Pat Curry PVNH (00005190).
Table DwC archive
on sheet nl_content
Configures export in Darwin Core Archive (DwC-A) format for submission to GBIF and other biodiversity databases. Each row maps one DwC term to a value source directive. The compiler can produce a checklist archive (checklist_dwca.zip), an occurrence archive (occurrences_dwca.zip), or both.
This table as a translation layer between your spreadsheet data and the DwC-A terms. The Value source column holds that answer as a directive. See Darwin Core Archive export for the conceptual guide.
In vivo experimentation in progress
The DwC-A export feature is currently experimental. It has been succesfully tested to be compliant with GBIF's DwC-A requirements on simple datasets, but we encourage you to verify the exported data against your database to ensure there are no surprises. Contact the developers on GitHub if you encounter any issues.
- Columns:
- Export to |
- Term |
- Value source
Column Export to
member of table DwC archive on sheet nl_content
Controls which archive this row contributes to: the checklist archive (one row per taxon node) or the occurrence archive (one row per occurrence record). Each row targets exactly one archive.
checklist, occurrencesHow to use: Use checklist for taxonomy-only archive. Use occurrences for occurrence-only archive. For terms that belong in both archives - institutionCode, scientificName, language or eml directives - add two rows with the same term and value source, one per archive.
Shared terms duplicated per archive, archive-specific terms separate
Simplified checklist and occurrences archives. Institution code and scientific name appear in both archives, so each gets two rows. Archive-specific terms use the target row.
| Export to | Term | Value source |
|---|---|---|
checklist | dwc:institutionCode | MNHN |
occurrences | dwc:institutionCode | MNHN |
checklist | dwc:scientificName | auto:scientificName |
occurrences | dwc:scientificName | auto:scientificName |
checklist | dwc:taxonID | auto:taxonID |
occurrences | dwc:basisOfRecord | PreservedSpecimen |
Column Term
member of table DwC archive on sheet nl_content
The Darwin Core term to populate, written with its namespace prefix in camelCase (e.g. dwc:decimalLatitude, dcterms:language, dwciri:toDigitalSpecimen). Alternatively, an eml: prefixed field (e.g. eml:precomposed, eml:title, eml:creator.surName) for EML metadata generation.
Supported namespace prefixes: dwc:, dcterms:, dwciri:, dc:. See the full Darwin Core List of Terms at dwc.tdwg.org. For EML fields, see examples below.
How to use: Use the standard prefixed camelCase term name. If your project has more than one language set in Supported languages, the first (default) language is used.
EML metadata from file and from directives
The checklist receives the EML metadata from a file you authored separately and stored inside usercontent/. The occurrence archive gets the metadata baked-in from directives in the table.
| Export to | Term | Value source | comment |
|---|---|---|---|
checklist | eml:precomposed | F:dwc/checklist_eml.xml | file stored in subfolder |
occurrences | eml:packageId | doi:10.12345/mydataset | Ensure you enter unique package ID |
occurrences | eml:title | config:Project name | Get title from our Project name in Customization |
occurrences | eml:pubDate | auto:pubDate | Generated on export, if |
occurrences | eml:abstract | config:About section | Get abstract from our About section in Customization |
occurrences | eml:licenseUri | https://creativecommons.org/licenses/by/4.0/legalcode | Use the full license URI for machine readability |
occurrences | eml:licenseLabel | CC BY 4.0 | Use a human-readable license label for the EML metadata |
occurrences | eml:creatorGivenName | Jane | |
occurrences | eml:creatorSurName | Doe | |
occurrences | eml:creatorEmail | jane.doe@example.com | |
occurrences | eml:creatorOrganizationName | Example Organization | |
occurrences | eml:creatorUrl | https://example.com/jane-doe | |
occurrences | eml:creatorUserId | 0000-0002-1825-1234 |
Column Value source
member of table DwC archive on sheet nl_content
A directive that tells the compiler where to read the value for this DwC term. Several directive types are available, each suited to a different kind of term. See the examples section for detailed explanation and usage examples.
How to use: Enter the directive prefixes (before the :) in lower case, followed by the directive value.
A) column: - per-record data from your data sheet columns
Use See Data types documentation for which sub-field accessors are available for that type.column: to read a value from your data sheet column for each record. If the value contains no [...] blocks or {...} placeholders, the entire string is treated as a column name or sub-field accessor (column:collectedAt.lat). If any [...] or {...} are present, the value is interpreted as a template: wrap each optional segment in [...] and place literal junction text between blocks - a [...] block is dropped entirely when any {columnName} placeholder inside it resolves to empty for that row, and junction text between two blocks is suppressed when either neighbour is dropped. Constant text outside brackets is always emitted.
| Export to | Term | Value source | comment |
|---|---|---|---|
occurrences | dwc:recordedBy | column:collector.name | Value from column |
occurrences | dwc:decimalLatitude | column:collectedAt.lat | Suppose |
occurrences | dwc:decimalLongitude | column:collectedAt.long | ... same for the |
occurrences | dwc:verbatimCoordinates | column:collectedAt.verbatim | geopoint type also exposes |
occurrences | dwc:verbatimLocality | column:[Country: {country}], [Province: {province}], [Place name: {placeName}] | Each |
occurrences | dwc:minimumElevationInMeters | column:altitude.from | Suppose |
occurrences | dwc:maximumElevationInMeters | column:altitude.to | ... and |
occurrences | dwc:eventDate | column:collectionDate.ymd | Suppose |
occurrences | dwc:year | column:collectionDate.year | ... and the standalone year; we could also get |
B) auto: - values computed from the compiled taxonomy
Use auto: for terms whose values are rank-aware or hierarchy-aware - they cannot be read from a single spreadsheet column because the correct value depends on which node is being exported. auto:scientificName, for example, resolves to the taxon name of currenly processed node: a family node yields its family name, a genus node yields its genus name. auto:parentNameUsageID links every node to its immediate parent automatically. auto:taxonID produces a stable UUID derived from each node's identity, consistent across re-exports.
| Export to | Term | Value source | comment |
|---|---|---|---|
checklist | dwc:taxonID | auto:taxonID | UUID v5 stable across re-exports |
checklist | dwc:parentNameUsageID | auto:parentNameUsageID |
|
checklist | dwc:taxonRank | auto:taxonRank | Rank label from Column name in your Taxa definition table, if you export to DwC-A, your column names should match the standard DwC rank names |
checklist | dwc:scientificName | auto:scientificName | Taxon name for the currently processed rank |
checklist | dwc:scientificNameAuthorship | auto:scientificNameAuthorship | Authority from the currently processed rank column's |
occurrences | dwc:occurrenceID | auto:occurrenceID | Value from your |
C) config: - dataset-wide metadata from your customization table
Use config: to reference values already stored in Customization, avoiding duplication. The item name after config: must match a key in that table exactly.
| Export to | Term | Value source |
|---|---|---|
checklist | dwc:datasetName | config: Project name |
occurrences | dwc:bibliographicCitation | config: How to cite |
D) taxa: - literal value from a named taxon rank column
Use taxa:ColumnName to read the value stored in a specific rank's column for every exported record. This is distinct from auto: in that taxa: reads what you entered in the specific taxon column, while auto: computes the value of the currently processed rank record. Append .name, .authority, or .lastNamePart to address sub-fields of a taxon column (.lastNamePart extracts the terminal epithet, e.g. aurea from Litoria aurea). In this example Family, Genus, Species and Subspecies are the column names in your Taxa definition.
| Export to | Term | Value source |
|---|---|---|
checklist | dwc:family | taxa:Family |
checklist | dwc:genus | taxa:Genus |
checklist | dwc:specificEpithet | taxa:Species.lastNamePart |
checklist | dwc:infraspecificEpithet | taxa:Subspecies.lastNamePart |
E) media: - resolved permalink URLs for associatedMedia
Use media: exclusively for dwc:associatedMedia and other terms which expect full media URLs. Plain media columns are not useful here. The media: directive extracts and resolves the full permalink URL from each listed column and joins multiple results with |. List column names separated by commas. Append # to automatically expand array columns (lifePhotos# → lifePhotos1, lifePhotos2, …).
| Export to | Term | Value source | comment |
|---|---|---|---|
occurrences | dwc:associatedMedia | media: fieldPhotos#, specimenScan | This will take all the photos from the |
F) plain text constant across the entire export
Use plain unprefixed text for constant values that are the same for every record: language, institution code, collection code, license, basis of record, geodetic datum, and so on.
| Export to | Term | Value source |
|---|---|---|
checklist | dcterms:language | en |
checklist | dwc:institutionCode | MNHN |
checklist | dwc:collectionCode | HERBARIUM-P |
checklist | dcterms:license | CC BY 4.0 |
occurrences | dwc:basisOfRecord | PreservedSpecimen |
occurrences | dwc:geodeticDatum | WGS84 |
Complete worked example - checklist and occurrence archive
A fairly complete configuration for a herbarium dataset ready for both a taxon checklist and preserved specimen occurrences DwC-A export. Terms shared between archives are duplicated explicitly, one row per archive.
| Export to | Term | Value source | comment |
|---|---|---|---|
checklist | eml:precomposed | F:dwc/checklist_eml.xml | |
checklist | dcterms:language | en | |
checklist | dwc:institutionCode | MNHN | |
checklist | dwc:collectionCode | HERBARIUM-P | |
checklist | dcterms:license | CC BY 4.0 | |
checklist | dwc:datasetName | config: Project name | |
checklist | dwc:taxonRank | auto:taxonRank | |
checklist | dwc:scientificName | auto:scientificName | |
checklist | dwc:scientificNameAuthorship | auto:scientificNameAuthorship | |
checklist | dwc:kingdom | Plantae | |
checklist | dwc:family | taxa:Family | |
checklist | dwc:genus | taxa:Genus | |
checklist | dwc:specificEpithet | taxa:Species.lastNamePart | |
checklist | dwc:taxonID | auto:taxonID | |
checklist | dwc:parentNameUsageID | auto:parentNameUsageID | |
occurrences | eml:precomposed | F:dwc/occurrence-eml.xml | |
occurrences | dcterms:language | en | |
occurrences | dwc:institutionCode | MNHN | |
occurrences | dwc:collectionCode | HERBARIUM-P | |
occurrences | dcterms:license | CC BY 4.0 | |
occurrences | dwc:datasetName | config: Project name | |
occurrences | dwc:taxonRank | auto:taxonRank | |
occurrences | dwc:scientificName | auto:scientificName | |
occurrences | dwc:scientificNameAuthorship | auto:scientificNameAuthorship | |
occurrences | dwc:kingdom | Plantae | |
occurrences | dwc:family | taxa:Family | |
occurrences | dwc:genus | taxa:Genus | |
occurrences | dwc:specificEpithet | taxa:Species.lastNamePart | |
occurrences | dwc:basisOfRecord | PreservedSpecimen | |
occurrences | dwc:occurrenceID | auto:occurrenceID | |
occurrences | dwc:recordedBy | column: collectorName | |
occurrences | dwc:eventDate | column: collectionDate.ymd | |
occurrences | dwc:locality | column: localityName | |
occurrences | dwc:decimalLatitude | column: location.lat | |
occurrences | dwc:decimalLongitude | column: location.long | |
occurrences | dwc:geodeticDatum | WGS84 | |
occurrences | dwc:associatedMedia | media: specimenScan, fieldPhotos# |