SBML.org — the global portal for all things SBML

Flux Balance Constraints Proposal (2012)

Contents

Proposal title

SBML Level 3 Package: Flux Balance Constraints ("fbc")

Proposal authors

Brett G. Olivier
Systems Bioinformatics
Vrije Universiteit Amsterdam
De Boelelaan 1085,1081 HV Amsterdam
The Netherlands

Life Sciences Group
Centrum voor Wiskunde en Informatica (CWI)
Science Park 123, NL-1098 XG, Amsterdam
The Netherlands
Email: b.g.olivier [at] vu [dot] nl

Frank T. Bergmann
California Institute of Technology
Control and Dynamical Systems
MC 139-74
Pasadena, CA 91125
Email: fbergman [at] caltech [dot] edu

Additional thanks

Herbert Sauro (UW), Neil Swainston (Manchester)
Keiran Smallbone (Manchester), Mike Hucka (Caltech)
And everyone else who has been involved in developing this proposal.

Proposal tracking number

Item 3154219 in the SBML issue tracking system.

Version information

Version number and date of public release

Version 3 on 15 July 2012.

URL for this version of the proposal

http://sbml.org/Community/Wiki/SBML_Level_3_Proposals/Flux_Balance_Constraints_Proposal_(2011)

URL for the previous versions of this proposal

Version 2 (March 2011) of this proposal:
http://sbml.org/Community/Wiki/SBML_Level_3_Proposals/Flux_Constraints_Proposal

Version 1 (February 2010) of this proposal:
http://precedings.nature.com/documents/4236/version/1

Introduction and motivation

Constraint based modelling is a widely used methodology used to analyse and study biological networks on both a small and whole organism (genome) scale. Typically these models are underdetermined and constraint based methods (e.g. linear, quadratic optimization) are used to optimise specific model properties. This is assumed to occur under a defined set of constraints (e.g. stoichiometric, metabolic) and bounds (e.g. thermodynamic, experimental and environmental) on the values that the solution fluxes can obtain.

Perhaps the most well known (and widely used) analysis method is Flux Balance Analysis[1] (FBA) where for a Genome Scale Reconstruction (GSR) model[2] a target flux is maximised (typically a flux to biomass) where other input/output fluxes have been bounded to simulate a selected growth environment.

As constraint based models are generally underdetermined, i.e. few or none of the kinetic rate equations and related parameters are known, it is crucial that a model definition includes the ability to define optimization parameters such as objective functions, flux bounds and constraints ... currently this is not possible in the Systems Biology Markup Language[3] (SBML) Level 2 or Level 3 core specification[4].

The question of how to encode constraint based (or historically FBA) models in SBML is not new. However, with the advances in the methods used to construct GSR scale models and the wider adoption of constraint based modelling in biotechnological/medical applications has led to a rapid increase in both the number of models being constructed and the tools used to analyse them.

Faced with such rapidly growing diversity, the need for a standardised description for the definition, exchange and annotation of constraint based models is vital. As the core model components (e.g. species, reactions, stoichiometry) can already be effectively described in SBML (with its significant community, software and tool support) it seems prudent to use it as a basis for such a description. In addition, the modularised extension mechanism now available in SBML Level 3 provides an ideal platform for an efficient implementation.

Background

Problems with current SBML approaches

While there is currently no official way of encoding constraint based models in SBML L2 there have been pragmatic approaches used by a variety of groups and applications. Perhaps the most widely used is that used by the COBRA toolbox[5] where the reaction network is defined as reactions and for e.g. the flux bounds as local parameters defined in a reaction. This relies (implicitly) on everyone using the same parameter names to describe e.g. the upper or lower bounds. In a similar way the objective function is indicated by a local parameter having a value of one (as such it is not clear how to deal with multiple objective functions or objective functions that may contain more than one flux). While currently the most widely used way of describing GSR/constraint based models, as is, it is not suitable for implementation in SBML Level 3.

Past work on this problem or similar topics

The problem of describing and annotating constraint based (or FBA) models in SBML has been discussed on various occasions:

A pre 2005 (and presumed to be unmaintained) SBML L2 annotation is also known to exist:

  • Metabolic flux model annotations details

Proposed syntax and semantics

Semantics

Here we describe the core elements of the proposed package which is summarized in the following UML diagram, namely, 'flux bounds' and 'objective functions'. The question of a specification for the proper annotation of a GSR model will be dealt with later in this document.

Base package UML diagram

listOfFluxBounds

A key feature of a steady-state or constraint based model is that reaction fluxes (rate at steady state) are bound within a defined interval, without knowledge of the reaction kinetics. This information can be derived from thermodynamic properties, experimentally determined etc. While the reaction is already an attribute of an SBML model, an object is required that represents these additional bounds. For this we define a list holding all the known flux bounds.

fluxBound

A fluxBound extends SBase by:

  • An attribute id of type SId, which represents the bound identity.
  • An attribute reaction of type SIdRef which refers to existing SBML reactions whose flux is to be bound.
  • An attribute operation which is either 'less', 'lessEqual', 'equal', 'greaterEqual' or 'greater' which describes the bound operation in terms if an (in)equality.
  • An attribute value of type double representing the numerical value of the bound.

