New types for identifier references
In SBML Level 2, there is data type for "a reference to an SBML object identifier". References to object identifiers and unit identifiers are of type SId and UnitSId, respectively, the same type that the identifiers themselves are. This was not a problem in the context of Level 2 models. However, in Level 3, to support such things as hierarchical model composition, references to identifiers will need to have extended syntax (most likely XPath syntax). In anticipation of this change, Level 3 Core will include new data types for identifier references. Within Level 3 Core, the identifier syntax and the syntax of references to identifiers will not actually change; the new types will act only as placeholders or hooks for SBML Level 3 packages to be able to extend the syntax of references.
Changes relative to Level 2
Two new types will be introduced, SIdRef and UnitSIdRef. Their value space in Level 3 Core will be identical to Level 2's SId and UnitSId, respectively; that is, both will have the following definition:
|letter||::=||'a' .. 'z', 'A' .. 'Z'|
|digit||::=||'0' .. '9'|
|idChar||::=||letter | digit | '_'|
|SId||::=||( letter | '_' ) idChar*|
All attributes that previously had type SId or UnitSId and referred to other identifiers in a model (i.e., attributes other than the
id attribute on an object) will be changed to SIdRef or UnitSIdRef, as appropriate. For example, in the definition of InitialAssignment, the data type of the attribute
symbol will change from SId to SIdRef.
This change will be effectively invisible to SBML models encoded using only Level 3 Core. Indeed, for software that only ever uses Level 2 and Level 3 Core, without any Level 3 packages, there is fundamentally no change necessary at the software level. This aspect of the models will look exactly the same.
The package for Hierarchical Model Composition in Level 3 is expected to be the first one to extend the value space of SIdRef and UnitSIdRef to be text strings in XPath syntax. It will do this by redefining the syntax of SIdRef and UnitSIdRef. They will still be strings of characters, but with different possible character values and different interpretation.