/* * Subclasses should override this method to read values from the given * XMLAttributes set into their specific fields. Be sure to call your * parents implementation of this method as well. */ void Delay::readL3Attributes (const XMLAttributes& attributes) { const unsigned int level = getLevel(); const unsigned int version = getVersion(); std::vector<std::string> expectedAttributes; expectedAttributes.clear(); expectedAttributes.push_back("metaid"); expectedAttributes.push_back("sboTerm"); // check that all attributes are expected for (int i = 0; i < attributes.getLength(); i++) { std::vector<std::string>::const_iterator end = expectedAttributes.end(); std::vector<std::string>::const_iterator begin = expectedAttributes.begin(); std::string name = attributes.getName(i); std::string prefix = attributes.getPrefix(i); // only check attributes in the sbml namespace if (prefix.empty() || prefix == "sbml") { if (std::find(begin, end, name) == end) { logUnknownAttribute(name, level, version, "<delay>"); } } } // // sboTerm: SBOTerm { use="optional" } (L2v3 ->) // mSBOTerm = SBO::readTerm(attributes, this->getErrorLog(), level, version); }
/* * Subclasses should override this method to read values from the given * XMLAttributes set into their specific fields. Be sure to call your * parents implementation of this method as well. */ void InitialAssignment::readL2Attributes (const XMLAttributes& attributes) { SBase::readAttributes(attributes); const unsigned int level = getLevel (); const unsigned int version = getVersion(); if (version == 1) { logError(NotSchemaConformant, getLevel(), getVersion(), "InitialAssignment is not a valid component for this level/version."); return; } std::vector<std::string> expectedAttributes; expectedAttributes.clear(); expectedAttributes.push_back("metaid"); expectedAttributes.push_back("symbol"); expectedAttributes.push_back("sboTerm"); // check that all attributes are expected for (int i = 0; i < attributes.getLength(); i++) { std::vector<std::string>::const_iterator end = expectedAttributes.end(); std::vector<std::string>::const_iterator begin = expectedAttributes.begin(); std::string name = attributes.getName(i); std::string prefix = attributes.getPrefix(i); // only check attributes in the sbml namespace if (prefix.empty() || prefix == "sbml") { if (std::find(begin, end, name) == end) { logUnknownAttribute(name, level, version, "<initialAssignment>"); } } } // // symbol: SId { use="required" } (L2v2 -> ) // bool assigned = attributes.readInto("symbol", mSymbol, getErrorLog(), true); if (assigned && mSymbol.size() == 0) { logEmptyString("symbol", level, version, "<initialAssignment>"); } if (!SyntaxChecker::isValidSBMLSId(mSymbol)) logError(InvalidIdSyntax); // // sboTerm: SBOTerm { use="optional" } (L2v2 ->) // mSBOTerm = SBO::readTerm(attributes, this->getErrorLog(), level, version); }
bool ASTBase::readAttributes(const XMLAttributes& attributes, const ExpectedAttributes& expectedAttributes, XMLInputStream& stream, const XMLToken& element) { bool read = true; // // check that all attributes are expected // for (int i = 0; i < attributes.getLength(); i++) { std::string name = attributes.getName(i); std::string uri = attributes.getURI(i); std::string prefix = attributes.getPrefix(i); // // To allow prefixed attribute whose namespace doesn't belong to // core or extension package. // // (e.g. xsi:type attribute in Curve element in layout extension) // if (!prefix.empty()) { if ( expectedAttributes.hasAttribute(prefix + ":" + name) ) continue; } if (!expectedAttributes.hasAttribute(name)) { std::string message = "The attribute '" + name + "' is not permitted" + " on a <" + element.getName() + "> element."; if (name == "type") { logError(stream, element, DisallowedMathTypeAttributeUse, message); } else if (name == "encoding") { logError(stream, element, DisallowedMathMLEncodingUse, message); } else if (name == "definitionURL") { logError(stream, element, DisallowedDefinitionURLUse, message); } else if (name == "units") { if (stream.getSBMLNamespaces() != NULL && stream.getSBMLNamespaces()->getLevel() > 2) { logError(stream, element, DisallowedMathUnitsUse, message); } else { message = "The 'units' attribute was introduced in SBML Level 3."; logError(stream, element, InvalidMathMLAttribute, message); } } else { logError(stream, element, InvalidMathElement, message); } // not sufficient to make the read bad //return false; } } string id; string className; string style; attributes.readInto( "id" , id ); attributes.readInto( "class" , className ); attributes.readInto( "style" , style ); if (!id.empty()) { if (setId(id) != LIBSBML_OPERATION_SUCCESS) { read = false; } } if (!className.empty()) { if (setClass(className) != LIBSBML_OPERATION_SUCCESS) { read = false; } } if (!style.empty()) { if (setStyle(style) != LIBSBML_OPERATION_SUCCESS) { read = false; } } unsigned int i = 0; while (read == true && i < getNumPlugins()) { read = getPlugin(i)->readAttributes(attributes, expectedAttributes, stream, element, getExtendedType()); i++; } return read; }