Skip to content

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

required

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.

Column Column name

member of table Taxa definition on sheet nl_content

Required non-empty Unique

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.

Content type:column name

Accepted 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.

Examples

Four-rank hierarchy

If needed, you could have .authority for the class and family too, or ommit it in the genus.

In your Taxa definition sheet:

Column nameother columns…

class

family

genus

species

In your data sheet:

classfamilygenus.namegenus.authorityspecies.namespecies.authorityother 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

Required non-empty Multilingual Unique

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.

Examples

Bilingual rank labels with an occurrence rank

Suppose in your Supported languages table you have entries for English (en) and French (fr).

In your Taxa definition table:

Column nameTaxon name:enTaxon name:frother columns…

family

Family

Famille

species

Species

Espèce

catalogId

Occurrence

Occurrence

In your data sheet:

familyspecies.namespecies.authoritycatalogIdother 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

Default: 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.

Accepted values: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).

Examples

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 nameTaxon nameOrder byother columns…

majorGroup

Group

as is

family

Family

species

Species

Data as they are entered in your data sheet:

majorGroupfamilyspeciesother 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

Default: (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.

Examples

Species showing Family as parent (skipping Genus)

Column nameTaxon nameParent taxon indicationother columns…

cls

Class

fam

Family

gen

Genus

Family

spec

Species

Family

catalogId

Occurrence

In your data sheet:

clsfamgenspeccatalogIdother 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

Default: no  (or leave empty)

Whether taxon names at this rank are rendered in italics. Conventionally used for genus and species.

Accepted values:yes, no, (empty)

How to use: Set to yes for genus and species ranks. Leave empty or no for higher ranks.

Examples

Italicizing genus and species

Column nameTaxon nameItalicizeother 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.

Column Column name

member of table Custom data definition on sheet nl_content

Required non-empty Unique

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#).

Content type:data path

How 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.

Examples

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 nameTitleData typeother 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 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 brevity

Note: in this example we write-out the redlist 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 columnsspeciesredlisthabitat1habitat2dimmensions.beakToTaildimmensions.wingspanother 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

Multilingual Default: (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.

Examples

Title with tooltip

Column nameTitle

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 nameTitle

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

Multilingual Default: (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.

Examples

Grouped filter titles

Column nameSearch 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

Required non-empty

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:

ValueResult
list or list bulletsUnordered bullet list (default)
list numberedOrdered list starting at 1
list unmarkedList with no bullets or numbers
list spaceItems on one line, separated by a space
list commaItems on one line, separated by ,
list [any string]Items on one line, separated by that string

See Data Types for the full type reference.

Content type:dataTypeDef

Accepted 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.

Examples

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 nameData typeEffect

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 nameTitleData typecomment

info

list space

No Title here, this is simply to group the two underlying sub-items underlying items on a single line with space separation.

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 status sub-item is grouped together with the previous redList sub-item on the taxon card.

distribution

Distribution

list comma

Unlike the info example above, this is a root-level array field (note the # in the next row), so we want a common Title for each of the items. Each item will be separated by a comma.

distribution#

text

The # indicates each item in the array. No Title here as this would effectively prepend the same title to each of the countries. Simply use text here, in practice you could leverage mapitems and get a dynamically created map.

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 # indicates each item in the array. No Title here, we don't need to prepend anything to the individual items. We use taxon here to display it as a clickable taxon link the user can click and search this taxon online (if Search online is configured).

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 columnsspecies.namespecies.authorityinfo.redListinfo.statusdistributionconfuseSpecies1.nameconfuseSpecies1.authorityconfuseSpecies2.nameconfuseSpecies2.authorityother 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

Multilingual Default: (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.055 cm, 15001.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}}.

Examples

Common template patterns

PurposeTemplate value

Auto-scale a measurement unit

{{unit "m"}}

Image with thumbnail (img/ficus_640.jpg) and full-size (img/ficus.jpg) variants (supposing ficus in data cell)

img/{{img (thumb "_640")}}.jpg

Image with thumbnail (img/morus_640.jpg) and full-size (img/morus_2400.jpg) variants (supposing morus in data cell)

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

Default: 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 soundMedia tab; map and mapregionsMap tab; text and markdownText tab.

See Placement Options for the layout diagram and guidance table.

Content type:tokenSet

Accepted 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.

Examples

Sample placement choices

Column nameData typePlacementcommentother columns…

redlist

category

left

collectionDate

date

right

Instead of putting redlist and collectionDate in the same column, we give them separate columns to take less vertical space.

description

markdown

details

This text may be long, so let's give it the full horizontal space.

distribution

mapregions

middle | details

mapregions are chameleons ... in details they will render an SVG choroipleth map, but in the main card they will render a simple text list of regions. Pick either or both. This way users get a quick overview in the card and can click for the full map if they want.

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 nameData typePlacementcommentother 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

Default: 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.
ExpressionEffect
if incountry notsetHide if the incountry filter has no value selected
unless incountry issetHide 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.

Examples

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 nameTitleSearch category titleHiddenother 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

Required non-empty

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.

Accepted values:taxon, occurrence

Accepted 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.

Examples

Mixed taxon and occurrence columns

Column nameTitleBelongs toother columns…

redlist

Red List

taxon

description

Description

taxon

collector

Collector

occurrence

In your data sheet, the 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.

Using this pattern you can define separate rows for taxa-related data and others for occurrence-related data.

familyspeciescatalogNumberredlistdescriptioncollectorcommentother 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 family-level and carries the name of the collector.

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 nameTitleBelongs tocommentother 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.

Column Title

member of table Search online on sheet nl_content

Required non-empty Multilingual Unique

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.

Examples

Bilingual search link titles

Title:enTitle:frother columns…

NYBG Virtual Herbarium

Herbier virtuel NYBG

Google Images

Images Google

Column Icon

member of table Search online on sheet nl_content

Required non-empty

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.

Content type:filename
Allowed extensions:.jpg, .png, .webp, .svg

Accepted 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.

Examples

Icon filenames

TitleIconother columns…

GBIF

gbif.png

Google Images

google.png

eBird

ebird.png

Column Search URL template

member of table Search online on sheet nl_content

Required non-empty Multilingual Unique

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.

Content type:URL

How to use: Supports multilingual variants if the target site has language-specific URL patterns.

Examples

Common search URL templates

TitleSearch URL templateother 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.

Examples

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.

TitleSearch URL templateRestrict to taxoncommentother 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

Required non-empty

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.

Examples

A minimal dichotomous key

StepTextTargetImages

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.

StepTextTargetImages

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

Required non-empty Multilingual

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.

Examples

Single image without caption, two images with captions

StepTextTargetImages

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

Required non-empty Unique Can use F: directive

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.

Examples

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 columnsspeciesdescriptionother 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:

CodeTarget
@gbif:IDGBIF occurrence record
@gbif.s:IDGBIF species/taxon page
@inat:IDiNaturalist observation
@ebird:IDeBird checklist
@clml:IDMacaulay Library asset
@obse:IDObservation.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.

Column Code

member of table Database shortcodes on sheet nl_content

Required non-empty Unique

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.

Content type:pattern (regex)
Pattern:^[a-z]+(\.[a-z]+)?$ - only lowercase a-z with one optional dot separator

How 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).

Examples

Custom shortcode codes

Codeother columns…

pvnh

pvnh.type

gbif.s

Column Label template

member of table Database shortcodes on sheet nl_content

Required non-empty

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}}).

