More Detailed Summary of SBML
SBML can encode models consisting of entities (for example, molecular species) linked and modified by processes (for example, biochemical reactions). Here is an artificial example of a small set of biochemical reactions:
The symbols in square brackets (e.g., S1) represent concentrations of molecular species, the arrows represent reactions, and the formulas above the arrows represent the rates at which the reactions take place. (And while this example uses concentrations, it could equally have used other measures, such as the number of molecules of each chemical species.)
Broken down into its constituents, this model contains a number of components: reactant species, product species, reactions, reaction rates, and parameters in the rate expressions. To analyze or simulate this network, additional components must be made explicit, including compartments where the species are located, and units on the various quantities. Two important principles in SBML are that (1) models are decomposed into explicitly-labeled constituent elements, and (2) the representation deliberately does not cast the model directly into a set of differential equations or other specific interpretation of the model. This makes it easier for a software tool to interpret the model and translate the SBML form into whatever internal form the tool actually uses.
The components of an SBML model
The top level of an SBML Level 2 model definition consists of lists of these components, with every list being optional:
- Function definition
- A named mathematical function that may be used throughout the rest of a model.
- Unit definition
- A named definition of a new unit of measurement, or a redefinition of an existing SBML default unit.
- Compartment Type
- A type of location where reacting entities such as chemical substances may be located.
- Species type
- A type of entity that can participate in reactions. Common examples of species types include ions such as Ca2+, molecules such as glucose or ATP, etc., but there is no reason why other kinds of entities cannot be mapped to an SBML "species type".
- A well-stirred container of a particular type and finite size where SBML species may be located. A model may contain multiple compartments of the same compartment type. Every species in a model must be located in a compartment.
- A pool of entities of the same species type located in a specific compartment.
- A quantity with a symbolic name. In SBML, the term parameter is used in a generic sense to refer to named quantities regardless of whether they are constants or variables in a model. A parameter defined at the top level is global to a model. It is also possible to define parameters that are local to a single reaction.
- Initial Assignment
- A mathematical expression used to determine the initial conditions of a model.
- A mathematical expression added to the set of equations constructed based on the reactions defined in a model. Rules can be used to define how a variable's value can be calculated from other variables, or used to define the rate of change of a variable. The set of rules in a model can be used with the reaction rate equations to determine the behavior of the model with respect to time. The set of rules constrains the model for the entire duration of simulated time.
- A means of detecting out-of-bounds conditions during a dynamical simulation and optionally issuing diagnostic messages. Constraints are defined by an arbitrary mathematical expression computing a true/false value from model variables, parameters and constants.
- A statement describing some transformation, transport or binding process that can change the amount of one or more species. For example, a reaction may describe how certain entities (reactants) are transformed into certain other entities (products). Reactions have associated kinetic rate expressions describing how quickly they take place. In SBML, the rate expressions can be arbitrary mathematical functions.
- A statement describing an instantaneous, discontinuous change in a set of variables of any type (species quantity, compartment size or parameter value) when a triggering condition is satisfied.
Annotations and semantics
In addition to the elements above, another important feature of SBML is that every entity can have machine-readable annotations attached to it. These annotations can be used to express relationships between the entities in a given model and entities in external resources such as databases. A good example of the value of this is in BioModels Database, where every model is annotated and linked to relevant data resources such as publications, databases of compounds and pathways, controlled vocabularies, and more. With annotations, a model becomes more than simply a rendition of a mathematical construct—it becomes a semantically-enriched framework for communicating knowledge.
An example of a model represented in SBML
To make this discussion a little bit more concrete, here is an example of what a model looks like when it's represented in SBML. We use a simple enzymatic reaction:
Here is the text of the SBML (or more precisely, one way the model could be represented in SBML—there is some flexibility in SBML in precisely how a model is encoded):
<?xml version="1.0" encoding="UTF-8"?> <sbml level="2" version="3" xmlns="http://www.sbml.org/sbml/level2/version3"> <model name="EnzymaticReaction"> <listOfUnitDefinitions> <unitDefinition id="per_second"> <listOfUnits> <unit kind="second" exponent="-1"/> </listOfUnits> </unitDefinition> <unitDefinition id="litre_per_mole_per_second"> <listOfUnits> <unit kind="mole" exponent="-1"/> <unit kind="litre" exponent="1"/> <unit kind="second" exponent="-1"/> </listOfUnits> </unitDefinition> </listOfUnitDefinitions> <listOfCompartments> <compartment id="cytosol" size="1e-14"/> </listOfCompartments> <listOfSpecies> <species compartment="cytosol" id="ES" initialAmount="0" name="ES"/> <species compartment="cytosol" id="P" initialAmount="0" name="P"/> <species compartment="cytosol" id="S" initialAmount="1e-20" name="S"/> <species compartment="cytosol" id="E" initialAmount="5e-21" name="E"/> </listOfSpecies> <listOfReactions> <reaction id="veq"> <listOfReactants> <speciesReference species="E"/> <speciesReference species="S"/> </listOfReactants> <listOfProducts> <speciesReference species="ES"/> </listOfProducts> <kineticLaw> <math xmlns="http://www.w3.org/1998/Math/MathML"> <apply> <times/> <ci>cytosol</ci> <apply> <minus/> <apply> <times/> <ci>kon</ci> <ci>E</ci> <ci>S</ci> </apply> <apply> <times/> <ci>koff</ci> <ci>ES</ci> </apply> </apply> </apply> </math> <listOfParameters> <parameter id="kon" value="1000000" units="litre_per_mole_per_second"/> <parameter id="koff" value="0.2" units="per_second"/> </listOfParameters> </kineticLaw> </reaction> <reaction id="vcat" reversible="false"> <listOfReactants> <speciesReference species="ES"/> </listOfReactants> <listOfProducts> <speciesReference species="E"/> <speciesReference species="P"/> </listOfProducts> <kineticLaw> <math xmlns="http://www.w3.org/1998/Math/MathML"> <apply> <times/> <ci>cytosol</ci> <ci>kcat</ci> <ci>ES</ci> </apply> </math> <listOfParameters> <parameter id="kcat" value="0.1" units="per_second"/> </listOfParameters> </kineticLaw> </reaction> </listOfReactions> </model> </sbml>
In this example, the model has the identifier
EnzymaticReaction. The model contains one compartment (with identifier
cytosol), four species (with identifiers
E), and two reactions (
vcat). The elements in the
listOfProducts in each reaction refer to the names of elements listed in the
listOfSpecies. The correspondences between the various elements is explicitly stated by the
The model also features local parameter definitions in each reaction. In this case, the three parameters (
kcat) all have unique identifiers and they could also have just as easily been declared global parameters in the model. Local parameters frequently become more useful in larger models, where it may become tedious to assign unique identifiers for all the different parameters.
The really nitty gritty details
Beyond that, it is difficult to say more without beginning to repeat what is already in the SBML specification. So if you are interested in getting to know SBML really well, we point you there, as well as to the discussion forums where you can pose questions and get answers from the community.
And by the way, thank you for your interest in SBML!