Vocabulary Tag
org.hypercerts.vocab.tag
Overview#
A vocabulary tag is one term in a shared classification vocabulary, such as a land-cover class, a zone role, or a methodology. Instead of typing "mangrove" into a free-text field, a record points to a published tag that says what "mangrove" means, who defined it, and how it relates to other terms.
Because each tag is a record with its own publisher and AT-URI, two tags called "restoration" from different organizations stay distinct, and an application can inspect the intended meaning instead of guessing from the label. For the concepts behind it, see Describing and Classifying Work in the Guide.
How it's used#
- A curator publishes a vocabulary. A funder, registry, standards body, or community publishes a set of tag records, each with a
category(the classification axis), akey, aname, and a definition indescription. Any account can publish tags; there is no central registry. - Records reference tags to classify themselves. Collections and features carry a
tagsarray of strong references to tag records. A directory can then group projects by subject, or a funder can find land areas of a given type. - Terms form a hierarchy.
broaderlinks a term to one or more directly broader terms, so "mangrove" can sit under "coastal wetland" and "forest" at the same time. - Terms are retired, not deleted. A curator sets
statustodeprecatedand pointssupersededByat the replacement. Records that used the old term keep their references, and applications can show the replacement alongside it. - External vocabularies line up.
sameAslists URIs of exactly equivalent concepts elsewhere (for example ENVO or IUCN ecosystem types), so data keyed by an external vocabulary can be joined to Hypercerts records.
Vocabulary tags classify records so people can find them. They are separate from work-scope tags, which describe what an activity covers.
Schema#
Record key: any · Lexicon version: 1.4.1 · View the schema
Required properties#
| Property | Type | Description |
|---|---|---|
key | string (record-key) | Stable lowercase machine identifier for this term within its publisher and category, for example boundary or mangrove. Must not contain dots, so that the recommended <category>.<key> record key remains unambiguous. maxLength: 120 |
name | string | Human-readable display name of the term. maxLength: 200 |
category | string (record-key) | The classification axis this term belongs to, for example land-cover or zone-role. One term belongs to one category; a subject may carry tags from many categories at once. Values beyond the known set are permitted. Must not contain dots, so that the recommended <category>.<key> record key remains unambiguous. maxLength: 50 Known values: zone-role, land-cover, ecosystem-type, stratum-class, tenure, methodology, outcome-class, evidence-type. |
status | string | Lifecycle status of the term: proposed (submitted, not yet governed), accepted (in active governed use), or deprecated (retired; see supersededBy). Values beyond the known set are permitted. maxLength: 20 Known values: proposed, accepted, deprecated. |
createdAt | string (datetime) | Client-declared timestamp when this record was originally created. |
Optional properties#
| Property | Type | Description |
|---|---|---|
description | string | Definition and scope notes for the term, written so a reader outside the publishing organization can apply it consistently. maxLength: 10000 maxGraphemes: 1000 |
broader | array of strongRef | Optional references to directly broader terms, forming a polyhierarchy (a term may have several broader terms). Each referenced record must conform with org.hypercerts.vocab.tag. maxItems: 20 |
supersededBy | strongRef | The replacement term for a deprecated term, letting consumers roll classifications forward without rewriting published records. The referenced record must conform with org.hypercerts.vocab.tag. |
aliases | array of string | Alternative human-readable labels and abbreviations for search and display. Aliases carry no identity: references always point at the record, not at a label. maxItems: 50 item maxLength: 200 |
sameAs | array of string (uri) | URIs of exactly equivalent concepts in external vocabularies, for example ENVO, IUCN GET, OSM tag conventions, or registry methodology identifiers. Exact matches only; typed broader/narrower/close mappings are a named future field. maxItems: 20 |
referenceDocument | union: org.hypercerts.defs#uri, org.hypercerts.defs#smallBlob | A document defining or motivating this term, as a URI or an attached small blob. |
signatures | app.certified.signature.defs#list | Optional cryptographic signatures attesting to this record's content. |
Example#
A land-restoration vocabulary term for mangrove land cover, published at record key land-cover.mangrove:
{
"$type": "org.hypercerts.vocab.tag",
"key": "mangrove",
"name": "Mangrove",
"category": "land-cover",
"description": "Intertidal forest or shrubland dominated by salt-tolerant mangrove species. Use for areas where mangrove canopy covers at least 10% of the ground, including replanted stands. Use bare-mudflat for tidal areas without woody cover.",
"broader": [
{
"uri": "at://did:plc:3kzv6qm7xw2hrl5tdnyb4fae/org.hypercerts.vocab.tag/land-cover.coastal-wetland",
"cid": "bafyreibv4hwqkz7m2xrd3ylpnc6tjsa5fqe2gkoh4wzvmu3i7db6xnlqye"
}
],
"status": "accepted",
"aliases": ["Mangrove forest", "Mangal"],
"sameAs": ["https://vocab.example.org/land-cover/mangrove"],
"referenceDocument": {
"$type": "org.hypercerts.defs#uri",
"uri": "https://restoration-vocab.example.org/land-cover/mangrove"
},
"createdAt": "2026-05-14T10:20:00.000Z"
}
Rules and best practices#
- Use the record key
<category>.<key>. The schema recommends a deterministic record key such asland-cover.mangroveorzone-role.site. Validation cannot check that the record key matches the body, so writers and indexers keep the two in agreement. - Keep
keyandcategorylowercase and free of dots. Both use therecord-keyformat, which permits dots and uppercase, but a dot makes the composed record key ambiguous and a case variant creates a second term that will not match the first. - Write a real definition.
descriptionis what lets someone outside your organization apply the term consistently. A name alone rarely says where the boundary of a term lies; say what is included and, where useful, what belongs under a neighboring term. - Classify by reference, not by label. A term is identified by its AT-URI. Two tags with the same
nameor a shared alias are not the same term. Usealiasesfor search, autocompletion, and display, not to decide which term a record uses. - Reuse before you mint. If an existing, accepted term from a vocabulary your users recognize fits, reference it rather than copying it into your own repository. A private copy breaks the comparability that shared terms exist to provide.
- Mark new terms as
proposed.statusis required. Useproposedfor terms that have not been through a curation process,acceptedfor terms in governed use, anddeprecatedfor retired terms. - Publish a changed concept as a new term. If the meaning of a term changes, create a new record, set the old one to
deprecated, and point itssupersededByat the new one. Editing the definition in place silently changes what earlier classifications meant. - Keep
sameAsfor exact matches. List only external concepts that mean exactly the same thing. Broader, narrower, or related concepts do not belong there. - A tag array is a set of facts. All tags on a collection or feature apply at once (logical AND), with no order, weighting, or negation. Put boolean logic in a work scope instead, and don't reference the same tag twice in one array.
- Readers pin a version and look up the current state. A tag reference pins the version (CID) the record was classified against. To find whether a term has since been deprecated or superseded, applications resolve the term by its URI. A retired term still classifies the records that used it.
- Hierarchy is not inheritance.
broaderstates a direct relationship. A record tagged "mangrove" has not itself asserted "coastal wetland". An application that expands a query to broader or narrower terms should make that visible to the reader.
Related#
- Collection and Feature: the records that carry
tags. - Work Scope: a separate tag system for describing what an activity covers.
- Shared Definitions: the
uriandsmallBlobobjects used byreferenceDocument. - Guide: Describing and Classifying Work, Records That Change Over Time, Finding and Reusing Information.