libSBML Python API  5.18.0
libsbml.SBMLExtension Class Reference
Inheritance diagram for libsbml.SBMLExtension:
[legend]

Detailed Description

Base class for SBML Level 3 package plug-ins.

This class of objects is defined by libSBML only and has no direct equivalent in terms of SBML components. This class is not prescribed by the SBML specifications, although it is used to implement features defined in SBML.

The SBMLExtension class is a component of the libSBML package extension mechanism. It is an abstract class that is extended by each package extension implementation.

Basic principles of SBML package extensions in libSBML

SBML Level 3's package structure permits modular extensions to the core SBML format. In libSBML, support for SBML Level 3 packages is provided through optional package extensions that can be plugged into libSBML at the time it is built/compiled. Users of libSBML can thus choose which extensions are enabled in their software applications.

LibSBML defines a number of classes that developers of package extensions can use to implement support for an SBML Level 3 package. These classes make it easier to extend libSBML objects with new attributes and/or subobjects as needed by a particular Level 3 package. Three overall categories of classes make up libSBML's facilities for implementing package extensions. There are (1) classes that serve as base classes meant to be subclassed, (2) template classes meant to be instantiated rather than subclassed, and (3) support classes that provide utility features. A given package implementation for libSBML will take the form of code using these and other libSBML classes, placed in a subdirectory of src/sbml/packages/.

The basic libSBML distribution includes a number of package extensions implementing support for officially-endorsed SBML Level 3 packages; among these are Flux Balance Constraints ('fbc'), Hierarchical Model Composition ('comp'), Layout ('layout'), and Qualitative Models ('qual'). They can serve as working examples for developers working to implement other packages.

