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.