We're working on it!
In fact, RAPID-ML has experimental support for inheritance now, and it works in most respects, creating subtypes in generated code and Swagger-OpenAPI 2.0, using the RAPID-XChange Contract generator.
The extends keyword on a data structure declaration allows both single and multiple inheritance. Here's a single inheritance example:
structure Person taxpayerID : string lastName : string firstName : string otherNames : string* structure USCitizen extends Person stateOfResidence : string numDependents : int
RAPID-ML also supports a restrict keyword that can be used to specialize inherited properties, like this:
structure Person taxpayerID : string lastName : string firstName : string otherNames : string* structure USCitizen extends Person restrict taxpayerID: string! of length 9 stateOfResidence : string numDependents : int structure TaxFiling filingID : string! taxpayer : reference to Person! jurisdiction : string year : gYear period : int currency : string grossIncome : decimal taxLiability : decimal structure USTaxFiling extends TaxFiling restrict taxpayer : reference to USCitizen! restrict year : gYear! restrict period : int!
Here, we see a few different uses of restrict:
Primitive Type Constraints:
The USCitizen subtype restricts taxpayerID to a string with exactly 9 characters.
USTaxFiling restricts taxpayer to the USCitizen subtype.
USTaxFiling also restricts year and period to be required, by using the ! suffix after the data type.
As you can see, restrict can create a subclass that isn't substitutable using normal inheritance in a strongly-typed language like C# or Java. You would need to use something like generics to capture the pattern. There are other patterns we can apply, depending on the target language.
We allow this because these kinds of covariant, derived-by-restriction relationships are so common in the real world. And we want RAPID-ML's conceptual data modeling to be as natural and expressive as we can make it, even if we incur some extra complexity in mapping it to certain programming languages. We are exploring different ways to express restricted subtypes, and we will offer these as options in our RAPID-ML code generators.