/* * * Subclasses should override this method to write their xmlns attriubutes * (if any) to the XMLOutputStream. Be sure to call your parents implementation * of this method as well. * */ void SedDocument::writeXMLNS (XMLOutputStream& stream) const { // need to check that we have indeed a namespace set! XMLNamespaces * thisNs = this->getNamespaces(); // the sbml namespace is missing - add it if (thisNs == NULL) { XMLNamespaces xmlns; xmlns.add(SEDML_XMLNS_L1); mSedNamespaces->setNamespaces(&xmlns); thisNs = getNamespaces(); } else if (thisNs->getLength() == 0) { thisNs->add(SEDML_XMLNS_L1); } else { // check that there is an sbml namespace std::string sedmlURI = SedNamespaces::getSedNamespaceURI(mLevel, mVersion); std::string sedmlPrefix = thisNs->getPrefix(sedmlURI); if (thisNs->hasNS(sedmlURI, sedmlPrefix) == false) { // the sbml ns is not present std::string other = thisNs->getURI(sedmlPrefix); if (other.empty() == false) { // there is another ns with the prefix that the sbml ns expects to have //remove the this ns, add the sbml ns and //add the new ns with a new prefix thisNs->remove(sedmlPrefix); thisNs->add(sedmlURI, sedmlPrefix); thisNs->add(other, "addedPrefix"); } else { thisNs->add(sedmlURI, sedmlPrefix); } } } XMLNamespaces * xmlns = thisNs->clone(); if (xmlns != NULL) { stream << *(xmlns); delete xmlns; } }