Jupyter-Prototyping mit ArcadeDB

Ergebnisse von Datenbankabfragen sind für eine Ausgabe in Jupyter Notebooks vorformatiert. Die Methode html_attributes steuert die Darstellung sowohl für die Ausgabe von Datenbank-Objekten wie auch die von Listen.

Ein Jupyter-Notebook ist eine webbasierte interaktive Rechenumgebung, in der Code, Text und Visualisierungen in einem einzigen Dokument kombiniert werden.

IRuby

Jupyter Notebooks können auch einen aktuellen Ruby-Kernel laden und dann Ruby-Programme ausführen. Auf der Ruby-Seite muss nur das iruby-Gem eingebunden werden.

## Gemfile
gem "arcadedb" 
gem 'iruby'
(  )

Formatierung der Ausgabe

Die Ausgabe in Jupyter Notebooks wird durch IRuby.display, IRuby.html und IRuby.table Befehle in der Methode to_html der auszugebenden Klasse definiert.

In ArcadeDB ist die Ausgabe von Datenbankinhalten in lib/arcade/base.rb wir folgt formuliert

def to_html  # iruby
  the_rid = "[#{rid}] : {#{self.in.count}->}{->#{self.out.count }}"
  IRuby.display IRuby.html "<span style=\"color: #50953DFF\">
                                  <b>#{self.class}</b><#{the_rid}
                             </span>
                < #{html_attributes.map{|_,v|  v }.join(', ')} >"
end

Wird die Methode nicht überschrieben, wird zunächst die Datenbank-Klasse ausgegeben, gefolgt von der RID-des Datensatzes und der Anzahl ein- und ausgehender Edges, alles grün. Es folgt eine Liste der Werte der in der Methode html_attributes definierten Datenbankfelder.

Member.find name: ‘Gross’
Member[#49:43] : {0->}{->0} < Frau, Maria, Gross, Lüneburg, Hauptstr. 12a >

Die Methode find gibt einen Datensatz zurück. Deshalb ruft iruby die Methode to_html auf. Die Methode where gibt ein Array zurück. Deshalb verändert sich die Ausgabe.

Member.where name: ‘Gross’


SexVornameNameOrtStraße
FrauMariaGrossLüneburgHauptstr. 12a

Es wird eine Tabelle mit jetzt einer Datenzeile und der Überschrift ausgegeben. Die Ausgabe selbst ist in Array.to_html formuliert, die im wesentlichen IRuby.table aufruft.

Beide Ausgaben werden durch die Methode html_attributes mit Leben erfüllt:

def html_attributes  # Standard
  invariant_attributes
end



def html_attributes  # customized
 {     Sex: :sex,
   Vorname: :surname,
      Name: :name,
       Ort: :town,
    Straße: :street } 
end

Im Ergebnis können alle Datenbankausgaben über die Methode html_attributes im Model-File an die Bedürfnisse angepasst werden. Dies ist ein vertretbarer Aufwand für die Adaption an Jupyter-Notebooks.