Everywhere the boolean truth value of cls.abstract is tested, the boolean truth value of cls.mixin is now also tested thus drives model behavior accordingly.
The one practical semantic difference remains(?) that abstract classes can only be present once in the schema within a single class hierarchy, whereas references to mixin definitions are defined in their own class hierarchy but may be injected multiple times into the regular class and slot hierarchies, as a values of the mixins property of a target class (or slot). The practical refinement of mixin behavior remains to be refined (in other code revisions hence PR's).
Tested patch for issue https://github.com/biolink/biolinkml/issues/320 which was inspired by Biolink Model issue https://github.com/biolink/biolink-model/issues/540. All relevant tests pass.
Everywhere the boolean truth value of
cls.abstract
is tested, the boolean truth value ofcls.mixin
is now also tested thus drives model behavior accordingly.The one practical semantic difference remains(?) that
abstract
classes can only be present once in the schema within a single class hierarchy, whereas references tomixin
definitions are defined in their own class hierarchy but may be injected multiple times into the regular class and slot hierarchies, as a values of themixins
property of a target class (or slot). The practical refinement ofmixin
behavior remains to be refined (in other code revisions hence PR's).