Questo articolo mostra come estrarre alcuni metadati descritti da ITSMO da un repository subversion.

ITSMO è un vocabolario per annotare servizi IT. Uno dei concetti introdotti da ITSMO è quello di "Configuration Item".

Uno degli attributi più importanti del Configuration item è senz'altro quello che lega il Configuration Item con la sua  "configurazione" memorizzata in un CMDB  .

Un modo efficace per gestire una configurazione è quello di memorizzarla come una directory in un repository Subversion.

Il comando svn info, lanciato in una directory sotto il controllo di subversion fornisce un output simile a questo:


Path: .
URL: https://subversion.assembla.com/svn/itsmo/trunk/v1
Repository Root: https://subversion.assembla.com/svn/itsmo
Repository UUID: aa9e2203-f931-4cdb-89b8-cce8243f9edb
Revision: 127
Node Kind: directory
Schedule: normal
Last Changed Author: e-artspace
Last Changed Rev: 127
Last Changed Date: 2011-09-04 10:01:38 +0000 (Sun, 04 Sep 2011)

Da queste informazioni possiamo ricavare preziosi metadati che possono essere annotati con l'ontologia ITSMO ed in particolare:

  1. l'URI della configurazione ( itsmo:hasConfiguration) dal campo URL
  2. l'URI del CMDB ( itsmo:hasCMDB) dal campo Repository Root
  3. L'URI della baseline ( itsmo:hasBaseline) che si può facilmente ottenere dal numero di Revisione (nel campo Revision). Un semplice sistema per ricavare un uri è quello di aggiungere un frammento  all'URI della configurazione; ad esempio:
    https://subversion.assembla.com/svn/itsmo/trunk/v1#127
    Purtroppo un url così formato non è dereferenziato in modo ottimale. Un metodo più complicato ma efficace è di comporre l'URI della snapshot partenedo dalle informazioni già ricavate per  CMDB, configuration e revision come nel seguente esempio:
    https://subversion.assembla.com/svn/itsmo/trunk/!svn/bc/127/trunk/v1
    vedi il questo articolo per maggiori informazioni .

Ecco una semplice classe php che estrae i metadati e come utilizzarla per generare linked data:


<?php
//Place this code in the configuration directory
class SvnITSMOMetadata{
 protected function  parseInfo($s){
      return preg_match("/$s:\s+(.*)/",$this->svninfo, $matches)?trim($matches[1]):"unknown";
 }
 
 public function __construct($subject) { 
  $this->subject=$subject;
  exec('svn info', $out);
  $this->svninfo=implode("\n",$out);
  $this->CMDB=$this->parseInfo('Repository Root');
  $this->configuration=$this->parseInfo('URL');
  $this->revision=$this->parseInfo('Revision');
  $this->baselinePath=substr($this->configuration, strlen($this->CMDB));
  $this->baselineURI= $this->CMDB.'/!svn/bc/'.$this->revision.$this->baselinePath;
 }
 
 public function showTurtle(){
    echo "
     @prefix itsmo: <http://ontology.it/itsmo/v1#>
     <$metadata->subject> itsmo:hasConfiguration <$metadata->configuration>;
        rdfs:comment 'The based subversion configuration for $this->subject'.
        itsmo:hasCMDB <$metadata->CMDB>;
        itsmo:hasBaseline <$this->baselineURI>;
     <$this->baselineURI> rdfs:label 'Revision $this->revision';
        rdfs:comment '$this->svninfo'.
    ";
 }
}

$metadata= New SvnITSMOMetadata("http://example.com/MyConfigUri");
$metadata->showTurtle();