External identifiers

An external identifier consists of an extensible scheme string, an opaque value, and an optional qualifier. Multiple identifiers, including multiple values from one scheme, may be attached to an object.

Core validation is intentionally small: text must be non-empty, bounded, and free of NUL characters so every public language boundary can transport it. PostProject preserves unknown schemes and values exactly. Applications may opt into a scheme-specific validator when they need to verify syntax; storing an identifier never triggers a registry or network lookup.

Identifiers may target assets, representations, resources, or activities. An activity identifier names the operation itself, such as a render-farm job or workflow task; it is distinct from the optional identifier of the agent that performed the activity.

Scheme identifiers are strings rather than a closed enum so new standards and application namespaces do not require an ABI redesign. The small built-in registry currently describes:

Scheme

Stored value

Local check

urn:smpte:umid

the UMID namespace-specific hex value

SMPTE ST 2029 lexical form

urn:isan

the ISAN namespace-specific value

RFC 4246 lexical form

urn:eidr

the EIDR prefix and suffix, such as 10.5240:…

RFC 7972 lexical form

https://postproject.org/id/application

application-owned opaque text

generic limits only

These are opt-in syntax hints, not a closed allow-list. Checks do not normalize case, validate registry assignment, verify every standard checksum, or contact a network service. See SMPTE ST 2029, RFC 4246, and RFC 7972 for the authoritative formats.