Repository navigation
openbim-step 0.10.0
Added
express::parseextracts the aggregate shape of every explicit
attribute:Attribute::aggregationlists its levels outermost first, each
anAggregationwith itsAggregateKind(LIST,SET,BAG,ARRAY),
lowerandupperBound(an integer,?, or an unevaluated
expression), whether its elements areUNIQUE, and whether anARRAY's
elements areOPTIONAL. Omitted bounds are recorded as[0:?], as
ISO 10303-11 defines them.EntityDef::inverses: the entity'sINVERSEattributes, each an
InverseAttributewith its name, targetentity,for_attributeas
written, optionalSET/BAGaggregation, and the supertype it
redeclaresforSELF\X.Name.EntityDef::unique_rules: the entity'sUNIQUErules, each a
UniqueRulewith its label (if any) and attribute names as written
(qualifiedSELF\X.Ykept).- Constructors for building declarations without struct literals:
ParsedSchema::new,TypeDef::new,WhereRule::new,
Redeclaration::new,Aggregation::new,InverseAttribute::new,
UniqueRule::new, andEntityDef::{abstract_, with_where_rule, with_inverse, with_unique_rule},Attribute::with_aggregation.
Checked on the IFC2X3 TC1, IFC4 ADD2 TC1 and IFC4X3 ADD2 schemas: 115/153/165
inverse attributes and 17/4/4 unique rules, equal to an independent count of
the schema text. Every other extracted field is unchanged on all three
schemas except the nested-list fix below.
Changed (breaking)
- Every declaration type in
expressis#[non_exhaustive]
(ParsedSchema,EntityDef,Attribute,TypeDef,TypeKind,
WhereRule,Redeclaration, and the new types), so extracting more of
the language later is not a breaking change. Code that built these with
struct literals uses the constructors instead; destructuring needs... - A nested aggregate's
Attribute::type_nameis its innermost element type:
CoordList : LIST [1:?] OF LIST [3:3] OF IfcLengthMeasurenow reports
IfcLengthMeasurewhere it reportedLIST, and the two levels are in
aggregation. This changes 11 attributes of IFC4 and 12 of IFC4X3. OPTIONALmakes an attribute optional only where it opens the
declaration;ARRAY [1:3] OF OPTIONAL Xmarks the elements
(Aggregation::optional_elements), not the attribute.