parent=Foo (#4903) — does ANY ancestor of expressId, walking upward
through spatial containment and aggregation to any depth via
collectSpatialAncestors (@ifc-lite/data, the single shared resolver),
have a Name the rule's op matches? Reuses matchStringAnyNone, the same
multi-valued convention material/classification rules use: an element
with NO ancestors — or none whose Name matches — satisfies neither a
positive nor a negative op (#4659). getNameOrUndefined, not getName,
so an ancestor with no Name at all is a real absent candidate (#4930).
parent=Foo(#4903) — does ANY ancestor ofexpressId, walking upward through spatial containment and aggregation to any depth viacollectSpatialAncestors(@ifc-lite/data, the single shared resolver), have a Name the rule's op matches? ReusesmatchStringAnyNone, the same multi-valued conventionmaterial/classificationrules use: an element with NO ancestors — or none whose Name matches — satisfies neither a positive nor a negative op (#4659).getNameOrUndefined, notgetName, so an ancestor with no Name at all is a real absent candidate (#4930).