— the global portal for all things SBML

Verification of required attributes and elements


All SBML components have a number of attributes, and in some cases subelements too. An attribute has a name and a value. An element refers to another type of component within SBML (e.g., a math element or a listOfXYZ element). Many attributes and elements are optional, but some are required. However, in libSBML up through version 3, object constructors do not check for required attributes; callers must know which attributes and elements are required or else rely on a full validation pass to check for mistakes. This arrangement is error-prone at best.

Example of the issue

Consider the following code;

  Model *m       = new Model(2, 4);
  Compartment *c = new Compartment(2, 4);
  Event *e       = new Event(2, 4);


The code above creates a model with a compartment and an event. No errors will be generated at any point. However, the model is invalid for three reasons:

  1. The compartment has no id.
  2. The event has no trigger.
  3. The event has no eventAssignments.

Other than performing a full validation of an SBMLDocument, libSBML version 3 does not provide any means of checking whether an object has all its required attributes and/or elements.



In order to facilitate the creation of valid SBML, libSBML version 4 includes two new methods on each SBase object:

  virtual bool hasRequiredAttributes();
  virtual bool hasRequiredElements();

These methods return true if the object has all the required attributes/elements, and they return false otherwise. The new addXXX functions use these methods to determine whether the object being added is valid, but they may also be useful to call directly.

Required attributes and elements

The table lists the required attributes and elements for each component.

Component Required Attributes Required Elements
Model - listOfCompartment (L1 only)
listOfSpecies (L1V1 only)
listOfReactions (L1V1 only)
FunctionDefinition id math
UnitDefinition id listOfUnits (L2 only)
Unit kind -
CompartmentType id -
SpeciesType id -
Compartment id -
Species id
initialAmount (L1 only)
CompartmentType id -
Parameter id
value (L1V1 only)
InitialAssignment symbol math
AlgebraicRule formula (L1 only) math (L2 only)
AssignmentRule variable math
RateRule variable math
CompartmentVolumeRule compartment
SpeciesConcentrationRule species
ParameterRule name
Constraint - math
Reaction id -
SpeciesReference species -
ModifierSpeciesReference species -
StoichiometryMath - math
KineticLaw formula (L1 only) math (L2 only)
Event - trigger
Trigger - math
Delay - math
EventAssignment variable math

Retrieved from ""

This page was last modified 23:31, 15 March 2009.

Please use our issue tracking system for any questions or suggestions about this website. This page was last modified 23:31, 15 March 2009.