libSBML NEWS -- History of user-visible changes ====================================================================== Version 3.4.1 (released 2009-07-29) ====================================================================== * New features: - There is a new ListWrapper type in the SWIG bindings that allows functions related to List objects to be wrapped. Each language now has types ListModelCreators, ListCVTerms, ListDates and ListASTNodes to allow Lists containing different types to be used. * Bug fixes: - [Tracker issue #2818945] The documentation of the getDerivedUnitDefinition functions was not clarifying when the function might return NULL. The documentation has been updated. Thanks to Ralph Gauges for reporting this. - [Tracker issue #2818943] The FormulaUnitsData class was not completely copying all data and had no assignment operator defined. This has been fixed. Thanks to Ralph Gauges for reporting this. - [Tracker issue #2812794] Validation was not correctly identifying that references to reaction 'id' was invalid in L2V1. This has been fixed. Thanks to Ralph Gauges for reporting it. - Validation was incorrectly identifying some configuration of notes as invalid. This has been fixed. - Conversion of a model where annotations with duplicate top level elements was permissible to a level/version where this is invalid are now performed without producing invalid SBML. Duplicate top level elements are placed into a single top level element named duplicateTopLevelElements in the namespace http://www.sbml.org/libsbml/annotation. - Unit consistency checks were producing reporting incorrect mismatches between units where the multiplier calculated for comparison purposes contained rounding errors. This has been corrected. Thanks to Sven Sahle for reporting this. - '&' in a character reference (e.g. ¨) or predefined entity (e.g. &) could be wrongly replaced with & (e.g. ¨ -> ¨) when writing an SBML file or string. This has been fixed. Thanks to Andreas Drager for reporting this problem. - A number of memory leaks have been fixed. ====================================================================== Version 3.4.0 (released 2009-06-12) ====================================================================== * New features: - There is a new class SBMLNamespaces. The SBMLNamespaces object class tracks 3-tuples (triples) consisting of SBML Level, Version, and the corresponding SBML XML namespace. - There are new constructors for SBML objects that take an SBMLNamespaces object as an argument, thereby allowing the constructor to produce the proper combination of attributes and other internal data structures for the given SBML Level and Version. - It is possible to use create functions to construct new SBML objects within a model. However, createTrigger, createDelay and createStoichiometryMath functions were missing. These have now been added. Thanks to Chris Myers and Lucian Smith, who both spotted the ommission. - libSBML RPM packages can be created using a spec file which is generated by configure script. Please see libsbml.spec.in. - libSBML package (.dmg file) for MacOSX can be created by running "make create-dmg". Please see macosx/Makefile.in. Thanks to Akira Funahashi for contributing skeleton files for creating the package. - [Tracker issue #2787514] Additional const versions of the getDerivedUnitDefinition() and containsUndeclaredUnits() functions have been added. * Bug fixes: - The code that tests for assignment cycles could cause an infinite loop in certain cases. This was in fact a result of an earlier fix that had intended to stop incorrect cycles being reported. The code that been rewritten to solve both the issues. Thanks to the many people who reported this one. - The assignment operator functions now check for self assignment. - The MATLAB binding was incorrectly importing SBO terms in certain circumstances. This has been fixed. Thanks to Kieran Smallbone for reporting it. - [Tracker issue #2787352] Annotations that included MIRIAM compliant RDF annotations and additional RDF annotations were not being correctly roundtripped. This has been fixed. - [Tracker issue #2778709] Validation of units was incorrectly reporting mismatches between units. This has been fixed and further tests added. Thanks to Lukas Endler for reporting this. - [Tracker issue #2749067] Models using FunctionDefinitions where the math element did not contain a lambda expressions was causing validation code to crash. This has been fixed. Thanks to Lucian Smith for reporting this. - [Tracker issue #2748785] The code that looks for assignment cycles was leaking memory; which is now fixed. Thanks to Lucian Smith for reporting this. - [Tracker issue #2714870] The function getSBOTermID was crashing when called for an object on which the SBO term had not been set. The function now returns an empty string in this situation. Thanks to Alice Villeger for reporting this. - A number of documentation bugs in the Java documentation have been fixed. Thanks to Nicolas Rodriguez and Alice Villeger for reporting them during the 2009 SBML Hackathon. Also, all the javadoc errors are now fixed, and most cross-references in the Java API documentation are fixed as well. - We have considerably expanded the documentation of SBase methods. * Changes: - Python bindings are now installed into an approprite directory with Python 2.6 on Ubuntu 9.04. ====================================================================== Version 3.3.2 (released 2009-03-03) ====================================================================== * New features: - [Tracker issue #1820528] The ASTNode class has as a user data field. This is a new member variable of type void * which allows a user to add/retrieve their own data. Thanks to Sebastian Bauer for contributing this code. * Bug fixes: - Conversion of an L2V4 model to an earlier version of SBML was causing the code to crash if an invalid unit had been used within the model. This has been fixed. Thanks to Norihiro Kikuchi for reporting this - An object being read from a file/string was not correctly recording the SBMLDocument and ParentSBMLObject information. This is fixed. Thanks to Andreas Drager for reporting this. - In a couple of cases the return type for the clone function in the C API was still an SBase_t *, rather than a pointer to the structure being cloned. These have been changed. - The code that converted a string to an XMLNode uses a dummy node as part of the process. This empty dummy node was left in the resulting XMLNode which, whilst not invalid, meant manipulating the XMLNode was not intuitive. The code has been changed to remove the dummy node from the resulting XMLNode. - A potential memory leaks present within the appendNotes function have been identified and fixed. - The documentation for Java lacked content for the 'libsbml' class (which mostly consists of functions outside of C++ classes). Fixed. - [Tracker issue #2641323] In certain cases validation was failing to report that a species used in a kineticLaw had not been listed as a reactant/product/ modifier of the reaction. Thanks to Lukas Endler and Ralph Gauges who independently reported this (on the same day!). - [Tracker issue #2599679] Python bindings didn't work with the latest SWIG 1.3.38 due to incompatible changes in SWIG-generated Python proxy code (libsbml.py). The problem has been fixed. ====================================================================== Version 3.3.1 (released 2009-02-03) ====================================================================== * Changes - Validation relating to attributes that have been removed from later SBML Levels/Versions (e.g. 'offset' on ) has changed slightly. Reading in a model that contains such an invalid attribute reports a schema error. This has not changed but checking the consistency of a document that has been created using an invalid attribute will now report an error stating that the attribute has been removed. This affects, e.g., validation rule 20411 in the SBML L2V2 specification. - The code used to a convert an SBML L2V4 model would fail to perform the conversion if the units in the L2V4 model would produce a target model that had invalid units. Ralph Gauges pointed out that this behaviour was inconsistent with existing behaviour, which allows conversion of invalid models. The code has been changed to merely log the invalid units as a warning, but still perform the conversion if it is otherwise possible. - The RDFAnnotationParser class was not marked as external within the Windows prebuilt dlls. This has been changed and the relevant functions have been implemented within the C API. - The helper function 'printUnits' on the UnitDefinition class was only printing out the knid and exponent of any unit. Sven Sahle requested that this be extended to include scale and multiplier. The unit will now be output as "mole (exponent = -1, multiplier 2, scale = 1)". In addition, the function now has an optional argument, defaulting to false, that if set to true will write the units out in a more compact form e.g. "(20 mole)^-1" * Bug fixes: - The makefile for the java examples directory incorrectly tested only for Java 1.5.0, not for versions greater than or equal to 1.5.0 as it should have. Fixed. Thanks to Nicolas Rodriguez for reporting this. - A problem in error logging whilst reading a file meant that files with certain errors caused libSBML to crash. This has been fixed. - 'configure' requested doxygen version 1.5.4, but actually some of the latest documentation code requires 1.5.8. - The parseCVTerms function was crashing if the qualifier used within one of the CVTerms was unknown. This has been fixed. Thanks to Allyson Lister for the effort involved in tracking this down. ====================================================================== Version 3.3.0 (released 2009-01-20) ====================================================================== * Dependency changes: - Configuring and compiling libSBML with Java binding from sources now requires Java version 1.5.0 or later. This was needed for supporing virtual functions with covariant return types. * New features: - SBML Level 2 Version 4 support is now implemented. - There is a new validator for checking the consistency of the internal representation of a model. The need for this grew out of the following situation. LibSBML classes representing SBML components internally maintain all variables associated with attributes from every Level/Version of SBML. This in fact makes it possible to have an internal representation that is invalid SBML. For example, one can create a Level 1 compartment in memory with a 'spatialDimensions' attribute value of 2. This is invalid for SBML Level 1, but previously, libSBML was only equipped to catch this at the time the application attempted to write out the internal representation. Until then, the (invalid) internal representation could exist and confuse software applications. The new validator can be called using the SBMLDocument class method checkInternalConsistency(). As with all validators, errors are logged in the SBMLErrorLog attached to the SBMLDocument. - New methods getNumResources() and getResourceURI() are available for the class CVTerm. These are convenience methods that allow the user to determine how many resources are stored for the particular term and to index into the values directly. - Previously the error reported when the 'level' and 'version' attributes on an SBMLDocument did not refer to a valid SBML specification did not make the cause of the error clear. This error should now be reported more clearly. Thanks to Lucian Smith for noticing this. - LibSBML was not reporting the use of invalid attributes on the ListOfXXX classes as errors. This has now been fixed. - The MATLAB language binding now correctly identifies the use of the MathML 'delay' and provides the information to the user in a similar fashion to 'time'. - There is a new section in the user documentation for C++, "Tutorial: Creating a complete model, from start to finish". This describes the basics of constructing a model from scratch using the libSBML API. - [Tracker issue #2376930] Validation rules 10401 and 10402 had not previously been implemented. Thanks to Nicolas Rodriguez for reminding us. - [Tracker issue #2183855] Added methods to return the severity and category of the SBMLError class as strings. Since the ErrorId is drawn from an enumeration, returning the actual ErrorId or corresponding symbol did not see useful. Instead, a getShortMessage function has been implemented that returns a very brief description of the error. - [Tracker issue #2136796] There is now additional code to check the ordering of assignment rules in a L1 or L2V1 model. - [Tracker issue #2114473] UnitDefinition has a new method, isVariantOfSubstancePerTime(), which returns true if the unitDefinition is a variant of the SBML predefined unit of 'substance' per the predefined unit of 'time'. In other words, it returns true if, when multiplied by a unit of 'second', the resulting UnitDefinition is a variant of 'substance', meaning moles or items (and grams or kilograms from SBML Level 2 Version 2 onwards) with only abritrary variations in scale or multiplier values. The method returns false if the UnitDefinition is not a variant of 'substance' per 'time'. - [Tracker issue #2086644] Validation was crashing when checking the math/units of an expression using a functionDefinition that had not been properly defined. The code that caused the crash has been fixed and the MathML reader now checks that a element or the body of a element use appropriate tags as detailed in the schema for the subset of MathML supported. - [Tracker issue #2086608] Added new methods to the ASTNode class. They are: removeChild(n) which removes the nth child; replaceChild(n, node) which replaces the nth child with the given node; and insertChild(n, node) which inserts the given node into the list of children such that it becomes the nth child. These methods all return an integer indicating success (0) or failure (-1). Failure is only reported if n exceeds the size of the node; invalid ASTNodes resulting from the operation are not reported. - [Tracker issue #2015847] Each ListOfXXX class now has derived "get" methods that return an object of the expected class. E.g.: ListOfEvents->get() returns an Event *. - [Tracker issue #2015847] The clone method on each SBML component class now returns a pointer to the appropriate class instead of the SBase * previously returned. - [Tracker issue #1862805] The ListOf class has a new method "void ListOf::clear(bool doDelete = true)". When doDelete is true, all the items in the ListOf are cleared and deleted; doDelete is false, the items are cleared from the ListOf but not deleted and the user is responsible for deleting the items. * Bug fixes: - LibSBML could be built without an underlying XML parser if --with-libxml=no is given whereas neither --with-expat nor --with-xerces given when running the configure script, which generated broken shared libraries. Thanks to Giuseppe Aprea for reporting this problem. - LibSBML was failing to check that the value of the 'spatialDimensions' attribute on a was correct. This is in fact a schema error. Thanks to Norihiro Kikuchi for spotting this. - The code that checks for AssignmentCycles was failing to check for an assignment that referred to the subject of that assignment, e.g., an assignment rule with variable "c" and math "2 * c", was not returning an error. This is now fixed. - The code that checks for AssignmentCycles was failing to check for an assignment to a compartment that referred to the a species concentration within that compartment. This is an implicit reference to the compartment itself, since the concentration of the species depends on the compartment value. This is now fixed. - The SBMLWriter::writeSBML() function could create a zip file in which an SBML file was stored with its path name. Thanks to Florian Kamm for reporting this bug. - A missing 'level' or 'version' attribute on was not being correctly reported. - Fixed a memory leak in the assignment operator of the ListOf class. Thanks to Sven Sahle for reporting this problem. - [Tracker issue #2498694] Fixed a typo in documentation. Thanks to Sven Sahle for reporting this. - [Tracker issue #2442566] LibSBML incorrectly restricted the number of 'modified' date elements that could be added to a ModelHistory element. This has now been changed. - [Tracker issue #2418883] The SBML_formulaToString function was crashing if the ASTNode passed to it was NULL. The code now catches this and returns an empty string. Thanks to Lucian Smith for reporting this. - [Tracker issue #2219230] LibSBML-2.3.4 enabled a user to write an xml comment containing information on the program being used to write the file. This used functions setProgramName and setProgramVersion on the SBMLWriter class. Whilst the documentation for libSBML-3.2 described this functionality; it was not in fact implemented. This has been remedied. - [Tracker issue #2209773] libSBML couldn't be built with the Xerces 3.0.0 due to incompatible API changes in Xerces 3. Fixed. - [Tracker issue #2209729] Fixed a problem where libSBML built with Xerces on Linux could crash due to Xerces dereferencing a null pointer when parsing some invalid SBML files. Thanks to Jordan Atlas for reporting this. - [Tracker issue #2189194] Fixed a crash when using bzip2-based compression. Thanks to Florian Kamm for reporting this bug and providing a patch. - [Tracker issue #2188734] The sequence "&" (a predefined entity reference of ampersand) in an attribute value was wrongly converted to "&" when libSBML used libxml2 as the underlying XML parser. This is now fixed. Thanks to Chen Li for reporting this bug. - [Tracker issue #2187684] The unit checking code was not correctly interpreting the units of a reaction id used as a ci element in a math expression. This is fixed and tested. - [Tracker issue #2157800] When 'time' was used in a functionDefinition, it was not being correctly considered as a numerical value. Fixed. - [Tracker issue #2146714] syncAnnotation() functions in SBase, Model, and SpeciesReference class could internally delete an old annotation object (XMLNode*) in an SBase object. This could lead to an invalid pointer to an already deleted annotation object when syncAnnotation() functions were internally invoked from getAnnotation() function. This is now fixed. Thanks to Ralph Gauges for reporting the problem. - [Tracker issue #2138670] Conversion of an L1 model to L2 previously always produced parameters and compartments with their 'constant' attributes set to 'true'. Now the libSBML conversion code checks whether parameters and compartments are the subject of rules, and if so, sets their 'constant' attribute to 'false'. Thanks to Ralph Gauges for reporting the problem. - [Tracker issue #2136530] When adding a child to an XMLNode marked as an 'end' node, the XMLNode remained marked as an 'end' node. This caused incorrect XML to be written out. This is now fixed. Thanks to Ralph Gauges for reporting the bug. - [Tracker issue #2130568] The check for AssignmentCycles incorrectly reported non-existant loops in some situations. This is now fixed. Thanks to Kieran Smallbone for reporting it. - [Tracker issue #2129044] The writeRootFunction in the MathML writer was failing to output a root function correctly when it had only one child; i.e., the default degree value of 2 was being used. This is now fixed. Thanks to Ralph Gauges for spotting this. - [Tracker issue #2114500] The Octave language binding failed to build under Cygwin. This is now fixed. - [Tracker issue #2086644] The validation code would crash when checking the math/units of an expression using a functionDefinition that had not been properly defined. The code that caused the crash has been fixed. - [Tracker issue #2082584] Fixed a memory leak reported by Jonathan Cooper. * Other changes: - The Lisp binding code has been disabled from the configuration and build systems because it no longer functions (and has not been for quite some time). The code is still in the distribution because we hope someone, someday will help get it working again. - The configuration system now will automatically disable support for reading/writing compressed SBML if the 'configure' script cannot find the necessary libraries (zlib and bzip2). There is also a configuration flag, --enable-compression, that can be used to enable/disable both compression libraries in one go. - The allowable values for an integer have been restricted to the range of the standard 32-bit signed integer values (2147483647 to -2147483648), as per the SBML specification. - The Java API documentation has been substantially improved. Many methods previous exposed should not have been, and many methods lacked documentation due to glitches in the software used to generate the Java documentation from the C++ source files. This release corrects almost all of these errors. The Java docs are now much closer to the intended API, although a few glitches remain. A number of classes still remain poorly documented in both the Java and C++ API documentation. - There is now a mailing list (libsbml-team@caltech.edu) for the core libSBML developers separate from the SBML Team mailing list. People are still encouraged to post questions to the sbml-interoperability and libsbml-development mailing lists, but this new list allows us to advertise a direct contact address in the libSBML documentation. - [Tracker issue #2182856] A CVTerm uses the 'metaid' attribute of the object it describes as a reference. Since adding a CVTerm to an object that has no 'metaid' creates an empty element, the addCVTerm function will no longer add a CVTerm to an object that has no 'metaid' attribute set. - [Tracker issue #2175098] Unit validation was producing a 'dimensionless' unit with an 'exponent' of -1 and then failing to consider it equivalent to a 'dimensionless' unit with an 'exponent' of 1. The underlying code no longer assigns an exponent of -1 to a 'dimensionless' unit and the comparison code no longer considers the 'exponent' attribute when comparing 'dimensionless' units. Thanks to Lukas Endler for reporting this. - [Tracker issue #2118126] The getDerivedUnitDefinition() method always returned NULL for a local parameter. Andreas Draeger requested that it return a unitDefinition derived from the units attribute. This has now been implemented. - [Tracker issue #2082682] The unit checking code was not dealing correctly with expressions containing MathML except in cases where exact integers were involved. The code now reports situations where it is unable to check the unit consistency due to non-integral exponents. Thanks to Jonathan Cooper for reporting the problem. ====================================================================== Version 3.2.0 (released 2008-08-20) ====================================================================== * New features: - Tracker issue #1912123. There is a new API that allows the user to directly manipulate XML objects. The function style mimics the existing libSBML format; i.e., getters/setters allow attributes to be read or written, and hasXXX functions allow a user to determine whether an attribute has a value. The XMLNode class has functions that allow child elements to be added/removed and returned. See the documentation for full details. - C# (C sharp) bindings are now available. Thanks to Frank Bergmann for the work in creating and testing these. - LibSBML can now read/write compressed SBML files. It supports the following compression formats: gzip, zip, and bzip2. If a given SBML filename ends with one of extensions for the above compressed file (.gz, .zip, or .bz2), readSBML()/writeSBML() will automatically read/write the file as the corresponding compressed file. If the filename has no such extension, it will be read uncompressed as before. For example, a gzip'ed file named "test.xml.gz" will be read, and then a zip'ed file name "test.xml.zip" will be created by the following sample libSBML code: SBMLDocument* d = readSBML("test.xml.gz"); writeSBML(d, "test.xml.zip"); The compression feature requires zlib (for gzip/zip) and bzip2 (for bzip2). These features are enabled by default, and can be disabled at libSBML configuration time using the using the options --with-zlib=no and --with-bzip2=no. - The constants defining the libSBML version number are now accessible from the various language bindings. In addition, functions to directly access these values have been included. - Tracker issue #2030837. There is a new function getMessageString() on the Constraint class that returns the element as a string rather than an XMLNode. - (Thanks to Chen Li for bringing up the following.) The return value of getSBOTerm() is potentially unintuitive: rather than being a string in the form "SBO:XXXXXXX" (i.e., a full SBO identifier), the returned value is an integer. This was done for the convenience of calling applications, because the integer form is more efficient to manipulate. To support applications and users who prefer the text-string form, libSBML now has a function getSBOTermID() that returns a "proper" SBO identifier. - The SBase class has a new member "SBase * mParentSBMLObject" which points to the direct SBML parent of the object. For example: StoichiometryMath->SpeciesReference->ListOf->Reaction->ListOf ->Model->SBMLDocument There are two new functions 'getParentSBMLObject()'; which returns the direct parent of the object; and 'getAncestorOfType(SBMLTypeCode_t)'; which returns the ancestor of the given typecode or NULL if none exists. - The ASTNode class has a new member "SBase * mParentSBMLObject" which points to the direct SBML parent of the ASTNode object and a corresponding getParentSBMLObject() function that returns it. - Tracker issue #1966696. It was requested by Michael Lawrence that the logical functions "and", "or", and "xor" reduce their correpsonding ASTNodes to a binary tree in the same way that the "plus" and "times" functions do. However, doing this would change the way the node was output as a string; i.e., 'and(x, y, z)' would be output as 'and(and(x, y), z)'. To avoid potential problems such a behavioral change could cause existing libSBML users, there is now has a separate new function, ReduceToBinary(), in the ASTNode class, whose action is to reduce an expression to a binary tree representation on demand. - In order to check unit consistency of a model, ListFormulaUnitsData must be populated with data from the entire model being checked. The functions populateListFormulaUnitsData and isPopulatedListFormulaUnitsData have been exposed within the API. These functions allow a user to run unit consistency checks multiple times whilst adding/editing objects within the model on which unit checking is required. - Tracker issue #1883067. The functions setStoichiometry() and setStoichiometryMath() have been changed so that each unsets the other. This reflects the fact that the SBML species reference attributes 'stoichiometry' and 'stoichiometryMath' are mutually exclusive. - Tracker issue #1928168. LibSBML was not checking the values imported as numbers from within MathML statements in a model. Thus, if the string being converted was either not converted or incorrectly imported, the error was not detected. There are now checks on all these imports. * Bug fixes: - Tracker issue #2041898. A bug in the FormulaTokenizer code led to incorrect handling of some pow() expressions. This has been fixed. - Tracker issue #1733299. The long-standing bug involving Windows, Xerces and multibyte characters has been resolved. Akiya's great detective work uncovered that the Xerces transcode function converts characters to the default encoding for the current platform, and this is not always UTF-8. The code for use with Xerces now encodes specifically to UTF-8 regardless of platform. - Lukas Endler reported that when a division operation cancelled the units of an expression, the resulting units were reported as "indeterminate". This has been fixed, and where units are cancelled by division the resulting unit is now considered dimensionless. - Unit checking of a piecewise function failed to examine all children for literal numbers/parameters with undeclared units. This is now fixed. Thanks to Lukas Endler for discovering and reporting the problem. - The code for checking that an SBML identifier had correct the syntax failed to catch the case where the id had been entered as an empty string. This is now fixed, and id="" will be reported as an error. - Annotations for CVTerms in a Model object were wrongly deleted when a ModelHistory object in the Model object was not explicitly initialized. Due to this bug, the corresponding annotation XML node or string were removed in the functions that return or print the annotation XML node or sring (e.g. getAnnotation(), getAnnotationString(), writeSBML() and writeSBMLToString() ) - Tracker issue #2013528. SBMLDocument::setLevelAndVersion() did not properly check the results of compatibility checking, sometimes leading to conversions being wrongly performed even if the level/version checking step reported an error. Thanks to Robert Platt for reporting this. - In some circumstances, parts of reaction elements could be wrongly ignored when reading an SBML L2V1 file with an empty math element. For example, when reading an SBML L2V1 file containing three reactions ("r1", "r2", and "r3") and a kineticlaw in the reaction "r1" contained an empty math element (i.e., ), the reactions "r2" and "r3" (and indeed, all reactions after the reaction "r1") were ignored and only "r1" was stored in the listOfReactions object. This is now fixed. - Eric Fernandez reported that the latest gcc version (gcc-4.3.1) caused compilation errors in the current libSBML. These have been caught and corrected. - Tracker issue #1967472 Different events can assign values to the same variable. This was not being correctly handled by the unit validation code -- again thanks to Chris Myers for spotting this! This has been corrected and additional test cases have been added. - Tracker issue #1965490. When the math of an ASTNode is set using a string formula, then both the isSetFormula and isSetMath functions return true. However, when the string is not an accurate representation of a formula, the ASTNode created from the string was NULL. Thus, using the isSetMath function to determine whether a math element can be accessed was causing problems. The isSetMath function now checks that an ASTNode can be created from a formula and returns false if it cannot. NOTE: This situation only arises for the math elements of Rules and KineticLaws, because these are the only SBML components in Level 1 that have formulas. - Tracker issue #1961979. - Tracker issue #1958998. There was a memory leak in the code to check for an overdetermined model. Chris Myers used it enough to actually hit the problem. There was also a small bug in the code that got fixed at the same time. - Tracker issue #1965485. There was bug in the checking of units from a functionDefinition. Thanks to Chris Myers for reporting this. - Tracker issue #1943865. The member variables of an ASTNode; definitionURL and semanticsAnnotation; were missing from the deepCopy function. These have now been added. - Tracker issue #1942898. The MATLAB binding failed to correctly import a root function. Thanks to Arne B. Gjuvsland for reporting the problem and supplying the fix. - Tracker issue #1966122. A segmentation fault was occuring when using libSBML + Xerces to read a file with a malformed schemaLocation attribute placed on the element. This problem was first reported by Gwenael Kervizic to Nicolas Le Novere. Xerces was returning an error code that libSBML did not recognize, and the failure to catch the code properly eventually lead to a seg fault with some operation systems. This has now been fixed. - Tracker issue #1966122. A segmentation fault was occuring when using libSBML + Xerces to read a file with a malformed schemaLocation attribute placed on the element. This problem turned out to be caused by more than one issue (see bug fixes below). One issue was that libsbml's Xerces parser code called getLine()/getColumn() in a situation where it doesn't report a valid number. On some systems, the end result was a seg fault, whereas on others the numbers returned are merely crazy. This problem has been addressed and it is now possible to catch the case where the line and column numbers returned by libSBML are inaccurate. NOTE: This only applies to libSBML with the Xerces XML Parser. - Tracker issue #1966122. Xerces would return an unexpected error code when an SBML document contained a 'schemaLocation' attribute on , and in addition, libSBML would also attempt to get the line number from Xerces and this attempt resulted in a segmentation fault on some architectures. This problem was first discovered inadvertently by Gwenael Kervizic while using the Online SBML Validator. The fix involved changing not only the error trapping for Xerces but also the line/column number reporting behavior of XMLError and the introduction of two new constants, LIBSBML_UNKNOWN_LINE and LIBSBML_UNKNOWN_COLUMN. - The code for checking units created a clone of the model to perform certain checks. This was extremely memory intensive with larger models. The relevant code has been changed so that it no longer does this. Run-times for validating units in large models have been significantly reduced as a result. - The code for generating documentation using Doxygen failed to include the code directory for the candidate layout extension; as a result, the docs would never include the layout extension code. Now fixed. If libSBML is configured with --enable-layout and a "make docs" is run, the layout code is included in the docs. - Tracker issue #1942338. The member variables of an ASTNode were stored as a union of data. This caused problems with the get* functions. These unions have been removed and the data is now stored separately. - A number of memory leaks have been fixed. * Changes - The text of the error message for error code 1006 has been changed to "XML content is not well-formed." for greater clarity. - In some circumstances, the line & column numbers reported by the underlying XML parser are meaningless. This typically happened when a severe error occurred while reading the SBML document. However, it is not always obvious whether XMLError's getLine() and getColumn() methods can be called to obtain usable line/column numbers following a severe error. To provide an indication that the line/column numbers reported by XMLError are actually meaningless numbers, the behavior of XMLError's getLine() and getColumn() methods have been changed. They will now return the values LIBSBML_UNKNOWN_LINE and LIBSBML_UNKNOWN_COLUMN in those circumstances. Although the values returned are potentially valid line/column numbers for a file, the real-life probability that this would happen (and lead to confusion) is believed to be too small to worry about. (The numbers are equal to the C/C++ constant ULONG_MAX.) - We changed the revision control system for all SBML project files, including libSBML, from using CVS to SVN. CVS access is no longer available. Please see the following page for information about SVN access on SourceForge: https://sourceforge.net/svn/?group_id=71971 We also have an information page about the SBML SVN repository at http://sbml.org/SBML_Projects/SVN_Repository_Access ====================================================================== Version 3.1.1 (released 2008-02-25) ====================================================================== * New features: - The utility functions for unitDefinitions and units in files Utils_UnitDefinition.cpp/.h and Utils_Units.cpp/.h have now been incorporated as static functions within the UnitDefinition and Unit classes respectively. * Bug fixes: - There were cases where warnings/errors that were not applicable to the particular level and version of SBML were being reported. This has now been corrected. - The ModelingPractice validator now only reports warnings related to units if the UnitConsistency validator is enabled. - Tracker issue #1892238. Fixed a bug that meant the name of a nested functionDefinition was being lost during the unit checking process. - Tracker issue #1883605. It seems that when a new object was created within a model where this new object was the first of its type, e.g., the first element of a ListOfRules, the parent document for the object was not set. This has now been corrected. - Tracker issue #1881852. Fixed a bug that caused a crash when checking the consistency of variables used in a StoichiometryMath element. Added validation files that would have caught this. Thanks to Chris Meyers for reporting this. - Tracker issue #1880570. The previous fix for a piecewise without an otherwise statement did not propagate for the use of piecewise within a lambda function. This is now fixed and multiple tests included to catch this and similar potential failures. - Tracker issue #1880892. A number entered as an exponent was being written out as an integer without exponent where the integral value was small enough. For example 1e3 was written as 1000. This has been changed so that a value entered as an exponent will be written out as an exponent. - The FormulaUnitsData class was previously exposed accidentally in the documentation. It's now (more) private. - The text of a few XML error messages have been changed slightly in an effort to aid readability. No numbers were harmed in the process. - We made additional fixes to the C++, Python and Java API documentation. Among them: including documenting of more constants that are defined as enumerations (and weren't easy to find previously in the language binding docs), not exposing internal methods, plus fixes to the formatting of some method signatures in the Python docs, and more. - The Java API docs now have a section about ASTNode similar to the same section available in the other API manuals. - ASTNode.swapChildren() was not accessible, but should have been. - This NEWS.txt file is now accessible from the API documents. ====================================================================== Version 3.1.0 (released 2008-01-25) ====================================================================== * Dependency changes: - Configuring and compiling LibSBML from sources now requires SWIG version 1.3.33. This was needed for supporing the Ruby bindings. - Generating documentation from LibSBML sources now requires a Doxygen version of at least 1.5.4. This was needed to generate correct documentation for Python and make other improvements. * New features: - LibSBML now provides a binding for the language Ruby (http://www.ruby-lang.org). This was initially contributed by Alex Gutteridge and further developed and integrated (with test code) by Akiya Jouraku. - LibSBML now provides methods on most SBML components to return a UnitDefinition object representing its interpretation of the units for that component's quantity. Two new methods are involved: getDerivedUnitDefinition() and containsUndeclaredUnits(). - The function Layout_setDimensions has been added to the C API. * Bug fixes: - Fixed a bug that meant that a model was not correctly read if a piecewise function had been used with no 'otherwise' element. Thanks to Chris Meyers for reporting this. - Fixed a bug that caused a crash if a FunctionDefinition was applied to an incorrect number of arguments. - The readMathMLFromString function was failing if the string did not begin with an XML declaration. The code now adds a declaration if necessary to prevent this from happening. - The MATLAB binding was failing to store the message field on a Constraint. It does now. - Corrected the fact that a UnitDefinition redefining a builtin unit can have more than one unit provided the UnitDefinition *simplifies* to only one unit. This would allow the use of dimensionless as a unit within the redefinition. Prior to this point libSBML would have rejected a redefinition with more than one unit without considering the possibility that dimensionless was being used. - Fixed a couple of bugs where attributes were not being written out. - Unit validation within libSBML creates a list of a class FormulaUnitsData. This was implemented as a instance of the ListOf class. However, since the FormulaUnitsData class is not an SBML construct this was an inaccurate derivation. This has now been corrected and the list of FormulaUnitsData within the Model object is now an instance of the List class. - libSBML-3.0.0 correctly derived the StoichiometryMath, Trigger and Delay components from SBase, but the MATLAB language binding did not reflect this. It now does. - The MATLAB binding was failing to copy the metaid field. This is now corrected. - It is permissible in MathML to use a lambda function with no bvar elements. However, libSBML was not handling such a situation correctly. Thanks to Stefan Hoops for identifying this. - Caught bug whereby the ASTNode created to substitute values for the FunctionDefinition was failing to copy the name of any FunctionDefinitions used by the calling FunctionDefinition. This was causing the validation process to crash. - examples/java/printMath.java had a bug in which the wrong loop variable was being referenced, causing crashes in SBML files containing FunctionDefinition objects. Thanks to Hongseok Yun for contributing the report and a fix. - The auto-generated documentation for the Python API was previously lousy and sometimes outright wrong, for example in showing incorrect scoping syntax. This was due to defects in Doxygen versions prior to 1.5.x, and now fixed by requiring Doxygen version 1.5.4. - Added more missing sections in the Java and Python API documentation. - Added explicit lists of the various constants defined and used in libSBML, such as ASTNodeType_t, XMLErrorCode_t, etc.. The API documents generated by Doxygen for Python and Javadoc for Java in particular didn't provide easy access to this information. The new docs list the constants with the relevant object definitions. ====================================================================== Version 3.0.3 (released 2007-12-17) ====================================================================== * Changes: - Fixed a bug that meant Annotations and Notes were not being written out when they occurred on a Rule. Thanks to David Adler and Damon Hachmeister for pointing this out. - The enumerations for the XMLError severity and category codes have changed again, because unfortunately our last attempt clashed with a Microsoft Windows system include file. The libSBML severity codes are now prefixed with LIBSBML_SEV_ and the category codes with LIBSBML_CAT_. Hopefully these are truly unique. - LibSBML will now build on Ubuntu Linux. - The incorrect dependencies in the Perl makefiles have been corrected. - Added a clearLog() function to XMLErrorLog. This empties the existing XMLErrorLog but does not destroy it. This facilitates the repeated use of checkConsistency() with different validators enabled. - Fixed a bug in the code to check for cycles in assignments between rules, initial assignments and reactions. This was both failing to report all cycles where they were present and in the case of very complex models it was reporting cycles where there were none. - Fixed a bug in the checkUnitSyntax() function reported by Florian Kamm. - The documentation and README file incorrectly said Xerces is the default parser library used. In fact, it is libxml2 now. ====================================================================== Version 3.0.2 (released 2007-11-28) ====================================================================== * Changes: - ASTNode has a new function ReplaceArgument(). It takes a string representing a name within the ASTNode object and an argument respresenting a name/value/formula ASTNode, and replaces occurrences of the name string with the argument ASTNode. - SBase now has an unsetCVTerms() function which clears the CVTerm() List associated with the object. - The addCVTerm() method on SBase now checks whether each resource string is already present in the list of resources for any Qualifier within the CVTerms of the object and does not add that particular resource if it would either create a duplicate within the resources already present with the same qualifer or create a situation where the same resource was present with different qualifiers. - LibSBML now includes support for the biological-qualifiers recently added to the MIRIAM standard http://www.ebi.ac.uk/compneur-srv/miriam-main/mdb?section=qualifiers - There are two additional functions on an SBase object: getResourceBiologicalQualifier() and getResourceModelQualifier() These functions take a string representing the resource to be found, and return the qualifier that has been used to include this resource within the CVTerms on the object concerned. If the resource is not present, an UNKNOWN qualifier is returned instead. - Occasionally models delare the SBML XML namespace twice; once by default and then again explicitly. If the model is converted between levels/versions of SBML both these occurrences need to be updated. This is now implemented. - libsbml-version.h is now included automatically, so that the libSBML version #define constants are accessible. (See notes in 3.0.1 below about the version constants.) - Fixed problem wherein the enumerations for error codes, severity codes and error categories were in fact not visible outside of C++. The problem stemmed from the fact the enum definitions were placed inside C++ classes. Unfortunately, this required changing the symbols. We renamed many of them to try to make them less likely to conflict with symbols in user code. - Fixed bug that incorrectly caused the hasOnlySubstanceUnits attribute on species to be set to true when a Level 1 model was converted to Level 2. This bug would have impacted the validation of unit consistency in Level 1 models, causing models to fail validation when in fact they were correct. - Fixed bug where some consistency checks for math/units were not checking all the children of the math element. - Fixed memory leak in ASTNode (reported and fixed by Rainer Machne). - Fixed bug in UnitFormulaFormatter.cpp where the order in which parameters/ species/compartments were searched for an identifier was incorrect. This was reported as a unit consistency problem by Damon Hachmeister. - Fixed a bug involving cloning of objects. The clone() method on an SBMLDocument was cloning the model contained by the document but failing to adjust the parent document pointer within the cloned model. Thanks to Rainer Machne for identifying that there was a problem. - (Linux/UNIX) Fixed Makefiles in MATLAB bindings directory so that "make check" actually does something (namely, run testBindings.m). - (Linux/UNIX) The pkgconfig/libsbml.pc file no longer gets installed with the execute bit set. - The Makefiles in examples/c++ and examples/c used an incorrect order of dependencies on libraries, causing cygwin builds to fail. - (Cygwin) A libsbml.la file is now constructed and installed under cygwin. The .la files appear to be used by the Cygwin compilation environment to determine library dependencies. - During installation, the Python bindings installation would ignore the value of the variable DESTDIR if it was given in the invocation of make install. Fixed. - Python build was not sufficiently isolated from the user's installation directories and could have picked up previously-installed older versions of libsbml on the system at build time and test time. Fixed. - "make uninstall" should now properly remove everything installed by a "make install". One remaining issue is that "make uninstall" can only know to remove those libSBML features currently configured in. If you do a "make install", then run configure with different options, and then try "make uninstall", it will attempt to uninstall the files implied by the most recent run of configure, not the files installed by the original "make install". ====================================================================== Version 3.0.1 (released 2007-10-19) ====================================================================== * Changes: - The default XML parser is now libxml2, not Xerces, following the results of a survey of user preferences conducted in September '07. * Bug fixes and enhancements: - Fixed a memory leak in XercesParser.cpp, reported (with the fix) by Sebastian Bauer. - There is a new file, common/lisbml-version.h, that provides constants called LIBSBML_VERSION, LIBSBML_VERSION_STRING, and LIBSBML_DOTTED_VERSION, so that applications can more easily find out the version of a particular installation of libSBML. - SBML_formulaToString was incorrectly limiting the length of the buffer used to write a number and thus truncating the exponent on numbers with 15 digits. This is now fixed. - It appears there is a difference in the way gcc and MSVC deal with the clean-up of strings following calls to the c_str() function. In the case of MSVC this can on occasion result in a returned char * being garbage. Since the unit tests for libSBML run using gcc this has only recently come to light and should now be fixed. - The MATLAB binding function has a second optional argument that indicates whether the model is to be validated prior to import. The default value is 0; indicating no validation. In the case of no argument to the function; which opens a browse window to locate the file to import; the user will be prompted to indicate whether validation should be done. In the case of validation errors these will be displayed to the user, who will be prompted as to whether to import the model regardless. - An additional 'ModelingPractice' validator has been added to the set of validators available for consistency checking. This validator reports 1) a compartment with no size assigned 2) a local parameter id that shadows an id in the global namespace - A document with a missing XML declaration now correctly reports the MissingXMLDecl error EXCEPT when using libxml2. The reason for this inconsistency is that libxml2 assigns a default (1.0) xml version if either the XML version or the entire XML declaration is missing. - The error ids for a small number of consistency checks has changed. These relate to validation rules that were never part of the written specification of SBML and thus do not have published numbers. These rules check that the timeUnits/substanceUnits and formula of a KineticLaw are valid in versions of SBML prior to Level 2 Version 2. The changes are as follows: 21127 changed to 99127 21128 changed to 99128 21129 changed to 99129 - The error id of the check on the general consistency of MathML has changed from 10219 to 99219. - Support for and with a element in MathML has been added. - The format of error, warning and other diagnostic messages has been improved and made more regular, and the message strings of validation rules been updated to match more closely those in the Level 2 Version 3 specification. The formatting of messages printed by SBMLDocument.printErrors() has changed as a result. - A document with a missing XML encoding attribute should cause XMLError::MissingXMLEncoding to be returned, not MissingXMLDecl, as was mistakenly the case previously. ====================================================================== Version 3.0.0 (released 2007-08-29) ====================================================================== * New features relative to 3.0.0 prerelease: - Notes and annotations can now once again be set and retrieved as strings, not only as objects. Thanks to Akiya Jouraku for the hard work behind this. - The MATLAB bindings now support setting notes and annotations as strings. - Error and consistency checking and reporting have been significantly overhauled: + A new method, SBMLDocument::setConsistencyChecks(...), allows an application to indicate which set of validation rules should be applied. By default, all SBML validation rules are applied; setConsistencyChecks() thus a caller to turn some off prior to calling checkConsistency(). + LibSBML now has an internal table relating errors and validation rules, the SBML Levels and Versions in which they are valid, and their severities for each Level and Version. The testing is now more accurate for different SBML Levels/Versions. As an additional benefit, rather than all being errors, some issues are now reported as warnings. + Errors now have "severity" levels. This can be used by an application to gauge the implications of a particular warning or error. - SBMLDocument::setLevelAndVersion(...) now returns a boolean value to indicate whether the conversion was successful, if a conversion was implied by setting the SBML Level and Version of a given model. Applications should make sure to check the return value, because a return value of false implies that something went wrong and the model may be invalid. Applications should next call getNumErrors() and getError() to find out what happened. - The interface between CVTerms and ModelHistory and annotations is now hidden so getAnnotation() or getCVTerm() will return the same information in both cases (i.e., in the annotation and CVTerm forms). Manipulating either will cause the other to be updated, so if setCVTerm() is called, then getAnnotation() will return the CVTerm info. Likewise, if you then manipulate that and setAnnotation() followed by getCVTerm(), the changes will be reflected in the CVTerm form. - Added support for Octave. Thanks to Bill Denney for having worked out how to do it. - Support for the candidate layout implementation is now included by default in the Windows binaries we distribute. - Libxml2 version as old as 2.6.16 are now supported. - Python documentation is now available using the same Doxygen-based system as for C++, Java and C. ====================================================================== Version 3.0.0 Prerelease ====================================================================== * New Features relative to 3.0.0 beta_2: - Java, Perl and Python bindings are once again available, thanks to work by Akiya Jouraku. - MATLAB binding is available without support for Notes and Annotations. - The following is a partial list of API changes relative to previous versions of the Java bindings. Almost all are due to changes in the core of libSBML itself introduced in version 3.0.0. + The classes OstreamWrapper and OfstreamWrapper. + SBMLDocument.setLevel(int) and SBMLDocument.setVersion(int) are no longer available because they have been replaced by SBMLDocument.setLevelAndVersion(int, int). + The methods Event.getTrigger() and Event.getDelay() now return objects of class Trigger and Delay, respectively. Previously they returned mathematical formulas directly; now you have to invoke getMath() on the returned objects. + The methods KineticLaw.setFormulaFromMath() and KineticLaw.setMathFromFormula() have been removed because they are unnecessary; the methods setMath() and setFormula() can be used in their place. + Other API changes: const string& SBase::getNotes() /* libsbml 2.3.4 */ XMLNode* SBase::getNotes() /* libsbml 3.0.0 */ void SBase::setAnnotation(const std::string&) /* libsbml 2.3.4 */ void SBase::setAnnotation(XMLNode*) /* libsbml 3.0.0 */ void SBase::setNotes(const std::string&) /* libsbml 3.0.0 */ void SBase::setNotes(XMLNode*) /* libsbml 2.3.4 */ const ASTNode* Event::getDelay() /* libsbml 3.0.0 */ const Delay* Event::getDelay() /* libsbml 2.3.4 */ const ASTNode* Event::getTrigger() /* libsbml 3.0.0 */ const Trigger* Event::getTrigger() /* libsbml 2.3.4 */ void Event::setDelay(ASTNode*) /* libsbml 3.0.0 */ void Event::setDelay(const Delay*) /* libsbml 2.3.4 */ void Event::setTrigger(ASTNode*) /* libsbml 3.0.0 */ void Event::setTrigger(const Trigger*) /* libsbml 2.3.4 */ - There is new API documentation for C++, C and Java. The documentation is much more complete than before, and is generated from code comments, so it reflects more accurately the actual code. The API manuals are located in docs/formatted under subdirectories for the individual languages. See the sections below for other changes relative to earlier versions of libSBML such as version 2.3.4. ====================================================================== Version 3.0.0 beta_2 ====================================================================== * New Features: - There is a new XML parser abstraction layer, and identical functionality and checking of XML syntax is now available no matter whether you use Expat, Xerces or libxml2 as the underlying XML parser. - LibSBML now implements a thorough system for dimensional analysis and checking units of quantities in a model. The validation rules for units that are specified in SBML Level 2 Vers. 2 and Vers. 3 are fully implemented, including the checking units in mathematical formulas. - Annotations and notes are now read and manipulated as XML structures instead of text strings. Further, in order to facilitate the support of MIRIAM compatible annotations, there are new object classes ModelHistory and CVTerm. These classes facilitate the creation and addition of RDF annotations inside elements by providing parsing and manipulation functions that treat the annotations in terms of XMLNode objects implemented by the new XML layer. Both ModelHistory and CVTerm follow the general libSBML format of providing getters and setters for each variable stored within the class. - LibSBML 3.0.0 implements a number of changes to memory handling improve consistency and memory management. Examples: LibSBML methods now copy objects passed to them, and classes implement virtual copy constructors via .clone() methods. - The Level 2 and Level 1 object models are now unified. All objects have .getSBMLDocument(), .getModel(), .getLevel(), and .getVersion(), among other things. Also, the interface to SBML rules abstracts away some of the individual rule type (assignment, rate, algebraic) differences. - The setLevel() and setVersion() methods on SBMLDocument have been unified into a single method, setLevelAndVersion(). - FunctionDefinitions now have convenience methods to access function arguments (getArgument() and getNumArguments()) and the function body (getBody()) directly. Arguments may be accessed by position or variable name. Corresponding functions for the libSBML C interface exist as well. - Errors/Warnings/Fatals have been amalgamated into one Error class with a Severity field that stores information relating to the type of error. There is only one printError function but the individual errors can be queried to determine their severity. - LibSBML 3.0.0 implements all the validation rules defined in the SBML specifications for L2 Version 2 and Version 3. - The Trigger and Delay elements of an Event are now properly implemented as SBase objects. By side-effect, this means that the methods on Event called getDelay() and getTrigger() have changed; they now return objects of class Delay and Trigger, respectively. To access the formulas of delays and trigger, use the getMath() methods on the Delay and Trigger classes. - The methods KineticLaw::setFormulaFromMath() and KineticLaw::setMathFromFormula() have been removed because they are unnecessary; the methods setMath() and setFormula() can be used in their place. * Bug Fixes: - MathML delay functions were incorrectly converted to user-defined functions, i.e. their type was AST_FUNCTION instead of AST_FUNCTION_DELAY. Thanks to Nicolas Rodriguez for reporting this bug. * Released March 31, 2007 ====================================================================== Version 2.3.4 ====================================================================== * New Features: - The SBML and MathML XML Schemas are now stored in the libSBML Xerces library itself. This vastly simplifies XML Schema validation as it is no longer necessary to store and locate the XML Schemas on the end-users filesystem. - Validator Constraint 1801, which ensures an event trigger is a boolean now takes into account FunctionDefinitions and piecewise functions, in additional to inline MathML. Sarah Keating provided this extra functionality. - ASTNode now has a deepCopy() method which will clone an ASTNode and all of its children, and so on. Thanks to Andrew Finney for suggesting this feature. - In libSBML Java and Python it is no longer necessary to pass an absolute path and filename to readSBML() and SBMLReader.readSBML(). Relative path and filenames now work as expected. * Bug Fixes: - When reading nested elements, libSBML looses the outer piecewise elements. Thanks to Martin Ginkel for reporting this bug and providing a test case. Sarah Keating tracked down the cause of the bug and provided a fix. - In some rare cases libSBML Expat would not be able to read all characters between and or and elements which would cause their contents to be parsed incorrectly. Thanks to Ralph Gauges for reporting this bug and Stefan Hoops for providing a fix. - When compiled with MSVC++ on Windows libSBML's ASTNode.getReal() would return zero when the ASTNode represented a . This bug did *not* manifest itself on Linux, Mac OS X (gcc compiler) systems. Thanks to Andrew Finney and Jordan Atlas for reporting this bug and Andrew Finney for suggesting a fix. - ASTNode::swapChildren() and ASTNode_swapChildren() are now accessible (public) in the libSBML Windows DLL. These functions were already public on Linux and Mac OS X. Thanks to Rainer Machne and Akira Funahashi for reporting this problem. - When formatting numbers, libSBML would not obey the "C" locale if another locale was set. For example, if a program using libSBML called, setlocale(LC_ALL, "de_DE") (or setlocale(LC_ALL, "German") under Windows), thereafter libSBML would only read and write floating point numbers where the decimal was a comma (instead of a period). Such behavior is in violation of the SBML specifications. Thanks to Pedro Mendes for asking a question (via sbml-discuss) that lead to the discovery of this bug. - Thanks to Ralph Gauges for reporting i) a discrepancy between the Xerces-C++ Attributes and the ExpatAttributes interface which was causing the layout extension to occasionally malfunction, and ii) for reporting a mismatched new / free in ExpatXMLString. These were bugs that only a libSBML extension developer is likely to notice. ;) They have been fixed. - 'make tags' now creates tags files, for use with [X]Emacs. The tags files are created in the individual source directories, however. To use them, visit the individual tags files needed. In the future there will be a scheme for creating one master tags file. - 'make uninstall' was actually not implemented almost anywhere (except for the implementation contributed by Martin Ginkel for the Lisp bindings). There is now a mostly-complete implementation (but it has not seen significant testing, so caveats apply). * Changes: - The xml-schema files are no longer included as part of the libSBML download as these are no longer necessary for validation. However the files are available via the SBML web-site. * Known Bugs: - Qualified (prefixed) element names are broken in the Xerces-C++ 2.6.0 SAX2 handler. Currently, libSBML does not work around this bug. As a result, when libSBML converts s to strings, qualified element names with intervening element content (e.g. ) will result in end elements with incorrect prefixes (e.g. ). If you prefer Xerces-C++, for now please use 2.5.0 or earlier. - In libSBML C++, adding objects created on the *stack* to a container object (e.g. adding a Species to a Model or a Unit to a UnitDefinition) may cause libSBML to crash. LibSBML assumes: i) container objects adopt the the objects they contain (i.e. container objects will freeing objects they contain) and ii) all such objects are heap based (e.g. created with new). This bug will be fixed in a future release (2.4.0?) with reference counted objects. Note this bug *does not occur* in any of LibSBML C, Java, Python, Perl, Lisp, or Matlab. * Released October 3, 2005 ====================================================================== Version 2.3.3 ====================================================================== * libSBML 2.3.3 was a prerelease for libSBML 2.3.4. Thanks to Frank Bergmann, Christoph Flamm, Ed Frank, Ralph Gauges, Herbert Sauro, Jeremy Zucker, Tim (?), and other members of the libsbml-discuss mailing list for taking the time to test this release and report and fix problems. * Released September 26, 2005 ====================================================================== Version 2.3.2 ====================================================================== * New Features: - New example programs: - At the 3rd SBML Hackathon, Nicolas Rodriguez converted all C++ example programs to Java. See examples/java/README.txt for more information. - Christoph Flamm has started to convert the C++ example programs to Perl. See examples/perl. - Sarah Keating converted the printMath.c example program to C++. See examples/c++/printMath.cpp. - Christoph Flamm added the following functions to the Perl binding: LibSBML::printWarnings, LibSBML::printErrors, and LibSBML::printFatals. * Bug Fixes: - libSBML 2.3.0 and 2.3.1 required both PREFIX/include and PREFIX/include/sbml (e.g. /usr/local/include and /usr/local/include/sbml) to be on the include path when compiling programs with libSBML. This has been fixed. Once again, only PREFIX/include is required to find all appropriate libSBML header files. Thanks to Colin Gillespie and many others at the recent SBML Hackathon for reporting this bug. - readMathMLFromString() would crash if the returned MathMLDocument was freed in-between subsequent calls to the function. This bug only manifested itself when libSBML was configured to use Expat. Thanks to Herbert Sauro for reporting this bug and Frank Bergmann for providing a fix. - AST_PLUS, AST_MINUS, AST_TIMES, AST_DIVIDE, and AST_POWER enumerations may (once again) be used in Java switch statements. Thanks to Nicolas Rodriguez for reporting this bug. - Local Parameters with the same ids in separate KineticLaws were incorrectly reported as duplicates / conflicting by the libSBML consistency checker (consistency check id 902). Thanks to Jo Matthews for reporting this bug. - In the libSBML Matlab 'IsSetFast' was renamed to 'isSetFast' (TranslateSBML.c). This bug caused no problem with Matlab 6, but would crash Matlab 7. - Configuring with --with-check on MacOSX would cause -Lyes/lib to be added to the LDFLAGS. This bug in config/libcheck.m4 is now fixed. (Tracker libsbml case #57.) - Minor layout extension bug fixes. * Known Bugs: - Same as for libSBML 2.3.1 * Released May 27, 2005 ====================================================================== Version 2.3.1 ====================================================================== * New Features: - LibSBML now keeps infix formula strings and ASTs internally synchronized for Rules and KineticLaws. This means you may use whichever you prefer: get/setFormula(), get/setMath(), or freely intermix them. This brings the libSBML object model another step closer to SBML level and version transparency (where reasonably possible). As a result, the methods / functions setFormulaFromMath() and setMathFromFormula() are no longer necessary, but are kept around for backward compatibility. * Bug Fixes: - LibSBML now converts plural into their singular form when reading and storing annotation strings. This prevents technically incorrect SBML from being written when a plural annotations are read-in and an L1v2 or L2v1 SBML document is subsequently written-out. Note: It is still possible to pass setAnnotation() an incorrectly formatted annotation string. This is one of the many shortcomings of the libSBML annotation system, which will be overhauled soon. Thanks to Jo Matthews for reporting this bug. - Doxygen generated HTML documentation, which was broken in libSBML 2.3.0, is working again. - ./configure --with-expat=... works again. There was a small typo in the config/expat.m4 script that caused LDFLAGS to be set incorrectly. Thanks to Ed Frank for reporting this bug. * Changes: - The methods / functions setFormulaFromMath() and setMathFromFormula() for Rules and KineticLaws are no longer necessary, but are kept around for backward compatibility (see New Features). * Known Bugs: - Same as for libSBML 2.3.0 * Released May 9, 2005 ====================================================================== Version 2.3.0 ====================================================================== * New Features: - Ralph Gauges extension to libSBML to support the diagram layout proposal (previously available as a separate patch) is now part of the libSBML distribution. Since the layout extension is still experimental at this point, it is not compiled into libSBML by default. To enable it: ./configure --enable-layout make The layout extension may be used from libSBML C, C++, Java and Python. It has not been tested under Windows (the MSVC++ 6 and MSVC++ 7 project files do not even attempt to compile it). Example code can be found in examples/layout. - The new and much improved libSBML Validator framework may be found in src/validator. This framework has been used to implement 45 (out of approximately 50) SBML model consistency checks listed on the SBML Wiki (http://sbml.org/wiki/Semantic_Validation). The libSBML Validator framework is designed to allow you to express model validation constraints in a succinct yet readable manner. The constraint "language" has a declarative feel while still allowing you to use the full expressive power of C++ when necessary. To see the current set of 45 consistency constraints, see src/validator/contraints/ConsistencyConstraints.cpp. The most up-to-date validator documentation is available on the libSBML website (http://www.sbml.org/software/libsbml). - LibSBML now supports SBML Level 2 to SBML Level 1 conversions for certain classes models. To use, on an SBML L2 document, simply call SBMLDocument.setLevel(1). If no errors were logged, conversion was successful. Currently, libSBML is somewhat conservative about the classes of models it will allow to be down converted. The sophistication of this conversion will improve over time. See also examples/c++/convertSBML.cpp. - libSBML now implements a variant of the Visitor pattern (Design Patterns, GoF, 1995, p. 331). The parent Visitor class is called SBMLVisitor and each SBML class now has an accept() method to accept subclasses of SBMLVisitor. See the libSBML Developer's Manual for more information. - The Java and Python language bindings now include documentation strings for each method and function. The docstrings are extracted from the C/C++ docstrings and added to each language bindings (see src/bindings/swig/swigdoc.py for more information). - Since the SWIG generated sources are annotated, Java docstrings can be accessed by running JavaDoc on the generated Java source files. - Python docstrings may be accessed via help() (since Python 2.1), pydoc, docutils, HappyDoc, etc. - SBMLWriter and MathMLWriter are now full-fledged classes. Plus, thanks to Stefan Hoops, it is now possible to: 1. To use these classes to write to a C++ std::ostream, and 2. Set a program and version name when writing SBMLDocuments, which will write the following XML comment (intended for human consumption) at the beginning of the file: - Added const versions of the getListOfXXX() methods for Model, UnitDefinition, Reaction, KineticLaw, and Events. - There are several new convenience methods (and functions) on Unit and UnitDefinition. These make many libSBML consistency checks much readable. In particular the following were added: - Unit.isXXX() C++ methods (and corresponding Unit_isXXX() C functions) for each UnitKind. For example, Unit.isMetre() (or Unit_isLitre()). - A static C++ method Unit::isBuiltIn() (and the corresponding C function Unit_isBuiltIn()). It takes a string as an argument and returns true if it is one of the five SBML built-in units: 'area', 'length', 'substance', 'time', or 'volume'. - Five new methods that allow you to ask whether or not a particular UnitDefinition is a variant of a built-in unit. That is, the unit expresses the built-in type and varies arbitrarily in only scale, multiplier, and/or offset. The methods are: - isVariantOfArea() - isVariantOfLength() - isVariantOfSubstance() - isVariantOfTime() - isVariantOfVolume() - ParseMessages can now have an integer identification number associated with them to uniquely identify each message. The id the first argument passed to the ParseMessage constructor and ParseMessage_createWith(). The new and improved libSBML consistency check facility makes use of ParseMessage ids. Thanks to Damon Hachmeister for suggesting this idea. * Bug Fixes: - XML namespace handling is now working properly with libSBML Expat. Thanks to Ben Skrainka for reporting this bug. - Because libSBML did not trim leading and trailing whitespace on and content, each time libSBML read and then wrote a file, the amount of leading and trailing whitespace within this content would grow (i.e. the extra whitespace and libSBML's modest pretty printing were interfering with each other). Thanks to Damon Hachmeister for reporting this bug. - There's a bug in Xerces-C++ 2.6.0 (#1308) that caused libSBML to record an incorrect XML namespace on a element in some instances. Thanks to Johan Hattne for discovering this bug and providing a workaround. Thanks also to Eryk Wolski who sent in runs of 'make check' that also revealed this bug. - When converting L1 models to L2, any Compartment or Parameter involved in a CompartmentVolumeRule or ParameterRule, respectively, now correctly has its constant attribute set to false (instead of the L2 default of true). (As for Species, their constant attribute defaults to false in L2). Thanks to Andrew Finney and Nicolas Le Novere for reporting this bug. - When reading SBML with libSBML Expat some classes of errors would result in segmentation faults. This has been fixed. - When reading SBML from an in-memory string with libSBML Expat parse errors were not be logged. This has been fixed. * Changes: - Leading and trailing whitespace is now removed before storing and content. Note that whitespace *within* and content is preserved as always. - readSBML(filename), SBMLReader_readSBML(filename) and SBMLReader::readSBML(filename) now log specific fatal error ParseMessages if the file could not be found or the content is not SBML. See the function / method docstrings for more information. Thanks to Eryk Wolski and Ralph Gauges for suggesting this idea. - Removed support for writing various character encodings. This change has been a long time coming. LibSBML should support writing only UTF-8 because that is what the SBML standard requires. - Renamed two methods on the Reaction class: - getReactantById() -> getReactant() - getProductById() -> getProduct () The naming scheme takes advantage of C++ overloading (i.e. you can specify either a string id or an integer position to get the nth reactant or product) and is consistent with similar methods elsewhere in libSBML. The 'ById' portion of the name was a holdover from the C API and was introduced by mistake when converting the C API to C++. - Started upgrading some unit tests to 'check' 0.92. In version 0.92, NULL may be omitted as the second argument to fail_unless() and fail_if(). - All header files use forward class declarations in order to minimize dependencies and increase compilation speed. - The make system tries harder to use the user's LD_LIBRARY_PATH setting, especially when running tests with 'make check'. - 'make install' now strips the installed library on systems where we can do it at installation time (which currently are non-MacOSX systems). - 'make install' no longer installs the documentation by default; use 'make install-docs' for this. The install-docs formats the latex-based documentation in the docs subdirectory and requires latex and pdflatex to be available on your system. It can also be a time-consuming step. To reduce annoyances for people who frequently do 'make install', we took out the docs installation step and make it separate. - The default documentation creation procedure no longer creates DVI files, only PDF and HTML. Some people's TeX/LaTeX installations apparently don't have a latex, only a pdflatex, and the default actions could fail. DVI and PS formats can still by obtained by using explicit commands. (See the Makefile in docs/src for more.) * Known Bugs: - Qualified (prefixed) element names are broken in the Xerces-C++ 2.6.0 SAX2 handler. Currently, libSBML does not work around this bug. As a result, when libSBML converts s to strings, qualified element names with intervening element content (e.g. ) will result in end elements with incorrect prefixes (e.g. ). If you prefer Xerces-C++, for now please use 2.5.0 or earlier. - When reading nested elements, libSBML looses the outer piecewise elements. Martin Ginkel has reported this bug and provided a test case. - In libSBML C++, adding objects created on the *stack* to a container object (e.g. adding a Species to a Model or a Unit to a UnitDefinition) may cause libSBML to crash. LibSBML assumes: i) container objects adopt the the objects they contain (i.e. container objects will freeing objects they contain) and ii) all such objects are heap based (e.g. created with new). This bug will be fixed in a future release (2.4.0?) with reference counted objects. Note this bug *does not occur* in any of LibSBML C, Java, Python, Perl, Lisp, or Matlab. * Released May 2, 2005 ====================================================================== Version 2.2.0 ====================================================================== * New Features: - Perl A full libSBML Perl API was contributed by Christoph Flamm and Rainer Machne. For more information, see bindings/perl/README.txt. The Perl API is not yet integrated into the libSBML 'configure' system. To build and install it, after installing libSBML, change to bindings/perl and follow the CPAN-style build instructions in the README.txt file. - Lisp A full libSBML Lisp API was contributed by Martin Ginkel. For more information, see bindings/lisp/README.txt. - Windows Installation Program Sarah Keating created Windows setup programs in two flavors: libsbml-2.2.0-win-xerces.exe and libsbml-2.2.0-win-expat.exe. - XML namespace definitions may be retrieved from or added to any SBML object. It's good practice, however, to put namespaces only on the top-level element. For example: SBMLDocument d; d.getNamespaces().add("jd", "http://www.sbml.org/2001/ns/jdesigner"); To find out if an SBML object (XML element) has any namespaces defined, use hasNamespaces(), for e.g.: if (d.hasNamespaces()) ... * Bug Fixes: - and elements on the top-level element were not being written-out for L2 documents. Thanks to Damon Hachmeister for reporting this bug. - delay functions were being handled incorrectly throughout libSBML as symbols (similar to time, which is a symbol) instead of functions. The fix results in three changes: 1. The ASTNodeType AST_NAME_DELAY is changed to AST_FUNCTION_DELAY. 2. As a result of (1), ASTNode.isFunction() will now return true for delay function nodes. 3. The infix expression parser will parse: delay(...) as an AST_FUNCTION_DELAY (This does not mean delay functions must be called "delay" in MathML, it simply means if you want to create them in infix, you need to use the name "delay"). I'm reasonably confident the effect of these changes on existing code will be minimal. My guess is that if anyone had been using this aspect of libSBML, they would have reported it as a bug. Thanks to Sarah Keating for reporting this bug. - The consistency checks were referencing ids instead of names when checking L1 models. Thanks to Jo Matthews, Mike Hucka, and Manuel Martin for reporting this bug. - XML namespace definitions were not being preserved when writing out an SBML document. Thanks to Jo Matthews, Michael Lawrence, and Herbert Sauro for reporting this bug. * Changes: - The API SBMLDocument.validate() has been deprecated and will be removed in a future release of libSBML. Use SBMLDocument.checkConsistency() instead. - A HTML version of the libSBML Developer's Manual is now available. Thanks to Mike Hucka for working that out. * Released October 6, 2004 ====================================================================== Version 2.1.0 ====================================================================== * New Features: - C++ While it's always been possible to call the C API from C++ code, this version of libSBML features a true object-oriented API that mirrors the SBML specifications. To get a feel for the C++ API, see src/TestReadFromFile5.cpp. For those that prefer the straight C API, it's still available and over 730 unit tests prove its backward compatible with previous releases. - Java A full libSBML Java API is also available. See: docs/formatted/java.txt - For more information bindings/java/Test.java - For example code - Python A full libSBML Python API is also available. See: docs/formatted/python.txt - For more information bindings/python/accept.py - For example code - Validation Engine / Consistency Checks In addition to validating an SBML document against the SBML XML Schema, we've added a (customizable) validation engine. Currently libSBML comes pre-configured with 39 consistency check rules described at: http://sbml.org/wiki/Semantic_Validation To test whether or not an SBML document violates any of these consistency checks, simply load an SBML document, d, and call: SBMLDocument_validate(d) - C d.validate() - C++, Java, Python Every violation adds an error message to the SBML document (accessible with getNumErrors() and getError()) and validate() returns the total number of errors found. The ability to add your own rules is still a bit rough around the edges. The API was started before libSBML was ported to C++, so new rules must be written in C or C++ (no Java or Python). If you're interested, please see src/ValidationRules.c. - Additional Convenience Functions: It's now possible retrieve objects from a Model either via their ordinal position or their SId. In C++, Java, and Python the same method name is overloaded to take either an integer or a string: int n; Model m; m.getXXX(n); m.getXXX("SomeSId"); In C, two separate functions are provided: Model_getXXX(n); Model_getXXXById("SomeSId"); * Bug Fixes: - All bugs reported for the libSBML betas, 2.0.4 and 2.0.5, have been fixed. - Infix formula strings with grouped non-associative operators of the same precedence were being formatted incorrectly. That is: "a - (b - c)" -> "a - b - c" "a - (b / c)" -> "a / b / c" To be clear, the formula string would parse correctly, but would be written out incorrectly. Thanks to Rainer Machne for reporting this bug. - Double precision numbers (in attribute values, infix formulas, or MathML) were being printed to a maximum precision of six digits. This artifically low limit has been increased to 15 digits (the maximum precision possible for an IEEE-754 doubles). Thanks to Tatsuya Ishida for reporting this bug. - MathML incorrectly nested inside or elements would cause libSBML to crash. Thanks to Adam Halasz reporting this bug. - Negative numbers in MathML elements were being incorrectly parsed. Thanks to Nadia Ugel and Victoria Gor, both of whom independently discovered and reported this bug. - A element would be written without the closing angle bracket (!) if it had a note and/or annotation associated with it. Thanks to Konstantin Kozlov for reporting this bug and providing a fix. - A MathML expression involving a did not "reduce" to the correct syntax tree when it was the last argument of an . Thanks to Jacek Puchalka for reporting this bug and providing a fix. * Changes: - SBMLTypes.h now includes MathMLDocument.h, MathMLReader.h and MathMLWriter.h - Mike Hucka rewrote the entire build/make system. It no longer uses automake or libtool; as a result, it is smaller, leaner and faster. Other features include changes to configure to add --with-python, --with-java, --with-matlab. - Mike Hucka updated the libsbml-manual.tex to make it reflect the current state of the API. Mike also created a new LaTeX class file called sbmlmanual.tex, available in the docs/src/tex subdirectory. - In order to make the generation of the manuals self-contained, we've put all the necessary LaTeX class files and extensions they use in docs/src/tex. This bloats the distribution, but is the only safe way to ensure that people can actually make the docs. - Mike Hucka also updated the doxygen documentation configuration and the makefile that drives it. However, it's still not ready for prime-time and we are not yet distributing it as a standard part of the regular distributions. * Released July 23, 2004 ====================================================================== Version 2.0.3 ====================================================================== * Major New Features: - Stephan Hoops has contributed a port of libsbml to use the Expat XML parser library as an alternative to Xerces. To build libsbml to use Expat: ./configure --with-expat[=PATH] All checks but one pass with Expat enabled (See Bugs below). There are currently two caveats to using Expat with libsbml: 1. libsbml *will not* be able to validate SBML and MathML content against an XML Schema. Expat has no facilities for XML Schema validation. 2. XML entity references (e.g.  ), which are most likely to occur in XHTML sections, will be output as their UTF-8 byte sequence instead of the more human readable entity reference (see Bugs below for more information). - Rainer Machne has contributed an example program that evaluates infix expressions and prints their results using the libsbml AST API. See examples/evaluateMath.c. * Bug Fixes: - The correct namespace is now output for both SBML Level 1 and Level 2 documents. This bug was introduced as a result of a bug fix in the 2.0.1 release which output only Level 1 namespaces. The bug is fixed now. Honest. Thanks to Akira Funahashi for reporting this bug. - XML entity references (e.g.  ), which are most likely to occur in XHTML sections, are now output using the same entity reference notation instead the corresponding UTF-8 byte sequence. Thanks to Jo Matthews for reporting this bug. NOTE: This bug has not yet been fixed in the Expat version of libsbml. While Expat reads and writes UTF-8 by default, it comes with no APIs to manipulate or translate Unicode encodings. Writing such a conversion routine and ensuring it is cross-platform is non-trivial and would hold up this release of libsbml for too long. * Released December 19, 2003 ====================================================================== Version 2.0.2 ====================================================================== * Major New Features: - Sarah Keating has contributed a Matlab interface to libsbml and tools to load, store and view (via a Matlab GUI) a database of models (from a .mat file). See the README.txt in bindings/matlab/SBMLToolbox for build instructions and additional information. * Bug Fixes: - Writing SBML L2 documents with FunctionDefinitions would cause libsbml to crash (segfault). The cause was a typo in SBMLFormatter.cpp where a call to listOfUnitDefinitions() should have been (and is now) listOfFunctionDefinitions() (Thanks to Jo Matthews for reporting an anomaly that led to the discovery of this bug). * Released October 24, 2003 ====================================================================== Version 2.0.1 ====================================================================== * Bug Fixes: - The correct namespace is now output for SBML Level 2 documents. - The MathMLHandler now correctly constructs ASTs for calls to user-defined function containing numeric arguments (Thanks to Colin Gillespie for reporting an anomaly that lead to the discovery of this bug). - SBML_formulaToString() did not correctly reproduce (sub) expressions with operators of the same precedence, but modified associativity. For example, "1 / (2 * 3)" was correctly parsed (in infix or MathML) but incorrectly converted to "1 / 2 * 3". This bug has been fixed! * Major New Features: - When reading SBML Level 2, MathML expressions are automatically converted to and stored as SBML L1 infix expressions for maximum backward compatibility with L1. That is, either XXX_getMath() or XXX_getFormula() may be used. There is no need to call SBML_formulaToString() under most circumstances. - SBML_convertToL2(SBase_t *sb) converts any SBML Level 1 object and its subordinate objects to SBML Level 2. Currently this function: - Converts name fields to id fields - Adds ModifierSpeciesReferences when converting Reactions (via SBML_addModifiersToReaction(Reaction_t *r, const Model_t *m)) In the future this function will also: - Add FunctionDefinitions for L1 predefined functions SBMLDocument_setLevel() calls SBML_convertToL2() automatically when the current level is 1 and the new level is 2. * Major New APIs: - char * writeMathMLToString (MathMLDocument_t *d) - unsigned int Model_getNumSpeciesWithBoundaryCondition (const Model_t *m) - Species_t * Model_getSpeciesById (const Model_t *m, const char *sid) - SpeciesReference_t * Reaction_getReactantById (const Reaction_t *r, const char *sid) - SpeciesReference_t * Reaction_getProductById (const Reaction_t *r, const char *sid) - ModifierSpeciesReference_t * Reaction_getModifierById (const Reaction_t *r, const char *sid) - unsigned int ListOf_countIf (const ListOf_t *lo, ListItemPredicate p); - void * ListOf_find (const ListOf_t *lo, const void *item1, ListItemComparator c) - List_t * ASTNode_getListOfNodes (const ASTNode_t *node, ASTNodePredicate p) Where ListItemPredicate, ListItemComparator and ASTNodePredicate are pointers to functions with a particular signature. This allows for convenient and powerful Lisp map-like or C++ STL operations over a container (In fact, the XXX_countIf() name was inspired by the C++ STL). For example, Model_getNumSpeciesWithBoundaryCondition() (above) is implemented simply as follows: return ListOf_countIf( m->species, (ListItemPredicate) Species_getBoundaryCondition ); * New example program: - translateMath.c is an interactive console program that translates infix formulas into MathML and vice-versa. * Improved Windows build and binary distribution: - Andrew Finney constructed an MSVC++ project file and a set of batch files to build both regular and debug versions of libsbml and all example programs. - Xerces-C++ 2.2.0 headers, DLLs and .lib files are included with the Windows distribution (libsbml-2.0.1.zip; see the win32/ subdirectory). * Minor improvements: - Public API header files no longer include references to C-specific header files (e.g. stdio.h). This should make it easier for automated tools to read these header files and generate API bindings for other languages (e.g. Delphi; Thanks to Herbert Sauro for suggesting this). - SBMLTypes.h now #includes both SBMLReader.h and SBMLWriter.h. - Internal utility classes and functions are now officially public. See List.h, Stack.h, StringBuffer.h and util.h. * Released August 6, 2003 ====================================================================== Version 2.0.0 ====================================================================== * Near complete L2 support. The two features not yet supported are: 1. RDF (although the metaid attribute is read, stored and written) 2. Processing of the MathML element (for annotating MathML elements with additional content, e.g. TeX). * New L2 Structures: - FunctionDefinition - Event - EventAssignment - SimpleSpeciesReference (abstract) - ModifierSpeciesReference - AssignmentRule (no longer abstract) - RateRule - MathML and L1 infix expressions (when parsed) are both stored in the same Abstract Syntax Tree (AST) structure ASTNode. - ListOf stores lists of others SBML objects and may contain a metaid, notes or annotations. * New L2 Functions: - The getters, setters, isSet and unset functions are too numerous to mention here. Like L1, they parallel the UML structures defined in the SBML specification. All L1 functions are kept for backward compatibility (see below). - Any structure containing a list now has a getListOfXXX() function which returns the corresponding ListOf structure. - There are currently three convenience functions for converting between SBML infix and MathML formulae: - ASTNode_t *SBML_parseFormula(const char *formula) - char *SBML_formulaToString(const ASTNode_t *math) - MathMLDocument_t *readMathMLFromString(cont char *xml) Again, these are provided purely for convenience. Under normal circumstances, libsbml performs all conversions behind the scenes when necessary. * L1 to L2 Changes: libsbml stores both L1 and L2 models in the same memory structure. While the L1 getters, setters, isSet and unset functions exist for backward compatibility there are some changes of which users of previous versions of libsbml should be aware: - Compartment: - .volume has been renamed to .size. - Species: - .units has been renamed to .substanceUnits. - .initialAmount and .initialConcentration are stored in a union called .initial with discriminators .Amount and .Concentration. - Reaction: - .fast is optional in L2 which introduces Reaction_isSet / unsetFast() functions. - SpeciesReference: - .stoichiometry is now of type double which necessitated a change in the signature of the getter and setter functions. - The use of .denominator is deprecated in L2. However, libsbml still uses denominator in L2 models. When reading a if the content is a single , libsbml will discard the stoichiometry Math and set stoichiometry and denominator directly. Similarly, libsbml will write in L2 documents if the .stoichiometryMath field is not set and the denominator is not 1. - CompartmentVolumeRule: - SpeciesConcentrationRule: - ParameterRule: - .compartment, .species and .parameter have all been renamed to .variable. - The XXX_createWith() functions now set the .id field instead of the .name field. - List_t has been replaced by ListOf_t to store a metaid, notes, and annotations. ListOf_t is simply a wrapper around List_t. * SBMLReader allows you to set up to three Schema filenames (one each for L1v1, L1v2 and L2v1) and it will automatically use the appropriate Schema for the SBML document being read. * A simple command-line executable that converts L1 models to L2 was added to the examples/ subdirectory. * A new subdirectory, xml-schemas/, contains schemas for SBML L1v1, L1v2, L2v1 and MathML 2. * Xerces-C 2.3.0 is now supported by libsbml. Older versions of Xerces-C (2.2.0 and 2.1.0) are still supported. * Released July 23, 2003 ====================================================================== Version 1.1.2 ====================================================================== * A new subdirectory, examples, contains a few small programs that demonstrate how libsbml may be used. * IEEE-754 NaN, +Inf, -Inf and -0.0 are handled correctly and consistently on all supported platforms. In previous versions, these values were not represented, read or written correctly on native Windows and under Cygwin. When writing these values to XML, libsbml now strictly adheres to the XML Schema specification for doubles, namely exactly: "NaN", "INF", "-INF" and "-0". * The build platform was upgraded to Libtool 1.5. This means dynamic libraries will build correctly on all platforms: Linux (.so), Solaris (.so), Cygwin (.DLL) and MacOS X (.dylib). * SBMLWriter now defaults to an output encoding of UTF-8. * SBML_parseFormula() now returns NULL if the formula contains an error. The next version of libsbml will return the position of the syntax error. * Added method: SBMLDocument_setModel(). * To build and run the libsbml test suite now requires an explicit configure option: ./configure --enable-check In addition, 'check' needs to be installed (http://check.sf.net/). Under Cygwin ONLY, due to a limitation of Libtool, if libsbml is built with --check-enabled, a DLL cannot be built. So, after testing, re-run configure without enabling check then 'make' and 'make install' as usual. Running the test suite on any platform is completely optional. Libsbml is tested on all supported platforms before it is released. * Released June 6, 2003 ====================================================================== Version 1.1.0 ====================================================================== * A Developer's Manual (DRAFT) is available in docs/formatted/. * Formula strings may optionally be parsed into abstract syntax trees. See ASTNode.h, and SBML_parseFormula() in FormulaParser.h. * XXX_isSetYYY() and XXX_unsetYYY() methods are available for optional fields without default values. * XXX_getYYY() and XXX_setYYY() methods are available for every field. * SBML (XML) namespace handling is much improved. * '' is treated as a synonym for the correct form '' (singular). * Notes and annotations on the top-level element are read-in and stored (SBMLDocument_t now "inherits" from SBase_t), but not written. When this occurs, a warning message is logged. * Builds successfully on Solaris 2.8. * SBML documents may now be validated against their XML schema. This is still off by default. To turn validation on see SBMLReader_create(), SBMLReader_readSBML() and possibly SBMLReader.h for more information. * Three new convenience functions exist to quickly print warnings, errors and fatal errors that occurred while reading an SBMLDocument. The prototype for this class of function is: SBMLDocument_printXXXs(SBMLDocument_t *d, FILE *stream). Where XXX is Warning, Error or Fatal. * Released May 11, 2003. ====================================================================== Version 1.0.1 ====================================================================== * The build system detects and supports Xerces-C 2.1.0, Xerces-C 2.2.0 compiled with or without namespace support. * Released March 14, 2003. ====================================================================== Version 1.0.0 ====================================================================== * Initial release, March 12, 2003. # The following is for [X]Emacs users. Please leave in place. # Local Variables: # fill-column: 70 # End: