void CMIRIAMInfo::load(const std::string& key) { pdelete(mpRDFGraph); mKey = key; CCopasiObject * pCopasiObject = dynamic_cast< CCopasiObject * >(CCopasiRootContainer::getKeyFactory()->get(mKey)); if (pCopasiObject != NULL) { const std::string * pMiriamAnnotation = NULL; CAnnotation * pAnnotation = CAnnotation::castObject(pCopasiObject); if (pAnnotation != NULL) { pMiriamAnnotation = &pAnnotation->getMiriamAnnotation(); } if (pMiriamAnnotation && *pMiriamAnnotation != "") mpRDFGraph = CRDFParser::graphFromXml(*pMiriamAnnotation); } if (mpRDFGraph == NULL) mpRDFGraph = new CRDFGraph; // We make sure that we always have an about node. if (pCopasiObject != NULL) mTriplet.pObject = mpRDFGraph->createAboutNode(pCopasiObject->getKey()); else mTriplet.pObject = mpRDFGraph->createAboutNode(""); // Load the created date if set; CRDFPredicate::Path Path = mTriplet.pObject->getPath(); std::set< CRDFTriplet > Triples = mTriplet.pObject->getDescendantsWithPredicate(CRDFPredicate::dcterms_created); if (Triples.size() > 0) mCreated = *Triples.begin(); else mCreated = CRDFTriplet(); // This is an invalid triplet, i.e., !mCreated is true. loadCreators(); loadReferences(); loadModifications(); loadBiologicalDescriptions(); return; }
bool CRDFNode::removeEdge(const CRDFPredicate & predicate, CRDFNode * pObject) { bool deletedSomething = false; // Determine whether the predicate points to a bag node std::set< CRDFTriplet > Triplets = mGraph.getTriplets(this, predicate); // Debugging assert(Triplets.size() > 0); CRDFNode * pTarget = Triplets.begin()->pObject; if (pTarget->isBagNode() && pTarget != pObject) { deletedSomething |= pTarget->removeEdge(CRDFPredicate::rdf_li, pObject); Triplets = mGraph.getTriplets(pTarget, CRDFPredicate::rdf_li); switch (Triplets.size()) { case 0: // If pTarget is an empty bag node we remove it. // Note, this will destroy pTarget, i.e., no need to unbag deletedSomething |= removeEdge(predicate, pTarget); break; default: // We have more than 1 rdf_li element left. break; } return deletedSomething; } deletedSomething |= removeTripletFromGraph(CRDFTriplet(this, predicate, pObject)); return deletedSomething; }