/**
  * Unmarshall a XML diagram file into an object structure (DiaDiagram)
  *
  * @param   string filename The diagram filename (.dia)
  * @return  org.dia.DiaDiagram
  */
 public static function unmarshal($diagram)
 {
     // suck in XML document
     if (!($dom = domxml_open_file($diagram, DOMXML_LOAD_PARSING, $error))) {
         throw new XMLFormatException(xp::stringOf($error));
     }
     // initialize XPath
     $XPath = new XPath($dom);
     // TODO: if the URI is wrong, unmarshalling won't work!
     $XPath->registerNamespace('dia', 'http://www.lysator.liu.se/~alla/dia/');
     // new (unused): $XPath->registerNamespace('dia', 'http://www.gnome.org/projects/dia/');
     // go
     $Dia = DiaUnmarshaller::recurse($XPath, $dom->document_element(), 'org.dia.DiaDiagram');
     Console::writeLine('DiaUnmarshaller used up ' . round(memory_get_usage() / 1024, 2) . ' Kb of memory.');
     return $Dia;
 }