37 mLocalResource2Node(),
38 mRemoteResourceNodes(),
59 std::map< std::string, CRDFNode * >::iterator itMap;
60 std::map< std::string, CRDFNode * >::iterator endMap;
63 itMap != endMap; ++itMap)
67 itMap != endMap; ++itMap)
70 std::vector< CRDFNode *>::iterator itVector;
71 std::vector< CRDFNode *>::iterator endVector;
74 itVector != endVector; ++itVector)
78 itVector != endVector; ++itVector)
105 for (; itMap != endMap; ++itMap)
107 pNode = itMap->second;
130 std::pair< std::map< std::string, std::string >::iterator,
bool > inserted =
133 if (inserted.second || (inserted.first->second == uri))
137 prefix.c_str(), inserted.first->second.c_str(), uri.c_str());
146 std::map< std::string, CRDFNode * >::iterator found;
159 pSubjectNode = found->second;
184 pSubjectNode = found->second;
198 switch (
object.getType())
202 if (
object.isLocal())
204 found = mLocalResource2Node.find(
object.getResource());
206 if (found != mLocalResource2Node.end())
208 pObjectNode = found->second;
217 mLocalResource2Node[
object.getResource()] = pObjectNode;
224 mRemoteResourceNodes.push_back(pObjectNode);
230 found = mBlankNodeId2Node.find(
object.getBlankNodeID());
232 if (found != mBlankNodeId2Node.end())
233 pObjectNode = found->second;
238 mBlankNodeId2Node[
object.getBlankNodeID()] = pObjectNode;
246 mLiteralNodes.push_back(pObjectNode);
255 return pSubjectNode->addEdge(predicate, pObjectNode);
263 std::pair< std::set< CRDFTriplet >::iterator,
bool> Insert =
mTriplets.insert(triplet);
296 for (; Range.first != Range.second; ++Range.first)
297 if (Range.first->second == triplet)
308 for (; Range.first != Range.second; ++Range.first)
309 if (Range.first->second == triplet)
320 for (; RangeP.first != RangeP.second; ++RangeP.first)
321 if (RangeP.first->second == triplet)
338 if (pNewSubject == NULL || !Triplet)
354 std::set< const CRDFNode * > Visited;
356 while ((Range.first != Range.second) &&
361 Path.insert(Path.begin(), Range.first->second.Predicate.getType());
363 pCurrent = Range.first->second.pSubject;
365 std::pair< std::set< const CRDFNode * >::iterator,
bool > Inserted =
366 Visited.insert(pCurrent);
368 if (!Inserted.second)
383 if (existingId !=
"")
385 std::map< std::string, std::string >::const_iterator found =
mIdMap.find(existingId);
387 if (found !=
mIdMap.end())
388 return found->second;
396 std::stringstream IdStream;
397 IdStream <<
"CopasiId" << ++Id;
404 IdStream <<
"CopasiId" << ++Id;
410 if (existingId !=
"")
411 mIdMap[existingId] = IdStream.str();
413 return IdStream.str();
418 std::string About =
"#" + key;
438 const bool & expandBag)
const
440 std::set< CRDFTriplet > Triplets;
444 for (; Range.first != Range.second; ++Range.first)
446 Range.first->second.pObject->isBagNode())
449 std::set< CRDFTriplet >::const_iterator it = LiTriplets.begin();
450 std::set< CRDFTriplet >::const_iterator end = LiTriplets.end();
452 for (; it != end; ++it)
453 Triplets.insert(
CRDFTriplet(Range.first->second.pSubject, predicate, it->pObject));
456 Triplets.insert(Range.first->second);
463 std::set< CRDFTriplet > Triplets;
467 for (; Range.first != Range.second; ++Range.first)
468 Triplets.insert(Range.first->second);
476 std::set< CRDFTriplet > Triplets;
480 for (; Range.first != Range.second; ++Range.first)
481 if (Range.first->second.pSubject == pSubject)
482 Triplets.insert(Range.first->second);
489 std::set< CRDFTriplet > Triplets;
493 for (; Range.first != Range.second; ++Range.first)
494 Triplets.insert(Range.first->second);
501 std::set< const CRDFNode * > Nodes;
505 for (; Range.first != Range.second; ++Range.first)
506 Nodes.insert(Range.first->second.pSubject);
523 std::set< CRDFNode * > ToBeRemoved;
525 for (; it != end; ++it)
533 ToBeRemoved.insert(pNode);
536 std::set< CRDFNode * >::iterator itRemove = ToBeRemoved.begin();
537 std::set< CRDFNode * >::iterator endRemove = ToBeRemoved.end();
539 for (; itRemove != endRemove; ++itRemove)
542 std::set< CRDFTriplet >::const_iterator itTriplet = Triplets.begin();
543 std::set< CRDFTriplet >::const_iterator endTriplet = Triplets.end();
545 if (itTriplet == endTriplet)
548 for (; itTriplet != endTriplet; ++itTriplet)
550 itTriplet->pSubject->removeEdge(itTriplet->Predicate,
555 return ToBeRemoved.size() > 0;
561 addNameSpace(
"CopasiMT",
"http://www.copasi.org/RDF/MiriamTerms#");
563 addNameSpace(
"rdf",
"http://www.w3.org/1999/02/22-rdf-syntax-ns#");
564 addNameSpace(
"vCard",
"http://www.w3.org/2001/vcard-rdf/3.0#");
567 std::vector< bool >::iterator itUsed;
573 std::map< std::string, std::string >::iterator itNamespace;
574 std::map< std::string, std::string >::iterator endNamespace =
mPrefix2Namespace.end();
576 for (; it != end; ++it)
579 itNamespace != endNamespace;
580 ++itNamespace, ++itUsed)
583 const std::string & Predicate = it->Predicate.getURI();
585 if (Predicate.compare(0, itNamespace->second.length(), itNamespace->second) == 0)
594 itUsed = Used.begin();
595 std::vector< std::string > ToBeRemoved;
598 itNamespace != endNamespace;
599 ++itNamespace, ++itUsed)
601 ToBeRemoved.push_back(itNamespace->first);
603 std::vector< std::string >::iterator itRemove = ToBeRemoved.begin();
604 std::vector< std::string >::iterator endRemove = ToBeRemoved.end();
606 for (; itRemove != endRemove; ++itRemove)
617 std::pair< Node2Triplet::iterator, Node2Triplet::iterator> Range =
mSubject2Triplet.equal_range(pNode);
618 std::set< CRDFTriplet > RemoveTriplets;
620 for (; Range.first != Range.second; ++Range.first)
621 RemoveTriplets.insert(Range.first->second);
623 std::set< CRDFTriplet >::const_iterator itTriplet = RemoveTriplets.begin();
624 std::set< CRDFTriplet >::const_iterator endTriplet = RemoveTriplets.end();
626 for (; itTriplet != endTriplet; ++itTriplet)
627 itTriplet->pSubject->removeEdge(itTriplet->Predicate, itTriplet->pObject);
642 for (; it != end; ++it)
659 std::vector< CRDFNode * >::iterator it =
mLiteralNodes.begin();
660 std::vector< CRDFNode * >::iterator end =
mLiteralNodes.end();
662 for (; it != end; ++it)
const std::map< std::string, CRDFNode * > & getBlankNodeMap() const
CRDFNode * createAboutNode(const std::string &key)
Node2Triplet mSubject2Triplet
const std::string & getResource() const
void removeTriplet(CRDFNode *pSubject, const CRDFPredicate &predicate, CRDFNode *pObject)
const eObjectType & getType() const
const bool & isLocal() const
const std::string & getBlankNodeID() const
const std::map< std::string, CRDFNode * > & getLocalResourceNodeMap() const
std::vector< CRDFNode * > mLiteralNodes
void setSubject(const CRDFSubject &subject)
const CRDFSubject & getSubject() const
const std::string & getBlankNodeID() const
std::set< const CRDFNode * > getParentSubjects(const CRDFNode *pObject) const
static ePredicateType getPredicateFromURI(const std::string &URI)
std::map< std::string, CRDFNode * > mBlankNodeId2Node
CRDFTriplet moveTriplet(CRDFNode *pNewSubject, const CRDFTriplet &triplet)
bool guessGraphRoot(const std::string &about=" ")
const std::vector< CRDFNode * > & getRemoteResourceNodes() const
std::map< std::string, std::string > mPrefix2Namespace
std::set< CRDFTriplet > getIncomingTriplets(const CRDFNode *pObject) const
Node2Triplet mObject2Triplet
CRDFTriplet addTriplet(const CRDFSubject &subject, const CRDFPredicate &predicate, const CRDFObject &object)
const std::set< CRDFTriplet > & getTriplets() const
CRDFPredicate::Path getPredicatePath(const CRDFNode *pNode)
void setResource(const std::string &resource, const bool &isLocal)
std::set< unsigned int > mGeneratedIds
std::pair< Node2Triplet::iterator, Node2Triplet::iterator > Node2TripletRange
bool isSubjectNode() const
std::map< std::string, CRDFNode * > mLocalResource2Node
const std::map< std::string, std::string > & getNameSpaceMap() const
Predicate2Triplet mPredicate2Triplet
std::set< CRDFTriplet > mTriplets
void removeEdge(const CRDFPredicate &predicate, CRDFNode *pObject)
bool addNameSpace(const std::string &prefix, const std::string &uri)
void setResource(const std::string &resource, const bool &isLocal)
bool isObjectNode() const
const std::string & getURI() const
const bool & isLocal() const
std::map< std::string, std::string > mIdMap
const CRDFNode * getAboutNode() const
std::vector< CRDFNode * > mRemoteResourceNodes
std::pair< Node2Triplet::const_iterator, Node2Triplet::const_iterator > Node2TripletConstRange
std::pair< Predicate2Triplet::const_iterator, Predicate2Triplet::const_iterator > Predicate2TripletConstRange
void setObject(const CRDFObject &object)
void destroyUnreferencedNode(CRDFNode *pNode)
void setType(const eSubjectType &type)
std::string generatedNodeId(const std::string &existingId="")
CRDFTriplet addEdge(const CRDFPredicate &predicate, CRDFNode *pObject)
std::vector< ePredicateType > Path
const std::string & getResource() const
const eSubjectType & getType() const
std::set< CRDFTriplet >::const_iterator const_iterator
bool addTripletToGraph(const CRDFTriplet &triplet) const
void removeTripletFromGraph(const CRDFTriplet &triplet) const