ValidationRules quick reference

Syntax lookup for the validation rules card, which quotes every rule from the Data Validation Rules specification. Path syntax and resolution are owned by Libertas Schema Path, whose rules (paths.*) are on the data model card; the examples below apply its validation-expression forms. Debug rules with Studio's developer trace, evaluate_validation_rules and CI fixtures under Debugging rules.

Choose a rule or a bound

Decide first where a check belongs.

Need Attribute value
Accept or reject data ValidationRules: a Boolean expression followed by : "MESSAGE_KEY"; (rule set).
Compute a minimum or maximum RangeMin / RangeMax: one bound expression (dynamic ranges).
Require a fixed String format Pattern: one portable full-string pattern (Pattern).

Declare

Form TypeScript Rust
Rule set @LibertasValidationRules('expression : "MESSAGE_KEY";') #[libertas_validation_rules(r#"expression : "MESSAGE_KEY";"#)]
Final-only rule set (discouraged) @LibertasValidationRules('FinalOnly=true; expression : "KEY";') #[libertas_validation_rules(r#"FinalOnly=true; expression : "KEY";"#)]
Dynamic bound @LibertasRangeMin("expression") / @LibertasRangeMax("expression") #[libertas_range_min("expression")] / #[libertas_range_max("expression")]

Read values in the correct context

Purpose Syntax
Annotated value / descendant [], [field/child]
Parent's field (current row) [^/minimum]
Function argument [argument]
Reference-context path(s) {$.value}, {$.preferred,$.fallback}

Operators and functions

Purpose Syntax
First non-null value [preferred] | [fallback] | 0
Logic and comparison !, &&, `
Active Union variant or Enumeration member [value] is VariantName
One flag set in a Bitflags field [facts] has PersonFacts.Student
String length in UTF-8 bytes length([name])
Complete String format matches([identifier], "[0-9]{9}")
Fixed calendar date d"1990-01-01"
DateOnly year, month, day (integers) year([issued]), month([issued]), day([issued])
Shift a DateOnly by months or years add_months([start], 24), add_years([start], 1)
FormattedText resource key (locale independent) resource([status]) == "STATUS_NONE"

Traverse collections

Purpose Syntax
List cursor all(item in [items], [item/value] >= 0)
Paths across parent lists all(item in [groups/items], [item/value] >= 0)
Filter and project collect(node in [nodes], [node] is Active, [node/device])
Collection uniqueness is_unique_set(collection)
Composite-key uniqueness is_unique_set(row in [rows], [row/credit], [row/year])
Total of Number leaves sum([rows/amount]), sum(collect(...))
Lists and collections all, any, none, collect, is_unique_set, count, sum

Combine operators under the full precedence table and the grammar.

Search Libertas