LibSBML-4-beta introduced new constructors for SBML objects and removed
any previously available constructors. These constructors are of the form
Species(unsigned int level, unsigned int version, XMLNamespaces xmlns = 0);
The rationale behind these constructors was to allow each object to
clearly identify which level/version of SBML is intended and facilitate
the introduction of the L3 SBML with extensions.
At present the namespaces variable defaults to NULL since the core sbml
namespaces can be deduced from the level and version. However, it has
since been pointed out that identifying both level/version and namespace
is a duplication of information. It is possible to abstract the
level/version from the namespace.
So we have two options and would like your opinions:
1) leave the constructors as they are and check for mismatches between
level/version and namespaces
2) reduce the arguments to the constructors to be only namespaces -
which would no longer have a default value
In case 2 it would be necessary to declare the core sbml namespace but
libSBML would provide functions to facilitate this; e.g.
getL2V3Namespace()
getL2V4Namespace()
NOTE: using libSBML-4 it will be possible to create a complete model
using ONLY an SBMLDocument constructor and createXXX functions. This
completely eliminates the potential for mismatches between
levels/versions of different objects. [There were a couple of create
functions missing but this has been remedied :-) ]
We are also aware that we removed any constructors that allowed
variables to be set within the object on creation. In particular it was
possible to set id and name using a constructor. Obviously it would be
possible to implement versions of the new constructors to enable this
and thus we would be interested in feedback relating to the use of
constructors with additional variables. Unfortunately even if libSBML-4
implements these it will NOT reduce the need to change code that uses
libSBML-3 with these types of constructors to code compatible with
libSBML-4.