Skip to main content

Validation rules reference

Each Draft 7 keyword is implemented as a separate rule class under Source\Schema\Validators\. This page lists every keyword and its implementation unit.

Type keywords

KeywordImplementation unit
typeJsonFlow.ValidationRules.Types
enumJsonFlow.ValidationRules.Enum
constJsonFlow.ValidationRules.Consts

String keywords

KeywordImplementation unit
minLengthJsonFlow.ValidationRules.MinLength
maxLengthJsonFlow.ValidationRules.MaxLength
patternJsonFlow.ValidationRules.Pattern
formatJsonFlow.ValidationRules.Format

Number keywords

KeywordImplementation unit
minimumJsonFlow.ValidationRules.Minimum
maximumJsonFlow.ValidationRules.Maximum
exclusiveMinimumJsonFlow.ValidationRules.ExclusiveMinimum
exclusiveMaximumJsonFlow.ValidationRules.ExclusiveMaximum
multipleOfJsonFlow.ValidationRules.MultipleOf

Array keywords

KeywordImplementation unit
itemsJsonFlow.ValidationRules.Items
minItemsJsonFlow.ValidationRules.MinItems
maxItemsJsonFlow.ValidationRules.MaxItems
uniqueItemsJsonFlow.ValidationRules.UniqueItems
containsJsonFlow.ValidationRules.Contains

Object keywords

KeywordImplementation unit
propertiesJsonFlow.ValidationRules.Properties
requiredJsonFlow.ValidationRules.Required
additionalPropertiesJsonFlow.ValidationRules.AdditionalProperties
patternPropertiesJsonFlow.ValidationRules.PatternProperties
propertyNamesJsonFlow.ValidationRules.PropertyNames
minPropertiesJsonFlow.ValidationRules.MinProperties
maxPropertiesJsonFlow.ValidationRules.MaxProperties

Composition keywords

KeywordImplementation unit
allOfJsonFlow.ValidationRules.AllOf
anyOfJsonFlow.ValidationRules.AnyOf
oneOfJsonFlow.ValidationRules.OneOf
notJsonFlow.ValidationRules.NotRule
if / then / elseJsonFlow.ValidationRules.Conditional

Reference

KeywordImplementation unit
$refJsonFlow.ValidationRules.Ref

Format validators

All format validators extend TBaseFormatValidator (unit JsonFlow.FormatValidators.Base). They are registered in JsonFlow.FormatRegistry.

Format stringClass unit
dateJsonFlow.FormatValidators.Date
date-timeJsonFlow.FormatValidators.DateTime
timeJsonFlow.FormatValidators.Time
emailJsonFlow.FormatValidators.Email
ipv4JsonFlow.FormatValidators.Ipv4
ipv6JsonFlow.FormatValidators.Ipv6
uriJsonFlow.FormatValidators.Uri
uuidJsonFlow.FormatValidators.Uuid
cpfJsonFlow.FormatValidators.CPF
cnpjJsonFlow.FormatValidators.CNPJ
cepJsonFlow.FormatValidators.CEP
phone-brJsonFlow.FormatValidators.BrazilianPhone
license-plate-brJsonFlow.FormatValidators.BrazilianLicensePlate

Base rule interfaces

Every validation rule must implement IJSONSchemaTrait:

IJSONSchemaTrait = interface
procedure Parse(const ANode: IJSONObject); // extract keyword params from schema
procedure SetNode(const ANode: TSchemaNode); // set owning schema node
function Validate(const ANode: IJSONElement; const APath: String;
var AErrors: TList<TValidationError>): Boolean;
end;

The abstract base TBaseValidationRule (unit JsonFlow.ValidationRules.Base) provides the common AddError helper and rule type classification (TRuleType):

ValueMeaning
rtPrimitiveValidates a single keyword (e.g., minLength)
rtCompositeCombines multiple sub-schemas (e.g., allOf)
rtStructuralStructural constraint (e.g., properties)

Registering a custom format validator

uses
JsonFlow.FormatRegistry;

// Implement your validator
type
TMyFormatValidator = class(TBaseFormatValidator)
function Validate(const AValue: string): Boolean; override;
function FormatName: string; override;
end;

// Register at startup — RegisterValidator is a class method; Instance is available
// but registration goes directly through the class method:
TFormatRegistry.RegisterValidator('my-format', TMyFormatValidator.Create);

TFormatRegistry.RegisterValidator is a class (static) method — it does not require calling .Instance first. The registry dictionary is class-level. Other class methods: UnregisterValidator, GetValidator, IsFormatRegistered, GetRegisteredFormats, ClearRegistry.