Examples

Label template with optional author

CodeLabel templateother columns…

pvnh

{{author}}PVNH ({{id}})

Column URL template

member of table Database shortcodes on sheet nl_content

Required non-empty

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}}.

Examples

URL template for a herbarium

CodeLabel templateURL 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 columnsspeciesvoucherNotescommentother 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.

Column Export to

member of table DwC archive on sheet nl_content

Required non-empty

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.

Accepted values:checklist, occurrences

How 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.

Examples

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 toTermValue 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

Required non-empty

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.

Examples

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 toTermValue sourcecomment

checklist

eml:precomposed

F:dwc/checklist_eml.xml

file stored in subfolder dwc/ of usercontent/

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 eml:pubDate is ommited, today's date is used by default

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

Required non-empty Can use F: directive (if `term` is `eml:precomposed`)

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.

Examples

A) column: - per-record data from your data sheet columns

Use 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.

See Data types documentation for which sub-field accessors are available for that type.

Export toTermValue sourcecomment

occurrences

dwc:recordedBy

column:collector.name

Value from column collector.name in data for that particular occurrence row

occurrences

dwc:decimalLatitude

column:collectedAt.lat

Suppose collectedAt column is a geopoint and as such it exposes lat and long sub-fields; we get the lat of the particular occurrence row here

occurrences

dwc:decimalLongitude

column:collectedAt.long

... same for the long value

occurrences

dwc:verbatimCoordinates

column:collectedAt.verbatim

geopoint type also exposes verbatim value

occurrences

dwc:verbatimLocality

column:[Country: {country}], [Province: {province}], [Place name: {placeName}]

Each [...] block is dropped if its placeholder is empty. The , junctions are suppressed when either neighbour is absent. country=Laos only → Country: Laos. country=Laos, placeName=Muang Kham → Country: Laos, Place name: Muang Kham.

occurrences

dwc:minimumElevationInMeters

column:altitude.from

Suppose altitude column is a range and as such it exposes from and to sub-fields as numbers; we get the from value here

occurrences

dwc:maximumElevationInMeters

column:altitude.to

... and to for the upper limit

occurrences

dwc:eventDate

column:collectionDate.ymd

Suppose collectionDate column is a date, as such it exposes ymd, year, month, day sub-fields; we get the full date in YYYY-MM-DD format here

occurrences

dwc:year

column:collectionDate.year

... and the standalone year; we could also get .month or .day if we wanted those separately

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 toTermValue sourcecomment

checklist

dwc:taxonID

auto:taxonID

UUID v5 stable across re-exports

checklist

dwc:parentNameUsageID

auto:parentNameUsageID

taxonID of the immediate parent node

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 .authority sub-column

occurrences

dwc:occurrenceID

auto:occurrenceID

Value from your occurrence column. If you use another column to store a unique ID for your occurrences, you can reference it with the plain column, e.g. uniqueCatalogNumber.

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 toTermValue 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 toTermValue 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 toTermValue sourcecomment

occurrences

dwc:associatedMedia

media: fieldPhotos#, specimenScan

This will take all the photos from the fieldPhotos array and the image from specimenScan columns and join their URLs with | as required by DwC-A

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 toTermValue 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 toTermValue sourcecomment

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#

NaturaList documentation