コード例 #1
0
ファイル: CRDFNode.cpp プロジェクト: Koliham/COPASI
bool CRDFNode::setFieldValue(const CMIRIAMResourceObject & value,
                             const CRDFPredicate::ePredicateType & predicate,
                             const CRDFPredicate::Path & nodePath)
{
  // If a node is associated with the resource we can just set the field value
  if (value.getNode() != NULL)
    return value.getNode()->setFieldValue(value.getURI(), predicate, nodePath);

  // We have no node and the value is invalid, i.e., nothing to do.
  if (!value.isValid())
    return true;

  // We need to create a node

  // We build each missing ancestor as a blank node.
  CRDFPredicate::sAllowedLocation const * pLocation = NULL;
  CRDFNode * pParent = createMissingAncestors(nodePath, predicate, pLocation);

  if (pParent == NULL) return false;

  // Create the missing object
  CRDFObject object;
  object.setType(CRDFObject::RESOURCE);
  object.setResource(value.getURI(), false);

  bool success = true;

  if (!mGraph.addTriplet(pParent->getSubject(), CRDFPredicate::getURI(predicate), object))
    success = false;

  return success;
}
コード例 #2
0
ファイル: CRDFNode.cpp プロジェクト: Koliham/COPASI
CRDFTriplet CRDFNode::addEdge(const CRDFPredicate & predicate, CRDFNode * pObject)
{
  CRDFTriplet Failed;
  CRDFTriplet Triplet(this, predicate, pObject);

  // We do not want any duplicate triplets;
  if (mGraph.getTriplets().count(Triplet) > 0)
    return Failed;

  // If this is a bag node the only predicate allowed is rdf_li.
  if (isBagNode() && predicate != CRDFPredicate::rdf_li)
    return Failed;

  // If the predicate is rdf:li and this is not a bag node we bagify it.
  if (!isBagNode() && predicate == CRDFPredicate::rdf_li)
    {
      // Bagify the node.
      CRDFObject Object;
      Object.setType(CRDFObject::RESOURCE);
      Object.setResource("http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag", false);

      if (!mGraph.addTriplet(this->getSubject(), CRDFPredicate(CRDFPredicate::rdf_type), Object))
        return Failed;
    }

  // We now can safely insert any edge with the predicate rdf_li
  if (predicate == CRDFPredicate::rdf_li)
    {
      if (!addTripletToGraph(Triplet))
        return Failed;

      return Triplet;
    }

  if (!addTripletToGraph(Triplet))
    return Failed;

  return Triplet;
}
コード例 #3
0
ファイル: CModelMIRIAMInfo.cpp プロジェクト: jonasfoe/COPASI
CBiologicalDescription* CMIRIAMInfo::createBiologicalDescription()
{
  const CRDFSubject & Subject = mpRDFGraph->getAboutNode()->getSubject();
  CRDFObject Object;
  Object.setType(CRDFObject::RESOURCE);
  Object.setResource("", false);

  CRDFTriplet Triplet = mpRDFGraph->addTriplet(Subject, std::string("---"), Object);

  if (!Triplet)
    return NULL;

  CBiologicalDescription * pBiologicalDescription =
    new CBiologicalDescription(Triplet);

  if (!mBiologicalDescriptions.add(pBiologicalDescription, true))
    {
      delete pBiologicalDescription;
      return NULL;
    }

  return pBiologicalDescription;
}
コード例 #4
0
ファイル: CRDFParser.cpp プロジェクト: mgaldzic/copasi_api
// static
void CRDFParser::TripleHandler(void * pGraph, const raptor_statement * pTriple)
{
  // We need to create a CRDFSubject, Predicate, and CRDFObject
  CRDFSubject Subject;
  std::string Predicate;
  CRDFObject Object;
  CRDFLiteral Literal;

  switch (pTriple->subject_type)
    {
      case RAPTOR_IDENTIFIER_TYPE_RESOURCE:
        Subject.setType(CRDFSubject::RESOURCE);
        Subject.setResource((char *) raptor_uri_as_string((raptor_uri *) pTriple->subject),
                            CRaptorInit::isLocalURI((raptor_uri *) pTriple->subject));
        break;

      case RAPTOR_IDENTIFIER_TYPE_ANONYMOUS:
        Subject.setType(CRDFSubject::BLANK_NODE);
        Subject.setBlankNodeId((char *) pTriple->subject);
        break;

      default:
        fatalError();
    }

  switch (pTriple->predicate_type)
    {
      case RAPTOR_IDENTIFIER_TYPE_RESOURCE:
        Predicate = (char *) raptor_uri_as_string((raptor_uri *) pTriple->predicate);
        break;

      default:
        fatalError();
    }

  switch (pTriple->object_type)
    {
      case RAPTOR_IDENTIFIER_TYPE_ORDINAL:
      case RAPTOR_IDENTIFIER_TYPE_RESOURCE:
        Object.setType(CRDFObject::RESOURCE);
        Object.setResource((char *) raptor_uri_as_string((raptor_uri *) pTriple->object),
                           CRaptorInit::isLocalURI((raptor_uri *) pTriple->object));
        break;

      case RAPTOR_IDENTIFIER_TYPE_ANONYMOUS:
        Object.setType(CRDFObject::BLANK_NODE);
        Object.setBlankNodeId((char *) pTriple->object);
        break;

      case RAPTOR_IDENTIFIER_TYPE_LITERAL:
        Object.setType(CRDFObject::LITERAL);

        if (pTriple->object_literal_datatype != NULL)
          {
            Literal.setType(CRDFLiteral::TYPED);
            Literal.setDataType((const char *) raptor_uri_as_string(pTriple->object_literal_datatype));
          }
        else
          {
            Literal.setType(CRDFLiteral::PLAIN);

            if (pTriple->object_literal_language != NULL)
              Literal.setLanguage((const char *) pTriple->object_literal_language);
          }

        Literal.setLexicalData((char *) pTriple->object);
        Object.setLiteral(Literal);
        break;

      default:
        fatalError();
    }

  // Add the triplet to the graph
  static_cast<CRDFGraph *>(pGraph)->addTriplet(Subject, Predicate, Object);
}