A reoccurring problem that I’ve had with SBML since day one is how to deal with a default compartment. Take for example a visual design tool such as JDesigner. At start up it creates an implicit compartment represented by the empty canvas. When a user drops species on to the canvas these species are assumed to live in the implicit compartment. By default the implicit compartment has a volume of one and an Id of ‘compartment’.
Figure: JDesigner with three explicit compartments and an implied compartment where Nodes 4, 8, and 7 live.
Let’s say the user now adds some explicit compartments (See Figure) and includes species in those compartments. So far so good. JDesigner has a auto layout-feature which is usually used when a SBML model without layout information is loaded.When layout information is missing species are randomly positioned on the canvas, by selecting the autolayout users get a relatively clean layout from the initial random mess. If a model has compartments then these are also laid out so that they don’t overlap. The problem is what to do with the implicit compartment? Normally it doesn’t have a visual cue, its the canvas. The way to resolve this problem is to be able to identify the default compartment, but which compartment is the implicit one, is there even an implicit compartment in the model?
Consider another situation, merging two models. The authors of both models didn’t make any use of compartments but they did have to specify at least one compartment with a volume of 1. There had to be somewhere for their model to live. This is an SBML rule. When two such models are merged it is normallye understood that the two compartments are the same compartment. But there is no way to tell from the SBML. One could assume that because each model has only one compartment, each with a volume of 1, that the compartments are the same but that is a big assumption.
Fortunately is there is now a solution. Both Lucian Smith and Frank Bergmann convinced the community to create a new SBO (Systems Biology Ontology) term: sboTerm=”SBO:0000410″. This term is defined as:
“A compartment whose existence is inferred due to the presence of known material entities which must be bounded, allowing the creation of material entity pools.”
Its a bit of a mouth full, but it essentially defines an implied default compartment. So when ever someone creates a model with an implied compartment of volume 1, the compartment should be declared in the following way:
<compartment sboTerm="SBO:0000410" id="compartment" size="1"/>
The id you give the compartment does not matter.