store = ARC2::getStore($this->config); if(!@$this->store->getDBCon()){ //On regarde si l'on peut se connecter avec les informations fournies $this->errors[]=$this->store->getErrors(); return false; }else{ if(!$this->store->isSetUp()) { //Si les tables du store n'existent pas //On crée les tables $this->store->setUp(); if($erreurs=$this->store->getErrors()){ //Si la création à échouée foreach ($erreurs as $value) { $this->errors[]=$value; } $this->close(); return false; }else{ //Si on viens de faire la création pour pouvoir faire autre chose on doit se déconnecter et se reconnecter $this->close(); $this->store = ARC2::getStore($this->config); } } return true; } } // end of member function connect /** * Déconnexion du store * * @return bool * @access public */ public function close() { $this->store->closeDBCon(); } // end of member function close /** * Charge un fichier RDF dans le store * * @param string onto_filepath Chemin du fichier RDF à  charger dans le store * @return bool * @access public */ public function load($onto_filepath){ global $dbh,$thesaurus_ontology_filemtime; //on charge l'ontologie seulement si la date de modification du fichier est > à la date de dernière lecture if(filemtime($onto_filepath)>$thesaurus_ontology_filemtime){ // le load ne fait qu'ajouter les nouveaux triplets sans supprimer les anciens, donc on purge avant... $this->store->reset(); //LOAD n'accepte qu'un chemin absolu $res=$this->query('LOAD '); if($res){ $query='UPDATE parametres SET valeur_param="'.filemtime($onto_filepath).'" WHERE type_param="pmb" AND sstype_param="ontology_filemtime"'; pmb_mysql_query($query,$dbh); return true; }else{ return false; } }else{ return true; } } // end of member function load /** * Exécute une requête SPARQL dans le store * Rempli le result de l'instance, sous forme de tableau de class std * * @param string query Requête sparql à  exécuter dans le store * @return bool * @access public */ public function query($query,$prefix=array()){ $query=$this->format_namespaces($prefix).$this->utf8_normalize($query); $result=array(); $tabResult=array(); if(!count($this->errors)){ //Si je n'ai pas déjà des erreurs //J'execute la requete $result = $this->store->query($query); if($erreurs=$this->store->getErrors()){ //Si l'execution de la requete a échoué foreach($erreurs as $value){ $this->errors[]=$value; } return false; }elseif(!$result){ //et que je n'ai pas de résultat $this->errors[]='Query '.$query.' failed.'; return false; }else{ //on transforme le résultat et on l'insère dans la variable $this->result if(sizeof($result["result"]["rows"])){ foreach($result["result"]["rows"] as $keyLine=>$valueLine) { //on construit l'objet $stdClass=new stdClass(); foreach($valueLine as $property=>$value){ $stdClass->{str_replace(" ","_",trim($property))}=$this->charset_normalize(trim($value)); } //et on insère l'objet dans le tablea de result $tabResult[$keyLine]=$stdClass; } } //on insère le tableau d'objet dans la variable $this->result $this->result=$tabResult; return true; } } return false; } // end of member function query } // end of onto_store_arc2