Currently, extension of a Vocabulary has to be done by creating a new instance of SCEVocabulary or a descendent, e.g. BKPMNVocabulary, that individually recreates the membership of the 'term' property of the vocabulary, including all the terms of the original vocabulary (say SCE RelationshipKinds) along with the required extension terms.
With small vocabularies, this works, but creates a static definition that will go out of date if the top-level standard (SCE) is re-issued with new terms in say SCE RelationshipKinds. Any extension of this done by exhaustive listing of the original terms will only capture those from the older version. Normally, the intention of extension is to obtain a resulting vocabulary consisting of your extension terms plus whatever is considered to be the 'core' (original) vocabulary today - which is usually different from its first publication.
With larger vocabularies, e.g. in the 100+ terms range, the approach is likely to be unwieldy and error-prone, as well as having the above problem.
I suggest that the requirements we have are:
- how to easily re-use an entire vocabulary, and extend it - recursively
- how to do so, such that if the re-used original is updated, the downstream extended versions automatically pick this up (via tooling updates etc)
- potentially, enable vocabulary extension with exclusion, e.g. include a vocabulary (50 terms), exclude two that don't make sense, and add 18 more.
- document not just Vocabulary but the method of extension, in the SCE spec.
Further requirements that could be considered:
- enable the IS-A relationship to be asserted in vocabularies. This allows specialised forms of existing terms to be defined within a vocabulary or an extension, not just now sibling terms. For example, one could imagine the term SCE RelationshipKinds::miscellaneous being specialised into various terms specific to some domain. Or Correlation being specialised into CausalCorrelation and SpuriousCorrelation.
- specialisation would allow the SCE 'Category' concept to be solved using just Vocabulary as well. See https://issues.omg.org/issues/lists/sdmn-ftf#issue-49088
- whether this Vocabulary modelling approach is intended to become an OMG pattern / guidance / standard...
A change proposal for all this would include:
- a way of defining a vocabulary that allows re-use of an entire Vocabulary without having to exhaustively identify all the original terms, plus add one or more? extensions, plus add exclusions.
- a way of asserting the IS-A relationship, i.e. TermA1 IS-A TermA. This should be possible within a single Vocabulary, and also from terms in an extension to those in an included Vocabulary.
Both of these are not too hard to do, but will create breaking changes in SCE, SDMN, BKPMN, and PPMN at least.
Finally, there is an alternative modelling pattern that John Butler has used in PPMN that specialises Vocabulary classes before defining instances. The effect of this is that a given Vocabulary can only contain (at runtime) exactly those terms defined for it, whereas the more generic pattern defined in SCE doesn't prevent wrong terms being included in a Vocabulary at runtime, because there is no static typing that prevents it. Both ways work, so a decision should be made on which pattern is preferred (or even that both could be used, with criteria given for why / when).