Extensions in libSBML can currently only be implemented in C++ or C; there is no mechanism to implement them first in languages such as Java or Python. However, once implemented in C++ or C, language interfaces can be generated semi-automatically using the framework in place in libSBML. (The approach is based on using SWIG and facilities in libSBML's build system.)

Special handling for SBML LevelĀ 2

Due to the historical background of the SBML Layout package, libSBML implements special behavior for that package: it always creates a Layout plugin object for any SBML Level 2 document it reads in, regardless of whether that document actually uses Layout constructs. This is unlike the case for SBML Level 3 documents that use Layout; for them, libSBML will not create a plugin object unless the document actually declares the use of the Layout package (via the usual Level 3 namespace declaration for Level 3 packages).

This has the following consequence. If an application queries for the presence of Layout in an SBML Level 2 document by testing only for the existence of the plugin object, it will always get a positive result; in other words, the presence of a Layout extension object is not an indication of whether a read-in Level 2 document does or does not use SBML Layout. Instead, callers have to query explicitly for the existence of layout information. An example of such a query is the following code:

1 # Assume 'doc' below is an SBMLDocument object.
2 m = doc.getModel()
3 if m != None:
4  layoutPlugin = m.getPlugin('layout')
5  if layoutPlugin != None:
6  numLayouts = layoutPlugin.getNumLayouts()
7  # If numLayouts is greater than zero, then the model uses Layout.

The special, always-available Level 2 Layout behavior was motivated by a desire to support legacy applications. In SBML Level 3, the Layout package uses the normal SBML Level 3 scheme of requiring declarations on the SBML document element. This means that upon reading a model, libSBML knows right away whether it contains layout information. In SBML Level 2, there is no top-level declaration because layout is stored as annotations in the body of the model. Detecting the presence of layout information when reading a Level 2 model requires parsing the annotations. For efficiency reasons, libSBML normally does not parse annotations automatically when reading a model. However, applications that predated the introduction of Level 3 Layout and the updated version of libSBML never had to do anything special to enable parsing layout; the facilities were always available for every Level 2 model as long as libSBML was compiled with Layout support. To avoid burdening developers of legacy applications with the need to modify their software, libSBML provides backward compatibility by always preloading the Layout package extension when reading Level 2 models. The same applies to the creation of Level 2 models: with the plugin-oriented libSBML, applications normally would have to take deliberate steps to activate package code, instantiate objects, manage namespaces, and so on. LibSBML again loads the Layout package plugin automatically when creating a Level 2 model, thereby making the APIs available to legacy applications without further work on their part.

Public Member Functions

def clone (self)
 Creates and returns a deep copy of this SBMLExtension object. More...
 
def getLevel (self, uri)
 Returns the SBML Level associated with the given XML namespace URI. More...
 
def getName (self)
 Returns the nickname of this package. More...
 
def getNumOfSBasePlugins (self)
 Returns the number of SBasePluginCreatorBase objects stored in this object. More...
 
def getNumOfSupportedPackageURI (self)
 Returns the number of supported package namespace URIs. More...
 
def getPackageVersion (self, uri)
 Returns the package version associated with the given XML namespace URI. More...
 
def getSBMLExtensionNamespaces (self, uri)
 Returns a specialized SBMLNamespaces object corresponding to a given namespace URI. More...
 
def getStringFromTypeCode (self, typeCode)
 Returns a string representation of a type code. More...
 
def getSupportedPackageURI (self, n)
 Returns the nth XML namespace URI. More...
 
def getURI (self, sbmlLevel, sbmlVersion, pkgVersion)
 Returns the XML namespace URI for a given Level and Version. More...
 
def getVersion (self, uri)
 Returns the SBML Version associated with the given XML namespace URI. More...
 
def isEnabled (self)
 Returns True if this package is enabled. More...
 
def isInUse (self, doc)
 Indicates whether this extension is being used by the given SBMLDocument. More...
 
def isSupported (self, uri)
 Returns True if the given XML namespace URI is supported by this package extension. More...
 
def setEnabled (self, isEnabled)
 Enable or disable this package. More...
 

Member Function Documentation

def libsbml.SBMLExtension.clone (   self)

Creates and returns a deep copy of this SBMLExtension object.

clone()   SBMLExtension
Returns
a (deep) copy of this SBMLExtension object.
Note
This is a method that package extension implementations must override. See the libSBML documentation on extending libSBML to support SBML packages for more information on this topic.
def libsbml.SBMLExtension.getLevel (   self,
  uri 
)

Returns the SBML Level associated with the given XML namespace URI.

getLevel(string uri)   long
Parameters
urithe string of URI that represents a version of the package.
Returns
the SBML Level associated with the given URI of this package.
Note
This is a method that package extension implementations must override. See the libSBML documentation on extending libSBML to support SBML packages for more information on this topic.
def libsbml.SBMLExtension.getName (   self)

Returns the nickname of this package.

getName()   string

This returns the short-form name of an SBML Level 3 package implemented by a given SBMLExtension-derived class. Examples of such names are 'layout', 'fbc', etc.

Returns
a string, the nickname of SBML package.
Note
This is a method that package extension implementations must override. See the libSBML documentation on extending libSBML to support SBML packages for more information on this topic.
def libsbml.SBMLExtension.getNumOfSBasePlugins (   self)

Returns the number of SBasePluginCreatorBase objects stored in this object.

getNumOfSBasePlugins()   int
Returns
the total number of SBasePluginCreatorBase objects stored in this SBMLExtension-derived object.
def libsbml.SBMLExtension.getNumOfSupportedPackageURI (   self)

Returns the number of supported package namespace URIs.

getNumOfSupportedPackageURI()   long
Returns
the number of supported package XML namespace URIs of this package extension.
def libsbml.SBMLExtension.getPackageVersion (   self,
  uri 
)

Returns the package version associated with the given XML namespace URI.

getPackageVersion(string uri)   long
Parameters
urithe string of URI that represents a version of this package.
Returns
the package version associated with the given URI of this package.
Note
This is a method that package extension implementations must override. See the libSBML documentation on extending libSBML to support SBML packages for more information on this topic.
def libsbml.SBMLExtension.getSBMLExtensionNamespaces (   self,
  uri 
)

Returns a specialized SBMLNamespaces object corresponding to a given namespace URI.

getSBMLExtensionNamespaces(string uri)   SBMLNamespaces

LibSBML package extensions each define a subclass of SBMLNamespaces.

The present method returns the appropriate object corresponding to the given XML namespace URI in argument uri.

Parameters
urithe namespace URI that represents one of versions of the package implemented in this extension.
Returns
an SBMLNamespaces object, or None if the given uri is not defined in the corresponding package.
Note
This is a method that package extension implementations must override. See the libSBML documentation on extending libSBML to support SBML packages for more information on this topic.
def libsbml.SBMLExtension.getStringFromTypeCode (   self,
  typeCode 
)

Returns a string representation of a type code.

getStringFromTypeCode(int typeCode)   string  *

This method takes a numerical type code typeCode for a component object implemented by this package extension, and returns a string representing that type code.

Parameters
typeCodethe type code to turn into a string.
Returns
the string representation of typeCode.
Note
This is a method that package extension implementations must override. See the libSBML documentation on extending libSBML to support SBML packages for more information on this topic.
def libsbml.SBMLExtension.getSupportedPackageURI (   self,
  n 
)

Returns the nth XML namespace URI.

getSupportedPackageURI(long  n)   string
Parameters
nthe index number of the namespace URI being sought.
Returns
a string representing the XML namespace URI understood to be supported by this package. An empty string will be returned if there is no nth URI.
def libsbml.SBMLExtension.getURI (   self,
  sbmlLevel,
  sbmlVersion,
  pkgVersion 
)

Returns the XML namespace URI for a given Level and Version.

getURI(long  sbmlLevel, long  sbmlVersion, long  pkgVersion)   string
Parameters
sbmlLevelthe SBML Level.
sbmlVersionthe SBML Version.
pkgVersionthe version of the package.
Returns
a string, the XML namespace URI for the package for the given SBML Level, SBML Version, and package version.
Note
This is a method that package extension implementations must override. See the libSBML documentation on extending libSBML to support SBML packages for more information on this topic.
def libsbml.SBMLExtension.getVersion (   self,
  uri 
)

Returns the SBML Version associated with the given XML namespace URI.

getVersion(string uri)   long
Parameters
urithe string of URI that represents a version of the package.
Returns
the SBML Version associated with the given URI of this package.
Note
This is a method that package extension implementations must override. See the libSBML documentation on extending libSBML to support SBML packages for more information on this topic.
def libsbml.SBMLExtension.isEnabled (   self)

Returns True if this package is enabled.

isEnabled()   bool
Returns
True if this package is enabled, False otherwise.
def libsbml.SBMLExtension.isInUse (   self,
  doc 
)

Indicates whether this extension is being used by the given SBMLDocument.

isInUse(SBMLDocument doc)   bool

The default implementation returns True. This means that when a document had this extension enabled, it will not be possible to convert it to SBML Level 2 as we cannot make sure that the extension can be converted.

Parameters
docthe SBML document to test.
Returns
a boolean indicating whether the extension is actually being used by the document.
def libsbml.SBMLExtension.isSupported (   self,
  uri 
)

Returns True if the given XML namespace URI is supported by this package extension.

isSupported(string uri)   bool
Returns
True if the given XML namespace URI (equivalent to a package version) is supported by this package extension, False otherwise.
def libsbml.SBMLExtension.setEnabled (   self,
  isEnabled 
)

Enable or disable this package.

setEnabled(bool isEnabled)   bool
Parameters
isEnabledflag indicating whether to enable (if True) or disable (False) this package extension.
Returns
True if this call succeeded; False otherwise.