Release of libSBML-5.5.0
11 May '12 05:06
We are pleased to announce the release of libSBML-5.5.0 which is
available for download from
Version 5.5.0 (2012-05-11)
* Revision of annotation and SBML MIRIAM RDF
Following discussions on the libsbml-development mailing list
we have adjusted the way functions affecting annotations interact
with the SBML MIRIAM RDF classes for History and CVTerms.
- Previously any annotation was assessed and if it contained
MIRIAM RDF the corresponding classes were created and the original
annotation XMLNodes relating to these objects was removed from the
annotation. When the annotation was retrieved the xml was
from the History and CVTerm classes. This is no longer the case.
In 5.5 we have changed the code so that the MIRIAM objects are
created BUT the original annotation remains intact. It is only
reconstructed if the code has directly altered the History or CVTerm
classes via the class API, otherwise the original annotation
- We reassessed the use of the appendAnnotation function. Previously
any annotation was appended regardless of whether the existing
annotation already contained a top level element with the same
namespace. We considered this to be a bug, since it would result
in invalid SBML. Thus, the appendAnnotation function now checks
whether there is an existing top-level element with the same
namespace of any it is to append and does not append if it
encounters a duplicate. It returns an OperationReturnValue of
LIBSBML_DUPLICATE_ANNOTATION_NS to indicate this to the user.
- In our reassessment of appendAnnotation we came to the conclusion
that it was virtually impossible to correctly determine the intent
of the user in cases where both the existing and appending
contained RDF that complied with the SBML MIRIAM RDF History or
CVTerms. Thus the appendAnnotation function no longer treats RDF
as a "special" case. If there is existing RDF, no further RDF will
be appended. Users wishing to alter existing History or CVTerms
use the API provided or construct their own annotation and use the
- New functions removeTopLevelAnnotationElement(std::string name) and
replaceTopLevelAnnotationElement(XMLNode* annotation) have been
introduced to allow users to remove or replace a single top level
annotation element whilst conserving any other annotation that
* New features
- There is now a version of the infix to MathML parser that is
of L1 constructs. This parser is available as three functions:
SBML_parseL3Formula(""), SBML_parseL3FormulaWithModel("", Model*) and
SBML_parseL3FormulaWithSettings("", L3ParserSettings *). There is
a new object L3ParserSettings that allows the user to tailor the
results of the function, for example to parse "log" as natural log
or log base 10; to allow users to enter units on numbers as "10m" or
to disable this feature along with some other options.
- The getLine() and getColumn() functions did on some occasions
return a maximum int value when the correct lines and columns
could not be determined. This produced inconsistent behaviour as
some XML parsers return '0' as if they cannot determine location.
This has been unified and libSBML's getLine()/getColumn() will now
return '0' if the location is unknown.
- There is a new class SBMLDocumentPluginNotRequired which allows a
package code to derive from an object where the required attribute is
considered 'false' until it has been set. Note this is not a "default"
value it is just the value with which the boolean attribute is
initialised. The existing SBMLDocumentPlugin class assumes a value
of 'true'. This is in fact a change in behaviour but since users
should set this value it should not cause a problem.
* Bug fixes
- Tracker issue#3509843
The annotation element in SBML should contain only elements. Schema
validation reports this but libSBML was not. This has been corrected.
Thanks to Camille Laibe for still running schema validation and
- There was a subtle bug involving accessing a NULL ModelHistory object.
This has been fixed.
- Area units were not being properly converted between SBML Levels. They
- An AST plus or times node that was created with more than two children
was written out as only having two children; thus losing information.
This behaviour has been corrected.
- Functions used to add objects to other objects in libSBML check that
the SBML Level/Version/Namespaces of the objects correspond. However
these checks were imposing the condition that the number of namespaces
on both objects be the same. This is not a necessary condition and
the code has been relaxed. Thanks to Chris Myers for pointing it
- In XML if the sbml element is not prefixed but the only declaration
of the sbml namespace is, then technically the sbml element has not
been placed into the sbml namespace. LibSBML was failing to report
This has now been fixed.
- There was a curious indentation issue that arose if notes used text as
child elements of an element that also had another non-text child
This could proliferate and cause models where the indentation ran into
the thousands of spaces. This has been sorted out and no longer
- The uninstallation instructions were out of date. This is now
updated, for example to mention that the Mac OS X installer does
in fact provide an uninstall script.
* Configuration/build system changes
- Doxygen versions 1.7 and 1.8 are now supported, but due to
differences in the new version, older versions of Doxygen are no
longer supported. The 'configure' script will now only accept
version 1.7 at minimum.
- Some changes have been made to facilitate building libSBML
with the Borland compiler. This included standardising the use
of #ifdefined rather than using #if. Thanks to Totte Karlsson for
the effort of getting this to work.
- The CMake build has been updated to facilitate the use of the Intel
* New features
- New macros provided so that SBMLNamespaces objects may easily be
to allow package elements to be extended by other packages (for
a comp:modelDefinition to have a layout:listOfLayouts). These macros
now used throughout package system when creating new package elements.
- In 'comp':
- ExternalModelDefinitions have a new function, 'getReferencedModel'
that tries to find the referenced document and model, if the
URI is a 'file' type. If the SBMLDocument has its fileURI set,
use that to search for relative filenames.
- With the above in place, automated flattening now works with
ExternalModelDefinitions that point to local files.
- May now use ModelDefinitions to create the main Model of an
Please report any problems you encounter using libSBML either to the
mailing list firstname.lastname@example.org or using the issue tracker
for libSBML at
To manage your sbml-discuss list subscription, visit
For a web interface to the sbml-discuss mailing list, visit
For questions or feedback about the sbml-discuss list,
Powered by FUDforum. (Copyright Advanced Internet Designs Inc.)