Version: dev

validation_result

Stable type · Validation

Tier: stable · Kind: type · Topic: Validation

JuliaTypeScriptPythonRustGo
ValidationResultValidationResultValidationResultValidationResultValidationResult

Julia

struct ValidationResult
ValidationResult(is_valid::Bool, schema_errors::Vector{SchemaError}, structural_errors::Vector{StructuralError}, unit_warnings::Vector{UnitWarning})
ValidationResult(is_valid, schema_errors, structural_errors, unit_warnings)
ValidationResult(schema_errors::Vector{SchemaError}, structural_errors::Vector{StructuralError}; unit_warnings)
ValidationResult

Combined validation result containing schema errors, structural errors, unit warnings, and overall validation status.

The four-field shape (is_valid, schema_errors, structural_errors, unit_warnings) is pinned by ESM_COMPLIANCE_VALIDATION_MATRIX.md VALID-03-A.

unit_warnings mirrors the TS/Python/Go bindings’ ValidationResult shape: unit findings appear both here (as UnitWarning records) and as promoted unit_inconsistency entries in structural_errors. Unit warnings never affect is_valid on their own — the promoted structural errors do.

Source

Example (validate)

result = validate(doc)
@assert result isa ValidationResult
@assert result.is_valid

# A document that loads fine but uses a variable it never declares. Validation
# reports the problem in the result rather than throwing.
bad = validate_path(joinpath(FIXTURES, "invalid.esm"))
@assert !bad.is_valid
err = only(bad.structural_errors)
println(err.path, ": ", err.message)
@assert err.message == "Variable 'k' referenced in equation is not declared"
@assert err.path == "/models/Broken/equations/0/rhs"

From docs/api/examples/julia/documents.jl

TypeScript

interface ValidationResult {
    is_valid: boolean;
    schema_errors: ValidationError[];
    structural_errors: ValidationError[];
    unit_warnings: UnitWarning[];
}

Structured validation result

Source

Example (validate)

// A good document validates cleanly.
const good = validate(loadPath(fixture('decay.esm')))
assert.equal(good.is_valid, true)
assert.deepEqual(good.structural_errors, [])

// `validate` reports problems in its result; it does not throw. invalid.esm
// uses a variable `k` that its model never declares.
const bad = validateText(readFileSync(fixture('invalid.esm'), 'utf8'))
assert.equal(bad.is_valid, false)
assert.equal(bad.schema_errors.length, 0)
const [err] = bad.structural_errors
assert.equal(err.code, 'undefined_variable')
assert.equal(err.path, '/models/Broken/equations/0/rhs')
assert.match(err.message, /Variable "k" referenced in equation is not declared/)

// Loading a structurally invalid document still succeeds. Unit warnings found
// while loading go to `console.warn` unless you collect them yourself.
const warnings: UnitWarning[] = []
const broken = loadPath(fixture('invalid.esm'), { onUnitWarning: (w) => warnings.push(w) })
assert.equal(validate(broken).is_valid, false)
assert.match(warnings[0].message, /Unknown variable: k/)

// Text that is not JSON at all is a `ParseError`, thrown at load time.
assert.throws(() => loadString('{ not json'), ParseError)

From docs/api/examples/typescript/validate.ts

Python

class ValidationResult
ValidationResult(is_valid: bool, schema_errors: list[ValidationError], structural_errors: list[ValidationError], unit_warnings: list[UnitWarning] = None)

Represents the result of validation.

Source

Example (validate)

result = earthsci_ast.validate(doc)
assert result.is_valid
assert result.schema_errors == [] and result.structural_errors == []

# validate_path reports problems in the result; it does not raise.
bad = earthsci_ast.validate_path(FIXTURES / "invalid.esm")
assert not bad.is_valid
error = bad.structural_errors[0]
print(error.code, error.path, error.message)
assert error.code == "undefined_variable"
assert "'k'" in error.message

# Loading the same file raises, because loading validates too.
try:
    earthsci_ast.load_path(FIXTURES / "invalid.esm")
except earthsci_ast.SchemaValidationError as exc:
    assert "'k'" in str(exc)
else:
    raise AssertionError("loading invalid.esm should fail")

From docs/api/examples/python/documents.py

Rust

pub struct ValidationResult {
    pub schema_errors: Vec<SchemaError>,
    pub structural_errors: Vec<StructuralError>,
    pub unit_warnings: Vec<UnitWarning>,
    pub is_valid: bool,
}

impl ValidationResult { pub fn has_errors(&self) -> bool }

impl ValidationResult { pub fn errors(&self) -> Vec<StructuralError> }

Result of structural validation

Source · Rust docs

Go

type ValidationResult struct {
	SchemaErrors     []SchemaError     `json:"schema_errors"`
	StructuralErrors []StructuralError `json:"structural_errors"`
	UnitWarnings     []UnitWarning     `json:"unit_warnings"`
	IsValid          bool              `json:"is_valid"`
}

ValidationResult holds the result of validation per ESM Libraries Spec Section 3.4

Source · Go docs