Notes

  • In order to use rational bounds one could use an InitialAssignment on the id attribute of the bound.
  • Multiple constraints on a single reaction are allowed bearing in mind that order is irrelevant and the validity of multiple (possibly conflicting) bounds is left to the modeler/tool/developer.
  • There is potential for a bound to conflict with the reversible attribute on a reaction, e.g. a reaction is irreversible but has bounds –Infinity <= Jr <= Infinity. While in this particular case it may seem as if the reversible attribute should be authoritative the reverse case invalidates this as a general approach in that a reaction that has the attribute reversible set can also be bound such that it has a net forward/reverse flux (e.g. 0 <= Jr <= Infinity). Therefore, in the context of this package, flux bounds should be considered authoritative while it is left to the software implementation to deal with obvious inconsistencies.[6]

listOfObjectives

The objective function is a special class of reaction that occurs in a constraint based model. It in the broader context of constraint based modelling (beyond basic FBA) we anticipate that the need may arise to, potentially, define more than one objective function per model. However, this also implies that there should be a way to store an active objective function. Thus the listOfObjectives element has one (mandatory) attribute activeObjective of type SIdRef which refers to the SId of one element of type Objective.

objective

An objective represents a defined objective function and consists of the following attributes:

  • An attribute id of type SId, representing the id of this objective (mandatory as one should be able to activate/deactivate it.
  • An attribute type containing a string specifying whether a maximization or minimization of the objective is intended. Valid values are either maximize or minimize.
  • An objective always contains a listOfFluxes which contains one or more fluxes that are referenced by this objective function.

listOfFluxObjectives

An objective function contains a reference one (or a linear combination of more than one) flux with an associated weight, these are represented as a list of fluxObjectives.

fluxObjective

A fluxObjective has the following attributes:

  • An attribute reaction of type SIdRef referring to an SBML reaction.
  • An attribute coefficient containing a double value (default = 1).

Extension of existing SBML elements

Primarily for annotation purposes we considered extending the SBML Species element by reintroducing 'charge'.

  • Species attribute charge of type integer representing the charge of the molecule.

In existing Genome Scale Reconstructions the chemical formula of a species is stored in an overloaded SBML Species name attribute while charge is stored in the SBML Level 2 attribute charge (for readability I have omitted the compartment, initialConcentration and boundaryCondition attributes):

<species metaid="atp" id="atp" name="ATP_C10H12N5O13P3"
         compartment="Cytosol" charge="-4">

Here we proposed reintroducing charge as an attribute into the SBML Level 3 package as well as a new attribute chemicalFormula which led to the following representation:

<species metaid="atp" id="atp" name="ATP" compartment="Cytosol"
         fbc:chemicalFormula="C10H12N5O13P3" fbc:charge="-4">


Syntax

Here we provide an example of the L3 XML syntax. Please see a later section in this document for an implementation of this example as an SBML Level 2 compatible annotation.

<sbml xmlns="http://www.sbml.org/sbml/level3/version1/core"
  xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version1" 
  level="3" version="1" fbc:required="false">
<fbc:listOfFluxBounds>
  <fbc:fluxBound reaction="J0" fbc:operation="equal" fbc:value="10" />
  <fbc:fluxBound reaction="J1" fbc:operation="greaterEqual" fbc:value="-5" />
  <fbc:fluxBound reaction="J1" fbc:operation="less" fbc:value="5" />
</fbc:listOfFluxBounds>
<fbc:listOfObjectives activeObjective="obj1">
  <fbc:objective fbc:id="obj1" fbc:type="maximize">
    <fbc:listOfFluxes>
      <fbc:fluxObjective fbc:reaction="J2" fbc:coefficient="1" />
    </fbc:listOfFluxes>
  </fbc:objective>
  <fbc:objective fbc:id="obj2" fbc:type="minimize">
    <fbc:listOfFluxes>
      <fbc:fluxObjective fbc:reaction="J2" fbc:coefficient="-1" />
    </fbc:listOfFluxes>
  </fbc:objective>
  <fbc:objective fbc:id="obj3" fbc:type="maximize">
    <fbc:listOfFluxes>
      <fbc:fluxObjective fbc:reaction="J2" fbc:coefficient="1" />
      <fbc:fluxObjective fbc:reaction="J3" fbc:coefficient="1" />
    </fbc:listOfFluxes>
  </fbc:objective>
</fbc:listOfObjectives>

Package dependencies

The package as proposed here does not depend on any other SBML Level 3 packages.

Use-cases and examples

The general use case has been presented in the introduction to this document. However, at this point it may be useful to highlight a few examples of existing constraint based model resources where a new standard description may be immediately applied.

  • BiGG: a Biochemical Genetic and Genomic knowledgebase of large scale metabolic reconstructions[7] url
  • Model SEED:[8] a resource for the generation, optimization, curation, and analysis of genome-scale metabolic models url

Prototype implementations

There are currently three tools available that read and or write the format proposed in version 1 (2010) Flux Constraints Proposal. In order to fast-track testing, existing model translation and exchange, software support has been implemented as an SBML Level 2 annotation. In addition support for the current proposal is currently being implemented in libSBML 5

SBW FBA Module

The SBW Flux Balance tool[9] is a small application designed to perform Flux Balance analysis on small-ish SBML models, it will represent the SBML model graphically to facilitate the formulation of flux balance constraints and objectives. These can then be solved and displayed.

Pysces-CBM

The Pysces-CBM module is an extension for the PySCeS simulation software[10] that allows the interactive building, debugging, manipulation and analysis of GSR constraint based models. Analysis methods include FBA, FVA etc. An interactive web-based model construction and analysis service is also under development.

Command line Converter

A command line tool that converts models in the existing COBRA SBML dialect into SBML Level 2 with the Flux Balance Annotation. As a proof of concept, we are in the process of converting the existing BiGG database models.

LibSBML 5 Extension

An extension for LibSBML 5 exists, that allows this proposal used with all software that currently uses LibSBML. The source code and examples can be found in the:

libSBML fbc package SVN

It can simple be included into the libsbml 5 source tree and will then be available. It is tested for all language bindings: C++ / C# / Java / Python / Perl and Ruby.

Please contact the authors with questions and feedback.

Translation to SBML Level 2

While it is not possible to translate the concepts such as FluxBound and Objective in SBML Level 2 we have encoded the Flux Constraints package as a Level 2 annotation allowed us to implement prototype support in our software for development and testing purposes

Please note that after community discussions certain class and attribute names were changed from the original draft proposal presented here and used in this example.

Note that the L2 annotation uses the fba namespace whereas in L3 it is fbc

Example 1

<?xml version="1.0" encoding="utf-8"?>
<sbml xmlns="http://www.sbml.org/sbml/level2" level="2" version="1" >
 <model id="BranchMultipleCycle" name="BranchMultipleCycle">
   <annotation>
     <fba:fluxBalance xmlns:fba="http://www.sbml.org/sbml/level3/version1/fba/version1">
       <fba:listOfFluxBounds>
         <fba:fluxbound fba:reaction="J0" fba:operation="equal" fba:value="10" />
       </fba:listOfFluxBounds>
       <fba:listOfObjectives fba:activeObjective="obj1">
         <fba:objective id="obj1" fba:type="maximize">
           <fba:listOfFluxes>
              <fba:fluxObjective fba:reaction="J8" fba:coefficient="1" />
           </fba:listOfFluxes>
         </fba:objective>
       </fba:listOfObjectives>
     </fba:fluxBalance>
   </annotation>
   <listOfCompartments>
     <compartment id="compartment" size="1" />
   </listOfCompartments>
   <listOfSpecies>
     <species id="Node1" boundaryCondition="false" compartment="compartment" />
     <species id="Node2" boundaryCondition="false" compartment="compartment" />
     <species id="Node3" boundaryCondition="false" compartment="compartment" />
     <species id="Node4" boundaryCondition="false" compartment="compartment" />
     <species id="Node5" boundaryCondition="false" compartment="compartment" />
     <species id="Node6" boundaryCondition="false" compartment="compartment" />
     <species id="Node7" boundaryCondition="false" compartment="compartment" />
     <species id="Node8" boundaryCondition="false" compartment="compartment" />
     <species id="Node0" boundaryCondition="true"  compartment="compartment" />
     <species id="Node9" boundaryCondition="true"  compartment="compartment" />
   </listOfSpecies>
   <listOfReactions>
     <reaction id="J0" reversible="false">
       <listOfReactants>
         <speciesReference species="Node0" stoichiometry="1" />
       </listOfReactants>
       <listOfProducts>
         <speciesReference species="Node1" stoichiometry="1" />
       </listOfProducts>
     </reaction>
     <reaction id="J1" reversible="false">
       <listOfReactants>
         <speciesReference species="Node1" stoichiometry="1" />
       </listOfReactants>
       <listOfProducts>
         <speciesReference species="Node2" stoichiometry="1" />
       </listOfProducts>
     </reaction>
     <reaction id="J2" reversible="false">
       <listOfReactants>
         <speciesReference species="Node2" stoichiometry="1" />
       </listOfReactants>
       <listOfProducts>
         <speciesReference species="Node3" stoichiometry="1" />
       </listOfProducts>
     </reaction>
     <reaction id="J3" reversible="false">
       <listOfReactants>
         <speciesReference species="Node1" stoichiometry="1" />
       </listOfReactants>
       <listOfProducts>
         <speciesReference species="Node4" stoichiometry="1" />
       </listOfProducts>
     </reaction>
     <reaction id="J4" reversible="false">
       <listOfReactants>
         <speciesReference species="Node4" stoichiometry="1" />
       </listOfReactants>
       <listOfProducts>
         <speciesReference species="Node3" stoichiometry="1" />
       </listOfProducts>
     </reaction>
     <reaction id="J5" reversible="false">
       <listOfReactants>
         <speciesReference species="Node3" stoichiometry="1" />
       </listOfReactants>
       <listOfProducts>
         <speciesReference species="Node5" stoichiometry="1" />
       </listOfProducts>
     </reaction>
     <reaction id="J6" reversible="false">
       <listOfReactants>
         <speciesReference species="Node5" stoichiometry="1" />
       </listOfReactants>
       <listOfProducts>
         <speciesReference species="Node6" stoichiometry="1" />
       </listOfProducts>
     </reaction>
     <reaction id="J7" reversible="false">
       <listOfReactants>
         <speciesReference species="Node6" stoichiometry="1" />
       </listOfReactants>
       <listOfProducts>
         <speciesReference species="Node7" stoichiometry="1" />
       </listOfProducts>
     </reaction>
     <reaction id="J8" reversible="false">
       <listOfReactants>
         <speciesReference species="Node5" stoichiometry="1" />
       </listOfReactants>
       <listOfProducts>
         <speciesReference species="Node8" stoichiometry="1" />
       </listOfProducts>
     </reaction>
     <reaction id="J9" reversible="false">
       <listOfReactants>
         <speciesReference species="Node8" stoichiometry="1" />
       </listOfReactants>
       <listOfProducts>
         <speciesReference species="Node7" stoichiometry="1" />
       </listOfProducts>
     </reaction>
     <reaction id="J10" reversible="false">
       <listOfReactants>
         <speciesReference species="Node7" stoichiometry="1" />
       </listOfReactants>
       <listOfProducts>
         <speciesReference species="Node9" stoichiometry="1" />
       </listOfProducts>
     </reaction>
   </listOfReactions>
 </model>
</sbml>

Open questions and issues related to the FBC package

The following topics are noted here as potential issues that may be considered for future revisions of this proposal.

Annotation of Genome Scale Reconstructions

So far the elements described in this document enable us to describe the structure of a constraint based model in a relatively compact way. However, in practice we have observed that much of the information that is required to really make use of GSR models is actually a question of annotation. While beyond the scope of the original specification we feel that it is important that a practical annotation scheme, capable of encoding the information contained in existing GSR/constraint based models, is developed in (or alongside) this proposal.

Before moving on to the proposal let me illustrate the type of annotation that is currently stored in the COBRA SBML dialect (currently one of the most widely used formats for GSR model exchange). The following XML fragment is taken from a reaction stored in the BiGG database and illustrates the type of annotation that is usually associated with a GSR model:

<reaction id="R_ACGAptspp" name="N-Acetyl-D-glucosamine transport via
              PEP:Pyr PTS  (periplasm)" reversible="false">
<notes>
 <html:p>Abbreviation: R_ACGAptspp</html:p>
 <html:p>Synonyms: _0</html:p>
 <html:p>SUBSYSTEM: Transport, Inner Membrane</html:p>
 <html:p>Equation: acgam[p] + pep[c] --> acgam6p[c] + pyr[c]</html:p>
 <html:p>Confidence Level: 4</html:p>
 <html:p>on Saier page, TC#: 4.A.1.1.2</html:p>
 <html:p>genes:</html:p>
 <html:p>LOCUS:b0679#ABBREVIATION:nagE#ECNUMBERS:2.7.1.69#</html:p>
 <html:p>LOCUS:b1101#ABBREVIATION:ptsG#ECNUMBERS:2.7.1.69#</html:p>
 <html:p>LOCUS:b2415#ABBREVIATION:ptsH#</html:p>
 <html:p>LOCUS:b2416#ABBREVIATION:ptsI#ECNUMBERS:2.7.3.9#</html:p>
 <html:p>LOCUS:b2417#ABBREVIATION:crr#ECNUMBERS:2.7.1.69#</html:p>
 <html:p>proteins:</html:p>
 <html:p>NAME:Hpr protein involved in PTS transport systems#ABBREVIATION:PtsH#</html:p>
 <html:p>NAME:Enzyme I from PTS transport systems#ABBREVIATION:PtsI#</html:p>
 <html:p>NAME:PTS, Glucose/Trehalose/Maltose IIA#ABBREVIATION:Crr#</html:p>
 <html:p>NAME:PTS, glucose IIBC#ABBREVIATION:PtsG#</html:p>
 <html:p>NAME:PTS, N-acetylglucosamine IIABC#ABBREVIATION:NagE#</html:p>
 <html:p>GENE ASSOCIATION: (b2415) and (b2417) and (b2416) and (b1101) or
                           (b2415) and (b0679) and (b2416)</html:p>
</notes>
</reaction>

The bold text highlights some useful meta-information namely:

* subsystem: the pathway that the reaction is located in
* confidence level: the curation level of the enzyme
* EC number: enzyme classification
* gene locus or id: the identity of the genes coding for proteins protein subunits
* gene association: the gene(s) which encode for the protein (sub-units)

While subsystem, confidence level, EC number and gene id can be dealt with using existing annotation mechanisms there is a problem with 'gene association' as it contains logical relations between model entities. While the genes themselves can be defined as an SBML species (with proper associated annotation) capturing (possible combinations of) AND and OR is non-trivial. Unfortunately, it is also vital for gene deletion or "knockout" studies which are regularly performed on GSR models.

In the following section we show our initial proposal for dealing with these relations

Gene association

In order to capture the GENE ASSOCIATION information encoded in current GSR models we have proposed the following mechanism which can possibly be used to represents what is essentially phenomenological association as an annotation. In this case a gene represents the final (transcribed/translated/post-translational) protein product of a gene which forms a component in an enzyme (represented as a reaction which can carry a flux):

<listOfGeneAssociations>
 <geneAssociation id="ga1" reaction="R_ACGAptspp">
   <or>
     <and>
      <gene>b2415</gene>
      <gene>b2417</gene>
      <gene>b2416</gene>
      <gene>b1101</gene>
     </and>
     <and>
      <gene>b2415</gene>
      <gene>b0679</gene>
      <gene>b2416</gene>
     </and>
   </or>
 </geneAssociation>
</listOfGeneAssociations>

References

  1. Orth JD, Thiele I, Palsson BØ. (2010) What is flux balance analysis? Nat Biotechnol. 28(3):245-8
  2. Oberhardt MA, Palsson BØ, Papin JA. (2009) Applications of genome-scale metabolic reconstructions, Mol Syst Biol. 5:320
  3. Hucka M, Finney A, Sauro HM, Bolouri H, Doyle JC, Kitano H, Arkin AP, Bornstein BJ et al. The systems biology markup language (SBML): a medium for representation and exchange of biochemical network models Bioinformatics 19(4):524-31
  4. The Systems Biology Markup Language (SBML): Language Specification for Level 3 Version 1 Core
  5. Becker SA, Feist AM, Mo ML, Hannum G, Palsson BØ, Herrgard MJ., (2007) Quantitative prediction of cellular metabolism with constraint-based models: the COBRA Toolbox Nat Protoc., 2(3):727-38
  6. Thanks to Neil Swainston for raising this issue.
  7. Schellenberger J, Park JO, Conrad TM, Palsson BØ. (2010) BiGG: a Biochemical Genetic and Genomic knowledgebase of large scale metabolic reconstructions BMC Bioinformatics, 11:213
  8. Henry CS, DeJongh M, Best AA, Frybarger PM, Linsay B, Stevens RL. (2010) High-throughput generation, optimization and analysis of genome-scale metabolic models Nat Biotechnol. 28(9):977-82
  9. Hucka M, Finney A, Sauro HM, Bolouri H, Doyle J, Kitano H. (2002) The ERATO Systems Biology Workbench: enabling interaction and exchange between software tools for computational biology Pac Symp Biocomput. 450-61.
  10. Olivier BG, Rohwer JM, Hofmeyr JH (2005) Modelling cellular systems with PySCeS Bioinformatics 21(4):560-1

Appendix

Example 1: basic structure

A simple constraint based model encoded as an SBML Level 2 annotation:

<?xml version="1.0" encoding="utf-8"?> 
<sbml xmlns="http://www.sbml.org/sbml/level2" level="2" version="1" > 
<model id="BranchMultipleCycle" name="BranchMultipleCycle"> 
 <annotation> 
  <fba:fluxBalance xmlns:fba="http://www.sbml.org/sbml/level3/version1/fba/version1"> 
   <fba:listOfFluxBounds> 
    <fba:fluxbound fba:reaction="J0" fba:operation="equal" fba:value="10" /> 
   </fba:listOfFluxBounds> 
   <fba:listOfObjectives fba:activeObjective="obj1"> 
    <fba:objective id="obj1" fba:type="maximize"> 
     <fba:listOfFluxes> 
      <fba:fluxObjective fba:reaction="J8" fba:coefficient="1" /> 
     </fba:listOfFluxes> 
    </fba:objective> 
   </fba:listOfObjectives> 
  </fba:fluxBalance> 
 </annotation> 
 <listOfCompartments> 
  <compartment id="compartment" size="1" /> 
 </listOfCompartments> 
 <listOfSpecies> 
  <species id="Node1" boundaryCondition="false" compartment="compartment" /> 
  <species id="Node2" boundaryCondition="false" compartment="compartment" /> 
  <species id="Node3" boundaryCondition="false" compartment="compartment" /> 
  <species id="Node4" boundaryCondition="false" compartment="compartment" /> 
  <species id="Node5" boundaryCondition="false" compartment="compartment" /> 
  <species id="Node6" boundaryCondition="false" compartment="compartment" /> 
  <species id="Node7" boundaryCondition="false" compartment="compartment" /> 
  <species id="Node8" boundaryCondition="false" compartment="compartment" /> 
  <species id="Node0" boundaryCondition="true"  compartment="compartment" /> 
  <species id="Node9" boundaryCondition="true"  compartment="compartment" /> 
 </listOfSpecies> 
 <listOfReactions> 
  <reaction id="J0" reversible="false"> 
   <listOfReactants> 
    <speciesReference species="Node0" stoichiometry="1" /> 
   </listOfReactants> 
   <listOfProducts> 
    <speciesReference species="Node1" stoichiometry="1" /> 
   </listOfProducts> 
  </reaction> 
  <reaction id="J1" reversible="false"> 
   <listOfReactants> 
    <speciesReference species="Node1" stoichiometry="1" /> 
   </listOfReactants> 
   <listOfProducts> 
    <speciesReference species="Node2" stoichiometry="1" /> 
   </listOfProducts> 
  </reaction> 
  <reaction id="J2" reversible="false"> 
   <listOfReactants> 
    <speciesReference species="Node2" stoichiometry="1" /> 
   </listOfReactants> 
   <listOfProducts> 
    <speciesReference species="Node3" stoichiometry="1" /> 
   </listOfProducts> 
  </reaction> 
  <reaction id="J3" reversible="false"> 
   <listOfReactants> 
    <speciesReference species="Node1" stoichiometry="1" /> 
   </listOfReactants> 
   <listOfProducts> 
    <speciesReference species="Node4" stoichiometry="1" /> 
   </listOfProducts> 
  </reaction> 
  <reaction id="J4" reversible="false"> 
   <listOfReactants> 
    <speciesReference species="Node4" stoichiometry="1" /> 
   </listOfReactants> 
   <listOfProducts> 
    <speciesReference species="Node3" stoichiometry="1" /> 
   </listOfProducts> 
  </reaction> 
  <reaction id="J5" reversible="false"> 
   <listOfReactants> 
    <speciesReference species="Node3" stoichiometry="1" /> 
   </listOfReactants> 
   <listOfProducts> 
    <speciesReference species="Node5" stoichiometry="1" /> 
   </listOfProducts> 
  </reaction> 
  <reaction id="J6" reversible="false"> 
   <listOfReactants> 
    <speciesReference species="Node5" stoichiometry="1" /> 
   </listOfReactants> 
   <listOfProducts> 
    <speciesReference species="Node6" stoichiometry="1" /> 
   </listOfProducts> 
  </reaction> 
  <reaction id="J7" reversible="false"> 
   <listOfReactants> 
    <speciesReference species="Node6" stoichiometry="1" /> 
   </listOfReactants> 
   <listOfProducts> 
    <speciesReference species="Node7" stoichiometry="1" /> 
   </listOfProducts> 
  </reaction> 
  <reaction id="J8" reversible="false"> 
   <listOfReactants> 
    <speciesReference species="Node5" stoichiometry="1" /> 
   </listOfReactants> 
   <listOfProducts> 
    <speciesReference species="Node8" stoichiometry="1" /> 
   </listOfProducts> 
  </reaction> 
  <reaction id="J9" reversible="false"> 
   <listOfReactants> 
    <speciesReference species="Node8" stoichiometry="1" /> 
   </listOfReactants> 
   <listOfProducts> 
    <speciesReference species="Node7" stoichiometry="1" /> 
   </listOfProducts> 
  </reaction> 
  <reaction id="J10" reversible="false"> 
   <listOfReactants> 
    <speciesReference species="Node7" stoichiometry="1" /> 
   </listOfReactants> 
   <listOfProducts> 
    <speciesReference species="Node9" stoichiometry="1" /> 
   </listOfProducts> 
  </reaction> 
 </listOfReactions> 
</model> 
</sbml>

Example 2: annotation

A constraint based model (with annotation) encoded as an SBML Level 2 annotation:

<?xml version="1.0" encoding="utf-8"?>
<sbml xmlns="http://www.sbml.org/sbml/level2/version4" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/" level="2" version="4">
<model name="format_example_v2">
 <listOfUnitDefinitions>
  <unitDefinition id="mmol_per_gDW_per_hr">
   <listOfUnits>
    <unit kind="mole" scale="-3" multiplier="1" offset="0" />
    <unit kind="gram" exponent="-1" multiplier="1" offset="0" />
    <unit kind="second" exponent="-1" multiplier="0.00027777" offset="0" />
   </listOfUnits>
  </unitDefinition>
 </listOfUnitDefinitions>
 <annotation>
  <fba:fluxBalance xmlns:fba="http://www.sbml.org/sbml/level3/version1/fba/version1">
   <fba:listOfFluxBounds>
    <fba:fluxBound id="fb1" fba:reaction="Glc_in" fba:operation="lessEqual" fba:value="10" />
    <fba:fluxBound id="fb2" fba:reaction="R_HEX1" fba:operation="greaterEqual" fba:value="0" />
    <fba:fluxBound id="fb3" fba:reaction="R_PFK" fba:operation="greaterEqual" fba:value="0" />
    <fba:fluxBound id="fb4" fba:reaction="R_PFK" fba:operation="lessEqual" fba:value="1000" />
   </fba:listOfFluxBounds>
   <fba:listOfObjectives fba:activeObjective="ObjectiveFunction1">
    <fba:objective id="ObjectiveFunction1" fba:type="maximize">
     <fba:listOfFluxes>
      <fba:fluxObjective fba:reaction="R_PFK" fba:coefficient="1" />
     </fba:listOfFluxes>
    </fba:objective>
   </fba:listOfObjectives>
   <fba:listOfGeneAssociations>
    <fba:geneAssociation id="ga1" fba:reaction="R_HEX1">
      < ci > b2388 <  / ci > 
    </fba:geneAssociation>
    <fba:geneAssociation id="ga2" fba:reaction="R_PGI">
      < ci > b4025 <  / ci > 
    </fba:geneAssociation>
    <fba:geneAssociation id="ga3" fba:reaction="R_PFK">
      < apply >  < or /  >  < ci > b3916 <  / ci >  < ci > b1723 <  / ci >  <  / apply > 
    </fba:geneAssociation>
   </fba:listOfGeneAssociations>
   <fba:listOfGeneAssociations>
    <fba:geneAssociation id="ga1" fba:reaction="R_HEX1">
     <fba:association>
      <fba:gene>b2388</fba:gene>
     </fba:association>
    </fba:geneAssociation>    
   
    <fba:geneAssociation id="ga2" fba:reaction="R_PGI">
     <fba:association>
      <fba:gene>b4025</fba:gene>
     </fba:association>
    </fba:geneAssociation>
   
    <fba:geneAssociation id="ga3" fba:reaction="R_PFK">
     <fba:association>
      <fba:and>
       <fba:gene>b3916</fba:gene>
       <fba:gene>b1723</fba:gene>
      </fba:and>
     </fba:association>
    </fba:geneAssociation>
   </fba:listOfGeneAssociations>
  </fba:fluxBalance>
 </annotation>
 <listOfCompartments>
  <compartment id="Cytosol" outside="Extraorganism" size="1" />
  <compartment id="Extraorganism" size="1" />
 </listOfCompartments>
 <listOfSpecies>
  <species metaid="glc_ex" id="glc_ex" name="D-Glucose_C6H12O6" compartment="Extraorganism" initialConcentration="1" boundaryCondition="true" charge="0">
   <annotation>
    <rdf:RDF>
     <rdf:Description rdf:about="#glc_ex">
      <bqbiol:is>
       <rdf:Bag>
        <rdf:li rdf:resource="urn:miriam:obo.chebi:CHEBI%3A17634"/>
       </rdf:Bag>
      </bqbiol:is>
     </rdf:Description>
    </rdf:RDF>    
   </annotation>
  </species>
  <species metaid="glc" id="glc" name="D-Glucose_C6H12O6" compartment="Cytosol" initialConcentration="0" charge="0">
   <annotation>
    <rdf:RDF>
     <rdf:Description rdf:about="#glc">
      <bqbiol:is>
       <rdf:Bag>
        <rdf:li rdf:resource="urn:miriam:obo.chebi:CHEBI%3A17634"/>
       </rdf:Bag>
      </bqbiol:is>
     </rdf:Description>
    </rdf:RDF>    
   </annotation>
  </species>
  <species metaid="g6p" id="g6p" name="D-Glucose 6-phosphate_C6H11O9P" compartment="Cytosol" initialConcentration="0" charge="-2">
   <annotation>
    <rdf:RDF>
     <rdf:Description rdf:about="#g6p">
      <bqbiol:is>
       <rdf:Bag>
        <rdf:li rdf:resource="urn:miriam:obo.chebi:CHEBI%3A17719"/>
       </rdf:Bag>
      </bqbiol:is>
     </rdf:Description>
    </rdf:RDF>    
   </annotation>
  </species>
  <species metaid="f6p" id="f6p" name="D-Fructose 6-phosphate_C6H11O9P" compartment="Cytosol" initialConcentration="0" charge="-2">
   <annotation>
    <rdf:RDF>
     <rdf:Description rdf:about="#f6p">
      <bqbiol:is>
       <rdf:Bag>
        <rdf:li rdf:resource="urn:miriam:obo.chebi:CHEBI%3A15946"/>
       </rdf:Bag>
      </bqbiol:is>
     </rdf:Description>
    </rdf:RDF>    
   </annotation>
  </species>
  <species metaid="fdp" id="fdp" name="D-Fructose 1,6-bisphosphate_C6H10O12P2" compartment="Cytosol" initialConcentration="0" charge="-4">
   <annotation>
    <rdf:RDF>
     <rdf:Description rdf:about="#fdp">
      <bqbiol:is>
       <rdf:Bag>
        <rdf:li rdf:resource="urn:miriam:obo.chebi:CHEBI%3A16905"/>
       </rdf:Bag>
      </bqbiol:is>
     </rdf:Description>
    </rdf:RDF>    
   </annotation>
  </species>
  <species metaid="fdp_ex" id="fdp_ex" name="D-Fructose 1,6-bisphosphate_C6H10O12P2" compartment="Extraorganism" initialConcentration="0.1" boundaryCondition="true" charge="-4">
   <annotation>
    <rdf:RDF>
     <rdf:Description rdf:about="#fdp_ex">
      <bqbiol:is>
       <rdf:Bag>
        <rdf:li rdf:resource="urn:miriam:obo.chebi:CHEBI%3A16905"/>
       </rdf:Bag>
      </bqbiol:is>
     </rdf:Description>
    </rdf:RDF>    
   </annotation>
  </species>
  <species metaid="atp" id="atp" name="ATP_C10H12N5O13P3" compartment="Cytosol" initialConcentration="1" boundaryCondition="true" charge="-4">
   <annotation>
    <rdf:RDF>
     <rdf:Description rdf:about="#atp">
      <bqbiol:is>
       <rdf:Bag>
        <rdf:li rdf:resource="urn:miriam:obo.chebi:CHEBI%3A30616"/>
       </rdf:Bag>
      </bqbiol:is>
     </rdf:Description>
    </rdf:RDF>    
   </annotation>
  </species>
  <species metaid="adp" id="adp" name="ADP_C10H12N5O10P2" compartment="Cytosol" initialConcentration="0.1" boundaryCondition="true" charge="-3">
   <annotation>
    <rdf:RDF>
     <rdf:Description rdf:about="#adp">
      <bqbiol:is>
       <rdf:Bag>
        <rdf:li rdf:resource="urn:miriam:obo.chebi:CHEBI%3A16761"/>
       </rdf:Bag>
      </bqbiol:is>
     </rdf:Description>
    </rdf:RDF>    
   </annotation>
  </species>
  <species id="b2388" name="gene b2388" compartment="Cytosol" boundaryCondition="true">
   <annotation>
     <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
          xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
      <rdf:Description rdf:about="#b2388">  
        <bqbiol:is>  
        <rdf:Bag>  
         <rdf:li rdf:resource="urn:miriam:kegg.genes:eco:b2388"/>  
        </rdf:Bag>  
       </bqbiol:is>  
       </rdf:Description>  
     </rdf:RDF>  
   </annotation>
  </species>
  <species id="b4025" name="gene b4025" compartment="Cytosol" boundaryCondition="true">
   <annotation>
     <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
          xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
      <rdf:Description rdf:about="#b2388">  
        <bqbiol:is>  
        <rdf:Bag>  
         <rdf:li rdf:resource="urn:miriam:kegg.genes:eco:b4025"/>  
        </rdf:Bag>  
       </bqbiol:is>  
       </rdf:Description>  
     </rdf:RDF>    
   </annotation>
  </species>
  <species id="b3916" name="gene b3916" compartment="Cytosol" boundaryCondition="true">
   <annotation>
     <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
          xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
      <rdf:Description rdf:about="#b2388">  
        <bqbiol:is>  
        <rdf:Bag>  
         <rdf:li rdf:resource="urn:miriam:kegg.genes:eco:b3916"/>  
        </rdf:Bag>  
       </bqbiol:is>  
       </rdf:Description>  
     </rdf:RDF>    
   </annotation>
  </species>
  <species id="b1723" name="gene b1723" compartment="Cytosol" boundaryCondition="true">
   <annotation>
     <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
          xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
      <rdf:Description rdf:about="#b1723">  
        <bqbiol:is>  
        <rdf:Bag>  
         <rdf:li rdf:resource="urn:miriam:kegg.genes:eco:b1723"/>  
        </rdf:Bag>  
       </bqbiol:is>  
       </rdf:Description>  
     </rdf:RDF>    
   </annotation>
  </species>
 </listOfSpecies>
 
 <listOfReactions>
  <reaction metaid="Glc_in" id="Glc_in" name="Glc transport into the cell">
   <listOfReactants>
    <speciesReference species="glc_ex" />
   </listOfReactants>
   <listOfProducts>
    <speciesReference species="glc" />
   </listOfProducts>
  </reaction>
  <reaction metaid="R_HEX1" id="R_HEX1" name="hexokinase (D-glucose:ATP)" reversible="false">
   <notes>
     <html:p>Abbreviation: R_HEX1</html:p>
     <html:p>Synonsyms: _1</html:p>
     <html:p>EC Number: 2.7.1.1</html:p>
     <html:p>SUBSYSTEM: Glycolysis/Gluconeogenesis</html:p>
     <html:p>Equation: [c] : atp + glc-D > adp + g6p + h</html:p>
     <html:p>Confidence Level: 0</html:p>
     <html:p>D-Glucose, D-mannose, D-fructose, sorbitol and D-glucosamine can act as acceptors; ITP and dATP can act as donors. The liver isoenzyme has sometimes been called glucokinase. Reaction also associated with EC 2.7.1.2</html:p>
     <html:p>genes:</html:p>
     <html:p>LOCUS:b2388#ABBREVIATION:glk#ECNUMBERS:2.7.1.2#</html:p>
     <html:p>proteins:</html:p>
     <html:p>NAME:Glucokinase#ABBREVIATION:Glk#</html:p>
     <html:p>GENE ASSOCIATION: (b2388)</html:p>
   </notes>
   <annotation>
     <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
          xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
      <rdf:Description rdf:about="#R_HEX1">  
        <bqbiol:is>  
        <rdf:Bag>  
         <rdf:li rdf:resource="all:relevant:annotation:stuff"/>  
        </rdf:Bag>  
       </bqbiol:is>  
       </rdf:Description>  
     </rdf:RDF>  
   </annotation>
   <listOfReactants>
    <speciesReference species="atp" />
    <speciesReference species="glc" />
   </listOfReactants>
   <listOfProducts>
    <speciesReference species="g6p" />
    <speciesReference species="adp" />
   </listOfProducts>
  </reaction>
  <reaction metaid="R_PGI" id="R_PGI" name="glucose-6-phosphate isomerase">
   <notes>
     <html:p>Abbreviation: R_PGI</html:p>
     <html:p>Synonyms: _0</html:p>
     <html:p>EC Number: 5.3.1.9</html:p>
     <html:p>SUBSYSTEM: Glycolysis/Gluconeogenesis</html:p>
     <html:p>Equation: [c] : g6p <==> f6p</html:p>
     <html:p>Confidence Level: 0</html:p>
     <html:p>genes:</html:p>
     <html:p>LOCUS:b4025#ABBREVIATION:pgi#ECNUMBERS:5.3.1.9#</html:p>
     <html:p>proteins:</html:p>
     <html:p>NAME:glucose-6-phosphate isomerase#ABBREVIATION:Pgi#</html:p>
     <html:p>GENE ASSOCIATION: (b4025)</html:p>
   </notes>
   <listOfReactants>
    <speciesReference species="g6p" />
   </listOfReactants>
   <listOfProducts>
    <speciesReference species="f6p" />
   </listOfProducts>
  </reaction>
  <reaction metaid="R_PFK" id="R_PFK" name="phosphofructokinase" reversible="false">
   <notes>
     <html:p>Abbreviation: R_PFK</html:p>
     <html:p>Synonyms: _0</html:p>
     <html:p>EC Number: 2.7.1.11</html:p>
     <html:p>SUBSYSTEM: Glycolysis/Gluconeogenesis</html:p>
     <html:p>Equation: [c] : atp + f6p > adp + fdp + h</html:p>
     <html:p>Confidence Level: 0</html:p>
     <html:p>SMP</html:p>
     <html:p>genes:</html:p>
     <html:p>LOCUS:b1723#ABBREVIATION:pfkB#ECNUMBERS:2.7.1.11#</html:p>
     <html:p>LOCUS:b3916#ABBREVIATION:pfkA#ECNUMBERS:2.7.1.11#</html:p>
     <html:p>proteins:</html:p>
     <html:p>NAME:Phosphofructokinase#ABBREVIATION:PfkA#</html:p>
     <html:p>NAME:Phosphofructokinase II#ABBREVIATION:PfkB#</html:p>
     <html:p>GENE ASSOCIATION: (b3916) or (b1723)</html:p>
   </notes>
   <listOfReactants>
    <speciesReference species="f6p" />
    <speciesReference species="atp" />
   </listOfReactants>
   <listOfProducts>
    <speciesReference species="fdp" />
    <speciesReference species="adp" />
   </listOfProducts>
  </reaction>
  <reaction metaid="Fdp_out" id="Fdp_out" name="Fdp transport out the cell">
   <listOfReactants>
    <speciesReference species="fdp" />
   </listOfReactants>
   <listOfProducts>
    <speciesReference species="fdp_ex" />
   </listOfProducts>
  </reaction>
 </listOfReactions>
</model>
</sbml>

Certain example reactions have been sourced from the BiGG database for demonstration purposes (see reference above).

Retrieved from "http://sbml.org/Community/Wiki/SBML_Level_3_Proposals/Flux_Balance_Constraints_Proposal_%282012%29"

This page was last modified 07:10, 1 August 2012.



Please use our issue tracking system for any questions or suggestions about this website. This page was last modified 07:10, 1 August 2012.