You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The current Relationship enum in overture-schema-system has 7 domain-specific members (BELONGS_TO, BOUNDARY_OF, CAPITAL_OF, CAPITALLED_BY, CHILD_OF, CONNECTS_TO, DESCENDANT_OF). This design has a few problems:
It conflates structural category with domain semantics.CAPITAL_OF and CAPITALLED_BY are specific to the divisions theme but live in the shared system package.
It doesn't scale. Every new kind of relationship across any theme requires adding a new enum member to the core system package.
It mixes coupling strengths. There's no way to distinguish a lifecycle-dependent structural relationship (building part → building) from a loose peer reference (segment → connector) at the type level.
Proposed change
Replace the 7 members with 4 abstract semantic types that describe coupling strength rather than domain-specific meaning:
AGGREGATION — grouping without lifecycle dependency
HIERARCHY — organizational/classificatory nesting
ASSOCIATION — peer-level reference
Domain-specific meaning (e.g., "capital_of", "boundary_of") moves to an optional role field on the Reference annotation, allowing themes to express their semantics without modifying the core enum.
The current
Relationshipenum inoverture-schema-systemhas 7 domain-specific members (BELONGS_TO,BOUNDARY_OF,CAPITAL_OF,CAPITALLED_BY,CHILD_OF,CONNECTS_TO,DESCENDANT_OF). This design has a few problems:CAPITAL_OFandCAPITALLED_BYare specific to the divisions theme but live in the shared system package.Proposed change
Replace the 7 members with 4 abstract semantic types that describe coupling strength rather than domain-specific meaning:
COMPOSITION— structural whole-part, lifecycle dependentAGGREGATION— grouping without lifecycle dependencyHIERARCHY— organizational/classificatory nestingASSOCIATION— peer-level referenceDomain-specific meaning (e.g., "capital_of", "boundary_of") moves to an optional
rolefield on theReferenceannotation, allowing themes to express their semantics without modifying the core enum.Motivation