Currently, the first evaluation phase is underway and ends tomorrow, on the 28th of June. Prior to actually opening the evaluation form, I was expecting a long questionnaire. But it turned out to be a rather small one!
The last week went pretty smooth, so as to say. Thankfully, I did not encounter any new issues in the code. But I had to do one tedious job alongside coding the constraints. For the set of constraints, I am currently working with, the test files are faulty, and actually, do not contain the elements that I need to test. As a result, I need to edit all the test files to include appropriate XML elements and attributes. And this is, needless to say, a very tedious job! But I started enjoying that eventually. I reduced the job to just copy paste, by making a template and then making the minor changes so that it fails (or succeeds).
As I said in the last post, I will start discussing some of the broad types of constraints that I am implementing in my project. In this post, I'll discuss the constraints regarding CORE attributes and elements.
1)
" A <some_spatial_element> object may have the optional SBML Level 3 Core attributes metaid and sboTerm. No other attributes from the SBML Level 3 Core namespaces are permitted on a <some_spatial_element>. "
Let us take an element as an example. In XML, a Domain element would be typically written as:
<spatial:domain spatial:domainType="domainType_1" spatial:id="domain_1" spatial:name="someString">
The prefix spatial indicates that the element/attribute belongs to the spatial namespace. If an element/attribute does not have a prefix, it is considered to belong to the core package of JSBML. The rule says that this element (Domain) can have 'optional' attributes 'metaid' and 'sboTerm' from the core. This means that these are not compulsory but can be added. Thus the following XML examples are valid:
<spatial:domain metaid="someString" spatial:domainType="domainType_1" spatial:id="domain_1" spatial:name="someString">
<spatial:domain sboTerm="SBO:0000001" spatial:domainType="domainType_1" spatial:id="domain_1" spatial:name="someString">
Whereas, the following XML is a wrong XML as it contains an attribute 'foo' which is not recognized by core.
<spatial:domain foo="someString" spatial:domainType="domainType_1" spatial:id="domain_1" spatial:name="someString">
To implement this check, we simply return the helper function for unknown core attributes as:
func = new UnknownCoreAttributeValidationFunction<Domain>();
2)
" A <some_spatial_element> object may have the optional SBML Level 3 Core subobjects for notes and annotations. No other elements from the SBML Level 3 Core namespaces are permitted on a <some_spatial_element>. "
Continuing with the same example, an XML element can have multiple children elements. The domain element typically has listOfInteriorPoints as its child. But it can have the <notes/> or <annotation/> element from core as its child too. Thus some valid XMLs look like:
<spatial:domain spatial:domainType="domainType_1" spatial:id="domain_1" spatial:name="someString">
<notes/>
</spatial:domain>
<spatial:domain spatial:domainType="domainType_1" spatial:id="domain_1" spatial:name="someString">
<annotation/>
</spatial:domain>
The following example is an invalid XML because the element <foo/> does not exist in the core.
<spatial:domain spatial:domainType="domainType_1" spatial:id="domain_1" spatial:name="someString">
<foo/>
</spatial:domain>
To implement this check, we again simply make use of a helper validation function for unknown core elements:
func = new UnknownCoreElementValidationFunction<Domain>();
In the next blog post, I will continue with the discussion on constraint implementations, and give further updates on my project.
Till next time,
Cheers! :D