libSBML
Utvecklare | SBML-teamet |
---|---|
Initial release | 12 mars 2003 |
Stabil frisättning | 5.18.0 / 18 april 2019
|
Skrivet i | C++ , C |
Operativ system | Microsoft Windows , Mac OS , Unix-liknande |
Typ | XML - parserbibliotek |
Licens | LGPL-licens v2.1 |
Hemsida | sbml.org |
LibSBML är ett mjukvarubibliotek med öppen källkod som tillhandahåller ett applikationsprogrammeringsgränssnitt (API) för formatet SBML (Systems Biology Markup Language). libSBML-biblioteket kan bäddas in i en mjukvaruapplikation eller användas i en webbservlet ( som en som kan betjänas av Apache Tomcat ) som en del av applikationen eller servletens implementering av stöd för att läsa, skriva och manipulera SBML-dokument och dataströmmar . Kärnan i libSBML är skriven i ISO-standarden C++ ; biblioteket tillhandahåller API för många programmeringsspråk via gränssnitt genererade med hjälp av SWIG .
libSBML-biblioteket är fri programvara som släpps under villkoren i GNU Lesser General Public License som publicerats av Free Software Foundation ; antingen version 2.1 av licensen eller någon senare version. LibSBML utvecklades tack vare finansiering från många myndigheter, särskilt National Institute of General Medical Sciences (NIGMS, USA) samt Defense Advanced Research Projects Agency (DARPA, USA) under Bio-SPICE- programmet.
Beskrivning
SBML (Systems Biology Markup Language) är ett XML-baserat format för kodning av beräkningsmodeller av ett slag som är vanligt inom systembiologi . Även om SBML är baserat på XML , och därmed programvaruutvecklare skulle kunna stödja SBML med hjälp av vanliga XML-parserbibliotek, erbjuder libSBML många fördelar som gör det lättare för utvecklare att implementera stöd för SBML i sin programvara. Utgångspunkten bakom utvecklingen av libSBML är att det är bekvämare och mer effektivt för utvecklare att börja med ett API på högre nivå som är skräddarsytt specifikt för SBML och dess utmärkande egenskaper än att börja med ett vanligt XML-parserbibliotek.
Viktiga egenskaper hos libSBML
Följande är en ofullständig lista över libSBML:s funktioner:
- Stöder alla nivåer och versioner av SBML med vanliga API-klasser och metoder, vilket utjämnar skillnaderna mellan olika smaker av SBML ur applikationsmjukvarans perspektiv.
- Ger faciliteter för att manipulera matematiska formler i både textsträngsformat och MathML 2.0-format, samt möjligheten att interkonvertera matematiska uttryck mellan dessa former. Internt använder libSBML bekanta abstrakta syntaxträd (AST) för att representera formler och tillhandahåller AST-orienterade metoder för att anropa applikationer.
- Utför validering av XML och SBML vid tidpunkten för analys av filer och dataströmmar. Detta hjälper till att verifiera riktigheten av modeller på ett sätt som går utöver enkel syntaktisk validering.
- Erbjuder stöd för dimensionsanalys och enhetskontroll . LibSBML implementerar ett grundligt system för dimensionsanalys och kontroll av kvantitetsenheter i en modell.
- Tillhandahåller möjligheter för att skapa och manipulera SBML-anteckningar och anteckningar . Dessa har ett specifikt format som dikteras av SBML-specifikationerna. De format och standarder som stöds av libSBML inkluderar MIRIAM (Minimal Information Requested in the Annotation of a Model) och SBO (the Systems Biology Ontology ).
- Stöder transparent läsning och skrivning av komprimerade filer i formaten ZIP , GZIP och BZIP .
- Tillhandahåller gränssnitt för C , C++ , C# , Java , Python , Perl , MATLAB , Octave och Ruby . programmeringsspråken C- och C++-gränssnitten implementeras inbyggt; gränssnitten C#, Java, Perl, Python och Ruby implementeras med SWIG , Simplified Wrapper Interface Generator; och MATLAB- och Octave-gränssnitten implementeras genom anpassad handskriven kod.
- Tillhandahåller många bekvämlighetsmetoder , till exempel för att erhålla en räkning av antalet gränsvillkorsarter, bestämma modifieringsarterna för en reaktion (förutsatt att reaktionen ger kinetik), konstruera den stökiometriska matrisen för alla reaktioner i en modell och mer.
Manipulering av matematiska formler
Vissa ytterligare förklaringar kan vara motiverade angående libSBML:s stöd för att arbeta med matematiska formler. I SBML nivå 1 representeras matematiska formler som textsträngar med en C-liknande syntax. Denna representation valdes på grund av dess enkelhet, utbredda förtrogenhet och användning i applikationer som GEPASI och Jarnac, vars författare bidrog till den initiala designen av SBML. I SBML Nivå 2 och 3 fanns det ett behov av att utöka den matematiska vokabulären för Nivå 1 till att omfatta ytterligare funktioner (både inbyggda och användardefinierade), matematiska konstanter, logiska operatorer, relationsoperatorer och en speciell symbol för att representera tid. Istället för att utveckla den enkla C-liknande syntaxen till något mer komplicerat och esoteriskt för att stödja dessa funktioner, och följaktligen behöva hantera två standarder i två olika format (XML och textsträngsformler), utnyttjar SBML nivåerna 2 och 3 en befintlig standard för att uttrycka matematiska formler, nämligen innehållsdelen av MathML .
Som nämnts ovan ger LibSBML en abstraktion för att arbeta med matematiska uttryck i både textsträng och MathML-form: Abstrakta syntaxträd (AST). Abstrakt syntaxträd är välkända inom datavetenskapssamhället; de är enkla rekursiva datastrukturer användbara för att representera den syntaktiska strukturen hos meningar i vissa typer av språk (matematiska eller andra). På samma sätt som libSBML tillåter programmerare att manipulera SBML på nivån för domänspecifika objekt, oavsett SBML-nivå eller version, tillåter det också programmerare att arbeta med matematisk formel på nivån för AST:er oavsett om originalformatet var C-liknande infix eller MathML. LibSBML går ett steg längre genom att tillåta programmerare att arbeta uteslutande med infixformelsträngar och omedelbart konvertera dem till lämplig MathML närhelst det behövs.
Beroenden
LibSBML kräver ett separat bibliotek för att göra läs-/skrivoperationer på låg nivå på XML. Den kan använda vilket som helst av tre XML-parserbibliotek: Xerces , expat eller libxml2 . Användare kan ange vilket bibliotek de vill använda vid libSBML-kompileringstiden. LibSBML döljer skillnaderna mellan dessa parserbibliotek bakom ett abstraktionslager; den använder sömlöst vilket bibliotek mot vilket en given instans av libSBML har kompilerats. (Men släppta binära distributioner av libSBML använder alla libxml2 -biblioteket.)
Användande
LibSBML använder mjukvaruobjekt (dvs. instanser av klasser ) som motsvarar SBML-komponenter, med medlemsvariabler som representerar attributen för motsvarande SBML-objekt. libSBML API är konstruerat för att tillhandahålla ett intuitivt sätt att relatera SBML och koden som behövs för att skapa eller manipulera den med en klasshierarki som efterliknar SBML-strukturen. Mer information om libSBML-objekten finns i libSBML API-dokumentationen .
Läsa och skriva SBML
LibSBML möjliggör läsning från och skrivning till antingen filer eller strängar. När ett SBML-dokument har lästs lagrar libSBML SBML-innehållet i ett SBMLDocument- objekt. Detta objekt kan skrivas ut igen senare. Följande är ett exempel skrivet i Python :
>>> importera libsbml # läs ett dokument >>> doc = libsbml . readSBMLFromFile ( filnamn ) >>> doc = libsbml . readSBMLFromString ( sträng ) # hjälpfunktion som tar antingen en sträng # eller filnamn som argument >>> doc = libsbml . readSBML ( filnamn ) >>> doc = libsbml . readSBML ( sträng ) # skriv ett dokument >>> libsbml . writeSBMLToFile ( doc , filnamn ) >>> Sant >>> libsbml . writeSBMLToString ( doc ) >>> '<?xml version="1.0" encoding="UTF-8"?> \n <sbml xmlns="http://www.sbml.org/sbml/level3/version1/core" level="3" version="1">\n <model/>\n </sbml>\n'
Skapa och manipulera SBML
libSBML API gör det enkelt att skapa objekt och underobjekt som representerar SBML-element och underelementen i dem. Följande är ett exempel skrivet i C++ :
void createSBML () { // skapa ett SBML Level 3 Version 1-dokument SBMLDocument * doc = new SBMLDocument ( 3 , 1 ); // skapa modellen som ett underelement i dokumentet Model * model = doc -> createModel (); // skapa ett fack som ett underelement till modellen Fack * fack1 = modell -> skapa Fack (); // skapa ett oberoende fack och lägg sedan till det i modellen Fack * fack2 = nytt Fack ( 3 , 1 ); modell -> addCompartment ( fack2 ); }
Åtkomst till attribut
Varje komponent i SBML har ett antal attribut kopplade till sig. Dessa lagras som medlemsvariabler i en given klass, och libSBML tillhandahåller funktioner för att hämta och fråga dessa värden. Syntaxen för dessa funktioner är konsekvent i hela libSBML. Följande är ett exempel skrivet i Python :
0
0
0
0
0
0
>>> importera libsbml # skapa ett SBML nivå 3 version 1-dokument >>> sbmlns = libsbml . SBMLNamespaces ( 3 , 1 ) >>> doc = libsbml . SBMLDocument ( sbmlns ) #skapa modellen som ett underelement i dokumentet >>> model = doc . createModel () #create a compartment som ett underelement av modellen >>> compartment = model . createCompartment () # ställ in attributen på facket # notera ett returvärde på 0 indikerar framgång >>> compartment . setId ( "cell" ) >>> fack . setSize ( 2.3 ) >>> fack . setSpatialDimensions ( 3 ) >>> fack . setUnits ( "liter" ) >>> fack . setConstant ( True ) # hämta attributvärdena >>> fack . getId () 'cell' >>> fack . getSpatialDimensions () 3 # undersök status för attributet >>> fack . isSetSize () Sant >>> fack . getSize () 2.3 #unset ett attributvärde >>> fack . unsetSize () >>> fack . isSetSize () False >>> fack . getSize () nan
Se även
- JSBML
- libxml2
- Xerces
- Expat
- XML-validering
- XML
- BioModels Database
- BioPAX
- CellML
- MIASE
- MIRIAM
- Systembiologi ontologi (SBO)
- MathML