ifc-schema — the IFC schema as data, not as 2,500 generated structs.
The decision
IfcOpenShell generates a class per IFC entity per schema version. That is a very large amount of code, and it must be regenerated for every schema release. This crate instead reads the normative EXPRESS files into tables and answers questions against them.
The evidence that this is the right call: IFC4x3 renames
IfcBuildingElement to IfcBuiltElement and drops IfcProxy and the whole
*StandardCase family. Generated types would fork the entire API surface;
a table just holds different rows.
What this crate is for
| Module | Role |
|---|---|
[version] |
Which schema a file declares |
[express] |
Parser for the official .exp files |
[entity] |
Entity descriptors: name, supertype, slots |
[attribute] |
Attribute descriptors and declared types |
[types] |
Defined types, enumerations, selects |
[registry] |
The assembled, queryable schema |
inheritance |
Supertype-chain walking |
Relationship to the model
ifc-model does not depend on this crate.
The model stores whatever a file contains, valid or not. The schema is what
you consult to interpret what was stored, and it is optional: a file whose
schema is unknown still parses, and its entities still round-trip.
use Schema;
let schema = from_express;
assert!;
assert_eq!;