Introduction
XMML is an XML representation of a compiled JSim MML model. It is designed to enable JSim to communicate will language translators and Bioinformatics tools. The XMML is nearing completion and a full release is expected with JSim 2.01. Until then, the following rough outline may be helpful to XMML tool writers.
Contents:
- XMML specification - version 2.00 (current)
- XMML specification - version 2.01 (under development)
- Comments or Questions?
XMML Specification - version 2.00
This XMML specification applies to output from JSim version 2.00 only.
== XMML version 2 spec (11:35 AM, 31 Jan 2011) Note: 1) all tags ending in 'List' are possibly empty lists of base tag 2) ? follows optional elements // entire XMML file xmml ::= model toolList sequence; // pre-compiled model model ::= unitList variableList equationList relationList eventList procedureCallList; // unit definition (in unitList) unit ::= fundamentalUnit | derivedUnit; // fundamental unit fundamentalUnit ::= id=String; // derived unit derivedUnit ::= id=String realFactor unitFactorList; // realFactor realFactor ::= multiplier=Double; // unitFactor unitFactor ::= exponent=Double unitID=String; // model variable (in variableList) variable ::= dataType=(real|int) id=String isDomain=Boolean isExtern=Boolean isPrivate=Boolean isState=Boolean domainList? propertyValueList?; // domain in domainList domain ::= domainID=String; // property value (value in Element text) propertyValue ::= dataType=string name=String value; // model equation (in equationList) equation ::= id=String expression; // model relation (in relationList) relation ::= id=String expression; // model event (in eventList) event ::= id=String timeDomainID=String trigger actionList; // event trigger trigger ::= type=(absolute|relative) expression; // event action (in actionList) action ::= variableID=String expression; // procedure call (in procedureCallList) procedureCall ::= procedureID=String procedureCallArgumentList // 1 argument to procedure call (in procedureCallArgumentList) procedureCallArgument ::= loopDomains expression; // loop domains (not yet implemented) loopDomains ::= ; // model tool = calculation derived from equations (in toolList) tool ::= domainTool | exprTool | externTool | implicitTool | ODETool | PDETool | procedureTool | queryTool | stateTool; // domain tool domainTool ::= toolCommon; // v=expr tool exprTool ::= toolCommon expression; // extern variable externTool ::= toolCommon; // implcit eqn(s) implicitTool ::= toolCommon zeroExpressionList boundsList linearMatrix?; // zeroExpression (in zeroExpressionList) zeroExpression ::= expression; // implicit bound (in boundsList, not yet implemented) bound ::= ; // linear matrix (not yet implemented) linearMatrix ::= ; // ODE tool ODETool ::= toolCommon timeDomainID=String timeOrder=int initialConditionList stateEquation // ODE tool ODETool ::= toolCommon timeDomainID=String timeOrder=int initialConditionList boundaryConditionList stateEquation // initial condition (in ODETool, PDETool initialConditionList) initialCondition ::= toolID=String; // boundary condition (in PDETool boundaryConditionList) boundaryCondition ::= domainID=String side=(left|right) (toolID=String | equationID=String); // procedureCall tool (not yet implemented) procedureTool ::= toolCommon; // query tool (internal use only e.g. v(t.max)) queryTool ::= toolCommon; // state variable tool stateTool ::= toolCommon; // common items for all Tools toolCommon ::= id=String solvedVariables requiredVariables sequenceLoops; // solved or required variable (in solvedVariables or requiredVariables) variableUsage ::= id=String status variableID=String; // variable usage status (CURR=entire, MIN=LHBC, others are queries) status ::= status=(CURR|MIN|MAX|DELAY|QUERY|EXPR|XEXPR); // sequenced calculations (not yet implemented) sequence ::= ; // mathematical expression expression ::= debug math; // user-readable expression (value is Element text) debug ::= value // mathML expression math ::= see MathML spec
XMML Specification - version 2.01
This XMML specification applies to output from JSim version 2.01 and above.
Automatically generated schema documents (via trang):
Manually generated outline:
== XMML version 2.01 spec (24 Feb 2011) Note: 1) all tags ending in 'List' are possibly empty lists of base tag 2) ? follows optional elements // entire XMML file xmml ::= jsimVersion=String xmmlVersion=String model toolList sequence; // pre-compiled model model ::= unitList variableList equationList relationList eventList procedureCallList; // unit definition (in unitList) unit ::= fundamentalUnit | derivedUnit; // fundamental unit fundamentalUnit ::= id=String unitType=String; // derived unit derivedUnit ::= id=String unitType=String realFactor unitFactorList; // realFactor realFactor ::= multiplier=Double; // unitFactor unitFactor ::= exponent=Double unitID=String; // model variable (in variableList) variable ::= dataType=(real|int) id=String isDomain=Boolean isExtern=Boolean isPrivate=Boolean isState=Boolean domainList? propertyValueList?; // domain in domainList domain ::= domainID=String; // property value (value in Element text) propertyValue ::= dataType=string name=String value; // model equation (in equationList) equation ::= id=String expression; // model relation (in relationList) relation ::= id=String expression; // model event (in eventList) event ::= id=String timeDomainID=String trigger actionList; // event trigger trigger ::= type=(absolute|relative) expression; // event action (in actionList) action ::= variableID=String expression; // procedure call (in procedureCallList) procedureCall ::= procedureID=String procedureCallArgumentList // 1 argument to procedure call (in procedureCallArgumentList) procedureCallArgument ::= loopDomainList expression; // proc argument loops in (loopDomainList) loopDomain ::= domainID=String // model tool = calculation derived from equations (in toolList) tool ::= domainTool | exprTool | externTool | implicitTool | ODETool | PDETool | procedureTool | queryTool | stateTool; // domain tool domainTool ::= toolCommon; // v=expr tool exprTool ::= toolCommon expression; // extern variable externTool ::= toolCommon; // implcit eqn(s) implicitTool ::= toolCommon zeroExpressionList boundList linearFactorList?; // zeroExpression (in zeroExpressionList) zeroExpression ::= expression; // implicit bound (in boundList) bound ::= type=MIN|MAX|APPROX variableUsage expr; // linear implicit factor (in linearFactorList) linearFactor ::= row=Integer column=Integer expr; // ODE tool ODETool ::= toolCommon timeDomainID=String timeOrder=int initialConditionList stateEquation // PDE tool PDETool ::= toolCommon timeDomainID=String initialConditionList boundaryConditionList stateEquation // initial condition (in ODETool, PDETool initialConditionList) initialCondition ::= toolID=String; // boundary condition (in PDETool boundaryConditionList) boundaryCondition ::= domainID=String side=(left|right) (toolID=String | equationID=String); // procedureCall tool (not yet implemented) procedureTool ::= toolCommon; // query tool (internal use only e.g. v(t.max)) queryTool ::= toolCommon; // state variable tool stateTool ::= toolCommon; // common items for all Tools toolCommon ::= id=String solvedVariableList requiredVariableList sequenceLoops; // variable in solvedVariableList or requiredVariableList variableUsage ::= id=String status=CURR|MIN|MAX|QUERY variableID=String domainUsage*; // domain usage in variableUsage domainUsage ::= domainID=String domainStatus* // domain query status domainStatus ::= domainStatus=(CURR|MIN|MAX|DELAY|EXPR|XEXPR); // sequenced calculations (not yet implemented) sequence ::= main; // sequence mainline main ::= itemList; // itemList itemList ::= ordered list of item, loopBlock, ODEBlock, PDEBlock elements; // calculation item (tool, relation, event) item ::= itemID=String; // loop block loopBlock ::= loopDomainID=String itemList; // ODE block ODEBlock ::= timeDomainID=String stateToolList microSequence; // PDE block PDEBlock ::= timeDomainID=String spatialDomainList stateToolList microSequence PDEBlockBoundaryList; // ODE/PDE state tool (in stateToolList) stateTool ::= toolID=String; // PDE spatialDomain (in spatialDomainList) spatialDomain ::= domainID=String; // PDE boundary block (in PDEBlockBoundaryList) PDEBlockBoundary ::= domainID=String side=left|right microSequence; // micro sequence (ordered calculation within ODE, PDE or BC block microSequence ::= itemList; // mathematical expression expression ::= debug math; // user-readable expression (text is Element text) debug ::= text // mathML expression math ::= see MathML spec
Comments or Questions?
Model development and archiving support at https://www.imagwiki.nibib.nih.gov/physiome provided by the following grants: NIH U01HL122199 Analyzing the Cardiac Power Grid, 09/15/2015 - 05/31/2020, NIH/NIBIB BE08407 Software Integration, JSim and SBW 6/1/09-5/31/13; NIH/NHLBI T15 HL88516-01 Modeling for Heart, Lung and Blood: From Cell to Organ, 4/1/07-3/31/11; NSF BES-0506477 Adaptive Multi-Scale Model Simulation, 8/15/05-7/31/08; NIH/NHLBI R01 HL073598 Core 3: 3D Imaging and Computer Modeling of the Respiratory Tract, 9/1/04-8/31/09; as well as prior support from NIH/NCRR P41 RR01243 Simulation Resource in Circulatory Mass Transport and Exchange, 12/1/1980-11/30/01 and NIH/NIBIB R01 EB001973 JSim: A Simulation Analysis Platform, 3/1/02-2/28/07.