Metadata
Syntax
Every node can have unlimited user-defined metadata.
Metadata is assigned using double-colon-separated key/value(s) pairs, with the value(s) (to the right of the colon) containing an optional timestamp.
audience::Urtext user
Nodes can be searched and sorted by their metadata using Dynamic Definitions. Metadata entries “remember” their location, allowing them to double as contextual bookmarks.
Metadata keys must not contain whitespace, though dash and underscore characters are allowed. Values may include whitespace. Terminate metadata entries using either a new line or a semicolon. Using the semicolon option, several entries may be strung together on a single line:
Case Sensitivity
For comparison, filtering, and sorting purposes, metadata values are not case-sensitive by default. The exceptions are the following (see below):
title
See Node Titles- all Timestamps, either inline or within keyed metadata.
- In project_settings only,
Case sensitive values for additional keys can be added using the case_sensitive key in project_settings. The above will not be overriden.
System Keys
System keys are metadata keys Urtext generates automatically. They begin with a single underscore character, with only one exception, the title
key.
There are a few reserved keys that Urtext uses:
title
: Overrides the default node title or node title syntax. If not added manually,title
will be set automatically to the node’s title._inline_timestamp
: Assigned as an implicit key to any inline timestamp._newest_timestamp
: Assigned to the most recent dated timestamp in the node._oldest_timestamp
: Assigned to the oldest dated timestamp in the node._contents
: Assigned to the text contents of the node.
For uses of these keys, see Dynamic Definitions.
Propagating Metadata to Children and Descendants
The *
character assigns metadata to children:
To assign the metadata to all children (but not the node containing the metadata):
To include also the node containing the metadata:
To propagate the metadata to all descendants (but not the node containing the metadata):
To include also the node containing the metadata:
To propagate metadata to all descendants, including those included as Node Pointers, use two asterisks:
Again to include the containing node, add a plus sign +
first:
Hash Key
The hash character (#
) adds a single metadata value without using a key name or metadata assigner (::
). Its purpose is to provide a shorthand for key names used very often, or to make the full metadata syntax unnecessary in cases where no more than one key name is needed.
By default, the hash character is assigned the key name “keyword”. It can be modified using the hash_key key in project_settings. Whitespaces are not permitted when using the hash character and will end the entry, though underscore characters may be substituted.
#some_value
The above is equivalent to keyword::some_value
Timestamps can be added to the hash metadata by using a dash and inserting the timestamp:
Nodes as Metadata Values
Metadata values can be nodes, which in turn may contain metadata with other nodes as values, nested arbitrarily deep. There are two ways to accomplish this:
Node Link as Metadata Value
Provide a link to an (existing) node as the value for a metadata key:
comments::| A node containing comments >
Bracket Node as Metadata Value
Insert a bracket node directly as the value for a metadata key