Data structure validation commands are grouped in so-called map of schemas. Map's key is schema name. Schema's value is a list of commands. Each command is a list of string-encoded words (with several exceptions). First element of the command's list is a command name. Possible following elements are command-specific. Here is full list of structure validation commands, that should be generated from higher level schema descriptions. Here comes human readable command name, its string byte-code and possible arguments. TAKE | "." | args: k Take/choose the value of the "k" key in the map, if "k" is a string. If "k" is integer, then choose the k-th value in a list. If "k" equals to ".", then choose the element you are currently in. Command never fails, but key can be non-existent. EXISTS | "E" Assure that chosen element exists. !EXISTS | "!E" Assure that chosen element does not exist. EACH | "*" Execute the next command against every element of the chosen (if it exists) list, or every value of the map. TYPE | "T" | args: T0 [T1 ...] Check that chosen (if it exists) element's type is in (T0, T1 ...) set. Possible types: BIN, BLOB, BOOL, HEXLET, INT, LIST, MAGIC, MAP, NIL, STR, TAI. GT | ">" | args: n Check that chosen (if it exists) integer value is greater than "n". If chosen value is either list or map, then check their length. If the value is a string, then check its length. LT | "<" | args: n Same as ">", but check that value is less than "n". SCHEMA | "S" | args: s Check chosen (if it exists) element against schema named "s". TIMEPREC | "TP" | args: p Check that chosen (if it exists) element, of time type, has value of maximal specified time precision. "p" is integer with following possible values: 0: only full seconds allowed, no parts; 3: only up to milliseconds; 6: only up to microseconds; 9: only up to nanoseconds; 12: only up to picoseconds; 15: only up to femtoseconds; 18: up to attoseconds; UTC | "UTC" Check that chosen (if it exists) element, of time type, can be converted to UTC. EQ | "=" | args: v Check that chosen (if it exists) element's value equals to binary string "v". For example let's check "our" structure, described in CDDL as: ai = text .gt 0 fpr = bytes .size 32 our = {a: ai, v: bytes/text, fpr: fpr, ?comment: text} "a", "v", "fpr" fields are required ones. "v" has two allowable types. "comment" is optional, but typed. And "fpr" has fixed length. Corresponding schema can be: {"our": [ [".", "a"], ["E"], [".", "a"], ["T", "STR"], [".", "a"], [">", 0], [".", "v"], ["E"], [".", "v"], ["T", "BIN", "STR"], [".", "fpr"], ["E"], [".", "fpr"], ["T", "BIN"], [".", "fpr"], [">", 31], [".", "fpr"], ["<", 33], [".", "comment"], ["T", "STR"], ]} Here is example with multiple schemas: latitude = -90..90 longitude = -180..180 where = [latitude, longitude] wheres = [+ where] { "where": [ [".", "."], ["T", "LIST"], [".", "."], [">", 1], [".", "."], ["<", 3], [".", "."], ["*"], [".", "INT"], [".", 0], [">", -91], [".", 0], ["<", 91], [".", 1], [">", -181], [".", 1], ["<", 181], ], "wheres": [ [".", "."], ["T", "LIST"], [".", "."], [">", 0], [".", "."], ["*"], ["S", "where"], ], }