| Author | Topic |
Posts: 307
Location: Cambridge UK
Registered: February 2005
|
|
Re: Bug in SBMLWriter
|
08 May '12 06:43

|
 |
|
On 08/05/12 14:30, Nicolas Rodriguez wrote:
> On 08/05/12 14:20, Andreas Dräger wrote:
>> Am 5/8/12 3:17 PM, schrieb Nicolas Rodriguez:
>>> On 08/05/12 13:57, Andreas Dräger wrote:
>>>> |Hi all,
>>>>
>>>> It seems the SBML writer does currently write invalid SBML code when
>>>> making use of the ability of SBML Level 3 to associate plain numbers
>>>> with units:
>>>>
>>>> <cn type="integer" sbml:units="dimensionless"> 1</cn>
>>>>
>>>> The above code is only valid if the namespace declaration of the math
>>>> element also defines
>>>>
>>>> xmlns:sbml="http://www.sbml.org/sbml/level3/version1/core"
>>>>
>>>> Currently, it does only declare the regular MathML namesapce. As a
>>>> result, JSBML is currently unable to parse models that itself wrote into
>>>> a file before. Where can we fix this problem?
>>> The check is in
>>> org.sbml.jsbml.util.compilers.MathMLXMLStreamCompiler.isSBMLNamespaceNeeded(ASTNode)
>>>
>>> the namespace is added in
>>> org.sbml.jsbml.xml.stax.SBMLWriter.writeMathML(MathContainer,
>>> SMOutputElement, XMLStreamWriter, int)
>>>
>>> line 1084 to 1106.
>>>
>>> The compiler org.sbml.jsbml.util.compilers.FindUnitsCompiler is used to
>>> say if there is a unit declaration or not in the mathML.
>>>
>>> This is probably there that the problem happen, and the value returned
>>> is probably false.
>>> It is probably due to the way you are declaring the units and then how
>>> the mathML compiler is calling the methods.
>>>
>>> If I read a model with units, then the writing is fine so there is may
>>> be something missing when we declare units from scratch.
>>>
>>>
>> Hi Nico,
>>
>> Yes, it is probably because I simply say
>>
>> myASTNode.setUnit(Unit.Kind.DIMENSIONLESS.getName());
>>
>> or something similar. I thought this would be enough and didn't care
>> about namespaces at the moment.
> It should be enough but it was probably not tested much until now.
>
> We should probably check how the reader is setting things up.
So, the reader is not doing anything specific, just using the setUnits()
method ( I suppose it was a typo error on your code as I don't see a
method setUnit().
Strange, it was working fine before.
Nico
____________________________________________________________
To manage your jsbml-development list subscription, visit
https://utils.its.caltech.edu/mailman/listinfo/jsbml-development
For a web interface to the jsbml-development mailing list, visit
http://sbml.org/Forums/
For questions or feedback about the jsbml-development list,
contact sbml-team@caltech.edu
|
|
|