declaration/definition
declare abstract? record record-type-name (extends record-type-name)?
((field field declaration)* | elsewhere)
You can use declare record to declare a record type.
Here is how you would declare a record type to hold a simple metadata record for a document:
declare record document-metadata-type
field string author
field string title
field string publisher
field integer year
field switch in-print initial {true}
Each field in the record is itself of a particular type and is declared
just as a local variable of that type would be declared,
substituting the word field for the word local.
Each field in a record is itself a shelf.
A record declaration by itself simply defines a record type. To create a record you must create a shelf of the record type.
A record can be declared as an extension of another record type,
using extends:
declare record book-metadata-type extends document-metadata-type
field string isbn-number
An extended record type inherits the fields of its base type.
A record can be declared abstract by prefixing
the keyword record with the keyword abstract.
An abstract record cannot be instantiated, but can only be extended.
The keyword elsewhere can be
used to make
the record name and some of the properties available without defining all of the record's properties.