bool RDFAnnotationParser::hasHistoryRDFAnnotation(const XMLNode *annotation) { bool hasHistoryRDF = false; if (!RDFAnnotationParser::hasRDFAnnotation(annotation)) { return hasHistoryRDF; } // check whether the annotation relates to Model History ModelHistory *temp = deriveHistoryFromAnnotation(annotation); /* ok I relaxed the test so that an invalid model could be stored * but need to check that it resembles an model history in some * way otherwise any RDF could be a model history */ if (temp != NULL) // && temp->getNumCreators() > 0) { if (temp->getNumCreators() > 0 || temp->isSetCreatedDate() == true || temp->isSetModifiedDate() == true ) { hasHistoryRDF = true; } } delete temp; return hasHistoryRDF; }
bool RDFAnnotationParser::hasHistoryRDFAnnotation(const XMLNode *annotation) { bool hasHistoryRDF = false; if (!RDFAnnotationParser::hasRDFAnnotation(annotation)) { return hasHistoryRDF; } // check whether the annotation relates to Model History ModelHistory *temp = parseRDFAnnotation(annotation); if (temp && temp->getNumCreators() > 0) { hasHistoryRDF = true; } delete temp; return hasHistoryRDF; }
/* * takes a Model creator information * and creates the RDF annotation */ XMLNode * RDFAnnotationParser::parseModelHistory(const SBase *object) { if (object->getLevel() < 3 && object->getTypeCode() != SBML_MODEL) { return NULL; } ModelHistory * history = object->getModelHistory(); if (history == NULL) { return NULL; } XMLNode *description = createRDFDescription(object); /* create the basic triples */ XMLTriple li_triple = XMLTriple("li", "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf"); XMLTriple bag_triple = XMLTriple("Bag", "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf"); XMLTriple creator_triple = XMLTriple("creator", "http://purl.org/dc/elements/1.1/", "dc"); XMLTriple N_triple = XMLTriple("N", "http://www.w3.org/2001/vcard-rdf/3.0#", "vCard"); XMLTriple Family_triple = XMLTriple("Family", "http://www.w3.org/2001/vcard-rdf/3.0#", "vCard"); XMLTriple Given_triple = XMLTriple("Given", "http://www.w3.org/2001/vcard-rdf/3.0#", "vCard"); XMLTriple Email_triple = XMLTriple("EMAIL", "http://www.w3.org/2001/vcard-rdf/3.0#", "vCard"); XMLTriple Org_triple = XMLTriple("ORG", "http://www.w3.org/2001/vcard-rdf/3.0#", "vCard"); XMLTriple Orgname_triple = XMLTriple("Orgname", "http://www.w3.org/2001/vcard-rdf/3.0#", "vCard"); XMLTriple created_triple = XMLTriple("created", "http://purl.org/dc/terms/", "dcterms"); XMLTriple modified_triple = XMLTriple("modified", "http://purl.org/dc/terms/", "dcterms"); XMLTriple W3CDTF_triple = XMLTriple("W3CDTF", "http://purl.org/dc/terms/", "dcterms"); XMLTriple empty_triple = XMLTriple( "", "", ""); /* attributes */ XMLAttributes blank_att = XMLAttributes(); XMLAttributes parseType_att = XMLAttributes(); parseType_att.add("rdf:parseType", "Resource"); /* tokens */ XMLToken bag_token = XMLToken(bag_triple, blank_att); XMLToken li_token = XMLToken(li_triple, parseType_att); // for L2V4 it was realised that it was invalid for the creator // to have a parseType attribute XMLToken creator_token; if (object->getLevel() > 2 || (object->getLevel() == 2 && object->getVersion() > 3)) { creator_token = XMLToken(creator_triple, blank_att); } else { creator_token = XMLToken(creator_triple, parseType_att); } XMLToken N_token = XMLToken(N_triple, parseType_att); XMLToken created_token = XMLToken(created_triple, parseType_att); XMLToken modified_token = XMLToken(modified_triple, parseType_att); XMLToken Family_token = XMLToken(Family_triple, blank_att); XMLToken Given_token = XMLToken(Given_triple, blank_att); XMLToken Email_token = XMLToken(Email_triple, blank_att); // for L2V4 it was realised that the VCard:ORG // should have a parseType attribute XMLToken Org_token; if (object->getLevel() > 2 || (object->getLevel() == 2 && object->getVersion() > 3)) { Org_token = XMLToken(Org_triple, parseType_att); } else { Org_token = XMLToken(Org_triple, blank_att); } XMLToken Orgname_token = XMLToken(Orgname_triple, blank_att); XMLToken W3CDTF1_token = XMLToken(W3CDTF_triple, blank_att); XMLToken W3CDTF2_token = XMLToken(W3CDTF_triple, blank_att); XMLToken empty_token = XMLToken(""); /* nodes */ XMLNode bag = XMLNode(bag_token); XMLNode created = XMLNode(created_token); XMLNode modified= XMLNode(modified_token); XMLNode W3CDTF1 = XMLNode(W3CDTF1_token); XMLNode W3CDTF2 = XMLNode(W3CDTF2_token); // // The following XMLNode objects are used only // in the for loop below (for each ModelCreator object // in ModelHistory object) and reset in each step. // Thus, they are defined only in the block in which // they are used to avoid a memory leak. // // XMLNode * N // XMLNode * Email // XMLNode * Org // XMLNode Family; // XMLNode Given // XMLNode Orgname // XMLNode li // /* now add the data from the ModelHistory */ for (unsigned int n = 0; n < history->getNumCreators(); n++) { XMLNode * N = 0; XMLNode * Email = 0; XMLNode * Org = 0; ModelCreator* c = history->getCreator(n); if (c->isSetFamilyName()) { XMLNode empty(empty_token); empty.append(c->getFamilyName()); XMLNode Family(Family_token); Family.addChild(empty); N = new XMLNode(N_token); N->addChild(Family); } if (c->isSetGivenName()) { XMLNode empty(empty_token); empty.append(c->getGivenName()); XMLNode Given(Given_token); Given.addChild(empty); if (!N) { N = new XMLNode(N_token); } N->addChild(Given); } if (c->isSetEmail()) { XMLNode empty(empty_token); empty.append(c->getEmail()); Email = new XMLNode(Email_token); Email->addChild(empty); } if (c->isSetOrganisation()) { XMLNode empty(empty_token); empty.append(c->getOrganisation()); XMLNode Orgname(Orgname_token); Orgname.addChild(empty); Org = new XMLNode(Org_token); Org->addChild(Orgname); } XMLNode li(li_token); if (N) { li.addChild(*N); delete N; } if (Email) { li.addChild(*Email); delete Email; } if (Org) { li.addChild(*Org); delete Org; } if (c->getAdditionalRDF()) { li.addChild(*(c->getAdditionalRDF())); } bag.addChild(li); } XMLNode creator(creator_token); creator.addChild(bag); description->addChild(creator); /* created date */ if (history->isSetCreatedDate()) { XMLNode empty(empty_token); empty.append(history->getCreatedDate()->getDateAsString()); W3CDTF1.addChild(empty); created.addChild(W3CDTF1); description->addChild(created); } /* modified date */ if (history->isSetModifiedDate()) { XMLNode empty(empty_token); empty.append(history->getModifiedDate(0)->getDateAsString()); W3CDTF2.addChild(empty); modified.addChild(W3CDTF2); description->addChild(modified); for (unsigned int n = 1; n < history->getNumModifiedDates(); n++) { XMLNode empty(empty_token); W3CDTF2.removeChildren(); modified.removeChildren(); empty.append(history->getModifiedDate(n)->getDateAsString()); W3CDTF2.addChild(empty); modified.addChild(W3CDTF2); description->addChild(modified); } } // add CVTerms here XMLNode *CVTerms = createCVTerms(object); if (CVTerms) { for (unsigned int i = 0; i < CVTerms->getNumChildren(); i++) { description->addChild(CVTerms->getChild(i)); } delete CVTerms; } XMLNode * RDF = createRDFAnnotation(); RDF->addChild(*description); delete description; XMLNode *ann = createAnnotation(); ann->addChild(*RDF); delete RDF; return ann; }