Example #1
0
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;
}
Example #2
0
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;
}