← Back to Knowledge Hub Module 7 → 7.5

7.5 Validating an IFC File Against an IDS: A Full Walkthrough


Introduction

The first lesson in this module drew a boundary: IDS checks whether specified information is present, correctly typed, and correctly located. It does not check what happens to that data once its presence is confirmed. Every lesson since has built toward showing that boundary in full, on one real file, checked completely. This is that walkthrough.

The File and the Specifications

A real Revit 2021 IFC2X3 structural project, 1,484 elements. Ten IDS specifications were run against it, covering rebar attribute presence, element naming across four categories, column material, column spatial placement, and footing quantities.

Full Results

Specification Elements Checked Result
Rebar NominalDiameter1,2521,252 PASS
Rebar CrossSectionArea1,2521,252 PASS
Rebar BarLength in Pset1,2520 PASS
Column Name9191 PASS
Column Material C25910 PASS
Column PartOf Storey9191 PASS
Beam Name5252 PASS
Slab Name4646 PASS
Footing Name1818 PASS
Footing NetVolume180 PASS

Seven of ten pass completely. Three fail completely, zero partial results anywhere in the run.

The Three Failures, Read Correctly

Two of these three are patterns already covered in this module, and reading them correctly here means recognising the pattern rather than re-diagnosing it from scratch. The BarLength failure is the Property-facet location error from the third lesson: in this IFC2X3 file, BarLength is a direct Attribute on IfcReinforcingBar, not a Property inside Pset_ReinforcingBarCommon. The specification was structurally correct and still returned zero, because it checked the wrong place. The Material failure is the exact-string-match case from the second lesson: the file's real value carries a dash, "Concrete, Cast-in-Place - C25", the specification's value doesn't, and IDS's exact-match design turns one character into a complete failure. Neither of these means the model is broken. Both mean the specifications, as written, don't match where or how this particular file's data is actually structured.

The third failure is different, and it's the one true positive in this run. Every one of the 18 footings in this file carries zero Base Quantities, NetVolume included. This is a documented Revit IFC2X3 exporter behaviour: foundation-level elements have historically not received quantity data through this export path regardless of export settings. Here, IDS is doing exactly what it exists to do. It found a real absence, forced it into view, and gave whoever produced this file a concrete, specific thing to fix in their export configuration.

What Seven Passes on the Rebar Specifications Actually Mean

This is the section the rest of the module has been building toward. All 1,252 reinforcing bars in this file carry a NominalDiameter. All 1,252 carry a CrossSectionArea. Both specifications pass completely, at full scale, across the entire rebar population in the file. By every measure this module has covered, this file's rebar data is IDS-compliant. Presence: confirmed. Correct type: confirmed. Correct location: confirmed, on both counts that were checked.

A separate, real reading of that same file's steel content, downstream of these checks, reported a total of 20,906 kg. The corrected figure, traced back through the same file's data, was 2,409.84 kg. A 767% error, on data that had just passed both rebar presence checks completely, at full population, with nothing partial about either result. Not because a diameter was missing. Not because a value was malformed. The data behind every bar was exactly where it needed to be, exactly the type it needed to be. What went wrong happened after presence was already confirmed, in how that confirmed, correctly-typed data was actually used to arrive at a number.

What This Run Actually Proves

Ten specifications, three failures, seven passes, and the single largest error connected to this file's rebar data, a 767% steel total error, doesn't appear anywhere in this table at all. That's not a gap in how the specifications were written. Every one of the ten did precisely what an IDS specification is built to do: check presence, type, and location, and report accurately on all three. The NominalDiameter and CrossSectionArea checks didn't fail to catch a downstream error. They were never designed to look for one. Checking whether a confirmed, correctly-typed, correctly-located value gets used correctly afterward is a different question entirely, one this whole module has been naming as IDS's boundary since its first lesson, and this run is that boundary made concrete, on one real file, checked in full.

Key Takeaways

  • A real ten-specification run against a real 1,484-element file: 7 passes, 3 fails, each failure traceable to a specific, understood cause, two structural (wrong facet location, exact-string mismatch), one a genuine data absence.
  • The footing NetVolume failure is IDS working exactly as intended: a real, documented exporter gap, caught, and turned into an actionable finding.
  • Complete, correct, full-population passes on rebar Attribute checks confirm presence and type across all 1,252 bars. They say nothing, and were never meant to say anything, about whether that data gets used correctly by whatever reads it afterward.
  • On this file, a 767% error in the reported steel total sat entirely downstream of two specifications that had both passed at full population. Presence and downstream use are different claims, and only one of them is what IDS was ever built to check.

Discuss this lesson

Comments use a free GitHub account — takes under a minute to create, and keeps discussions spam-free and permanently archived.