Skip to main content

Crate ifc_validate

Crate ifc_validate 

Source
Expand description

ifc-validate – Schema and model validation: is this file actually legal IFC?

Split from parsing on purpose. A reader that rejects everything imperfect is useless on real data – roughly half of production files violate something – so parsing is permissive and validation is an explicit, separate pass.

§What a report means

let report = ifc_validate::validate(model, ifc_schema::ifc4());
if report.is_conformant() {
    // No *errors*. There may still be warnings, and there are certainly
    // rules this validator does not evaluate -- `report.summary()`
    // says how many.
}

The four severities are not a mood scale. Severity::Error means the file breaks a schema requirement; Severity::EvaluationError means an implemented rule applied to an instance but could not be decided for it; Severity::Warning means it is legal but will behave badly; Severity::Unsupported is a statement about this validator, not about the file. Errors and evaluation errors affect Report::is_conformant: a rule nobody could decide is not a rule that passed.

§What this crate deliberately does not do

It does not evaluate arbitrary EXPRESS WHERE expressions – there is no expression evaluator here. Rules that need one are registered as unsupported and reported, so a clean report never silently means “unchecked”. See where_rule::RULES.

It does not check aggregate bounds (LIST [3:?]), because the schema parser retains whether an attribute is an aggregate but not its bounds. Claiming otherwise would be worse than the gap.

It also does not derive INVERSE relationship semantics. A selected rule whose IFC2X3 form depends on an inverse is therefore reported unsupported, even when a later schema revision exposes equivalent direct attributes.

§Module map

ModuleRole
headerDeclared schema and implementation level
structureReferences, required slots, cardinality, unique ids
type_checkValues against their declared EXPRESS types
where_ruleNative rules, and honest reporting of the rest
reportFindings, paths, severities, summaries
errorWhy validation could not run

Re-exports§

pub use error::ValidateError;
pub use report::Finding;
pub use report::Path;
pub use report::Report;
pub use report::Severity;
pub use report::Summary;
pub use where_rule::Budget;

Modules§

error
Why validation could not run.
header
Header well-formedness and the schema a file declares.
report
Structured findings: severity, entity, rule, message.
structure
Structural conformance: references, slots, cardinality, uniqueness.
type_check
Type conformance: entity types, scalars, enumerations, selects.
where_rule
EXPRESS WHERE rules, and honesty about the ones not evaluated.

Functions§

validate
Validate a model against a schema with the default budget.
validate_declared
Validate against the schema the file itself declares.
validate_with
Validate under an explicit budget.