Encoding of Sz
Zettel in a Sz encoding are represented as a symbolic expression. To process these symbolic expressions, you need to know, how a specific part of a zettel is represented by a symbolic expression.
Basically, each part of a zettel is represented as a list, often a nested list. The first element of that list is always a unique symbol, which denotes that part. The meaning / semantic of all other elements depend on that symbol.
Zettel
A full zettel is represented by a list of two elements. The first element represents the metadata, the second element represents the zettel content.
Metadata
Metadata is represented by a list, where the first element is the symbol META. Following elements represent each metadatum1 of a zettel in standard order.
Standard order is: Title, Role, Tags, Syntax, all other keys in alphabetic order.
Metadata = (META Metadatum … ).
Content
Zettel content is represented by a block.
Content = Block.
Block
A block is represented by a list with the symbol BLOCK as the first element. All following elements represent a nested block-structured element.
Block = (BLOCK BlockElement … ).
Inline
Both block-structured elements and some metadata values may contain inline-structured elements. Similar, inline-structured elements are represented as follows:
Inline = (INLINE InlineElement … ).
Attribute
Attributes may be specified for both block- and inline- structured elements. Attributes are represented by the following schema.
Attribute = ( [ AttributeKeyValue … ] ')'.
Either, there are no attributes. These are specified by the empty list (). Or there is a list of key / value pairs.
Other
*ZSX-NOT-FOUND:xyz*
Any symbol with the pattern *ZSX-NOT-FOUND:xyz**, where “xyz” is any string, signals an internal error.
*ZSX-SPLICE-NODES*
A list with *ZSX-SPLICE-NODES* as its first element may occur during internal processing. It signals that some processing routine intends to return more than one object instead of just one BlockElement or one InlineElement. The elements of such a list should be “spliced” into the parent list.
NIL (or ())
Analogous to a splice node, which signals that more than one values is about to be returned, a “NIL” value (denoted as “()”) signals that no object should be returned. Therefore, a BlockElement or an InlineElement may be “NIL”.
*ZSX-ID*
The symbol *ZSX-ID* is a special Attributes key. It denotes an unique identifier. For example, used for heading or mark elements, when needed by encoding the zettel.
- “Metadatum” is used as the singular form of metadata. ↩︎