{"id":2862,"date":"2015-02-11T00:00:00","date_gmt":"2015-02-11T00:00:00","guid":{"rendered":"https:\/\/structr.com\/prototyping-von-webanwendungen-mit-structr-und-neo4j\/"},"modified":"2025-03-24T13:45:55","modified_gmt":"2025-03-24T13:45:55","slug":"prototyping-von-webanwendungen-mit-structr-und-neo4j","status":"publish","type":"post","link":"https:\/\/structr.com\/de\/blog\/prototyping-von-webanwendungen-mit-structr-und-neo4j\/","title":{"rendered":"Prototyping von Webanwendungen mit Structr und Neo4j"},"content":{"rendered":"<div class=\"wpb-content-wrapper\"><p>[vc_row][vc_column][vc_column_text]Auf dem Neo4j-Meetup in Amsterdam im Januar habe ich einen Vortrag \u00fcber das Prototyping von Webanwendungen mit Structr gehalten. Dieses Mal bestand die besondere Aufgabe darin, eine bestehende Neo4j-Datenbank zu verwenden, die mit einigen Testdaten gef\u00fcllt wurde, die w\u00e4hrend des vorherigen Treffens mit <a href=\"https:\/\/github.com\/neoxygen\/graphgen\" target=\"_blank\" rel=\"noopener\">GraphGen<\/a>, einem sehr n\u00fctzlichen Tool zur Graphengenerierung von Christophe Willemsen, erzeugt wurden. <\/p>\n<p>Die Einzelheiten k\u00f6nnen Sie in Riks gro\u00dfartigem Blogbeitrag nachlesen: <a href=\"http:\/\/blog.bruggen.com\/2014\/12\/prototyping-graph-database.html\" target=\"_blank\" rel=\"noopener\">Prototyping einer Graph-Datenbank<\/a>.<\/p>\n<p>Aufgrund des langsamen WiFi-Netzes war es nicht m\u00f6glich, Structr herunterzuladen und erfolgreich zu installieren, da f\u00fcr das Hands-On die neueste Version 1.1-SNAPSHOT von Structr ben\u00f6tigt wurde. Daher habe ich versprochen, einen Blog-Beitrag \u00fcber die Prototyping-Session zu schreiben, damit jeder nachvollziehen kann, was ich im Hands-On-Teil gemacht habe. Hier ist er also (besser sp\u00e4t als nie). <\/p>\n<h3 id=\"warum-brauchten-wir-den-neuesten-structr-snapshot\">Warum brauchten wir den neuesten Structr-Snapshot?<\/h3>\n<p>Die mit GraphGen erstellte Datenbank enth\u00e4lt Knoten mit einem Namensattribut und einem Label. Structr ben\u00f6tigt zwei zus\u00e4tzliche Attribute: &#8222;Typ&#8220; und &#8222;id&#8220;. Es gibt einen eingebauten Wartungsbefehl, der die id-Eigenschaft hinzuf\u00fcgt und sie mit einer UUID f\u00fcllt. Dies ist der prim\u00e4re Bezeichner f\u00fcr jedes Graph-Objekt in Structr.   <\/p>\n<p>Das type-Attribut wird ben\u00f6tigt, um den prim\u00e4ren Typ zu markieren, da ein Knoten mehrere Labels haben kann, die in Structrs Java OGM auf Klassen und Schnittstellen abgebildet werden. Um Structr in die Lage zu versetzen, diese Knoten zu verwenden, musste ich einen kleinen Patch auf Structr anwenden, damit der erw\u00e4hnte Bulk-Befehl beim Hinzuf\u00fcgen der UUID auch das Typ-Attribut hinzuf\u00fcgt. <\/p>\n<p>Sie k\u00f6nnen die neueste Snapshot-Version von hier herunterladen:<\/p>\n<p><a href=\"https:\/\/oss.sonatype.org\/content\/repositories\/snapshots\/org\/structr\/structr-ui\/1.1-SNAPSHOT\/\" target=\"_blank\" rel=\"noopener\">https:\/\/oss.sonatype.org\/content\/repositories\/snapshots\/org\/structr\/structr-ui\/1.1-SNAPSHOT\/<\/a><\/p>\n<p>Unter OS X laden Sie die Datei dist.tar.gz herunter, auf Debian-basierten Linux-Maschinen k\u00f6nnen Sie entweder das .deb-Paket oder auch die Datei dist.tar.gz verwenden.<\/p>\n<p>Bitte beachten Sie, dass diese Version gegen Neo4j 2.1.6 kompiliert wurde und daher nur mit Neo4j-Datenbanken funktioniert, die mit Version 2.1 und darunter erstellt wurden. Wenn Sie eine neuere Version der Datenbank verwenden, wie z.B. 2.2 Milestone 1 oder sp\u00e4ter, kontaktieren Sie uns bitte \u00fcber help@support.structr.com, damit wir Ihnen eine Structr-Version zur Verf\u00fcgung stellen k\u00f6nnen, die mit diesen Versionen funktioniert. <\/p>\n<h3 id=\"einrichtung\">Einrichtung<\/h3>\n<p>Um Structr zu installieren, laden Sie das tar.gz- oder Debian-Paket herunter und folgen Sie den Anweisungen in der Dokumentation, die Sie hier finden: http:\/\/docs.structr.org\/installation-and-configuration-guide<\/p>\n<h4 id=\"kopieren-sie-die-bestehende-datenbank-in-das-verzeichnis-structr\">Kopieren Sie die bestehende Datenbank in das Verzeichnis Structr<\/h4>\n<p>Bevor Sie Structr starten, m\u00fcssen Sie das Verzeichnis graph.db der zuvor erstellten Datenbank in das structr-ui Verzeichnis kopieren. Wenn Sie Structr bereits gestartet haben, stellen Sie sicher, dass Sie die bestehenden Verzeichnisse &#8222;db&#8220; und &#8222;files&#8220; verschieben. <\/p>\n<p>Ihre Installation war erfolgreich, wenn Sie die Structr Backend UI und den Neo4j Browser unter diesen Adressen erreichen k\u00f6nnen:<\/p>\n<pre>http:\/\/localhost:8082\/structr<\/pre>\n<pre>http:\/\/localhost:7474\/<\/pre>\n<p>Wenn Structr keine Knoten findet, die den Structr-Anforderungen entsprechen, importiert es eine Seed-Datei (seed.zip), die eine Beispiel-Webseite (&#8222;Welcome&#8220;) und einen ersten Benutzer (&#8222;admin&#8220; mit Passwort &#8222;admin&#8220;) enth\u00e4lt.<\/p>\n<h4 id=\"das-datenmodell\">Das Datenmodell<\/h4>\n<p>Das folgende Bild zeigt das Datenmodell, das beim letzten Treffen als Grundlage f\u00fcr die Bef\u00fcllung der Datenbank mit Beispieldaten verwendet wurde.<\/p>\n<h4 id=\"anlegen-der-knotentypen\">Anlegen der Knotentypen<\/h4>\n<p>Um auf diese Daten in Structr zugreifen zu k\u00f6nnen, m\u00fcssen wir das entsprechende Metamodell in Structr mit dem visuellen Schema-Editor erstellen. Gehen Sie in den Bereich &#8222;Schema&#8220; und erstellen Sie die folgenden neuen Typen: <\/p>\n<pre>Company, User, Department, Service, Software<\/pre>\n<p>Klicken Sie dann auf die Schaltfl\u00e4che &#8222;Werkzeuge&#8220;, um den Werkzeugdialog zu \u00f6ffnen, und f\u00fcgen Sie UUIDs zu allen oben genannten Typen hinzu, indem Sie den Knotentyp ausw\u00e4hlen und auf die Schaltfl\u00e4che &#8222;UUIDs hinzuf\u00fcgen&#8220; klicken.<\/p>\n<p>Wenn Sie mit allen Knotentypen fertig sind, sollten die Daten im Abschnitt Daten angezeigt werden, allerdings ohne Beziehungen.<\/p>\n<h4 id=\"beziehungsklassen-erstellen\">Beziehungsklassen erstellen<\/h4>\n<p>Wir wollen nat\u00fcrlich auch die Beziehungen zwischen den Datenknoten sehen, und alles, was wir tun m\u00fcssen, ist, die m\u00f6glichen Beziehungen zum Datenmodell in Structr hinzuzuf\u00fcgen.<\/p>\n<p>Dies kann durch Zeichnen einer Beziehung im Schema-Editor geschehen. Klicken Sie mit der Maustaste auf den unteren Verbindungspunkt eines Quellknotens, halten Sie sie gedr\u00fcckt und ziehen Sie die Beziehungen auf den oberen Verbindungspunkt des Zielknotens, mit dem Sie eine Verbindung herstellen m\u00f6chten. Klicken Sie dann auf die Beziehungsbeschriftung und geben Sie den Beziehungstyp genau so ein, wie er auf den Beziehungen im Datenmodellbild steht. Um die Beziehungsdefinition abzuschlie\u00dfen, definieren Sie die Kardinalit\u00e4t, indem Sie die Multiplizit\u00e4t auf Quell- und Zielknoten festlegen (zul\u00e4ssige Werte sind 1 und *).   <\/p>\n<p>Wiederholen Sie diesen Vorgang f\u00fcr jeden anderen Beziehungstyp im Datenmodell. Danach zeigt Structr die zugeh\u00f6rigen Knoten in der Datenansicht in einer Spalte an, die automatisch hinzugef\u00fcgt und entsprechend dem Typ des anderen Knotens und dem Beziehungstyp benannt wird. Sie k\u00f6nnen die Namen dieser Remote-Attribute im Knoten-Detail-Dialog des Schema-Editors \u00fcberschreiben.  [\/vc_column_text][vc_single_image image=&#8220;990&#8243; img_size=&#8220;large&#8220;][vc_column_text]<\/p>\n<h4 id=\"webanwendung-erstellen\">Webanwendung erstellen<\/h4>\n<p>Sobald das Datenmodell in Structr die Datenstrukturen in Neo4j widerspiegelt, k\u00f6nnen Sie zum Abschnitt Seiten gehen, eine Vorlage importieren (wir haben das bekannte <a href=\"http:\/\/getbootstrap.com\/examples\/jumbotron\" target=\"_blank\" rel=\"noopener\">Bootstrap Jumbotron<\/a> Beispiel verwendet), eine Abfrage eingeben und eine Datenbindung auf die Ergebnisse anwenden:[\/vc_column_text][vc_single_image image=&#8220;984&#8243; img_size=&#8220;large&#8220;][vc_column_text]In unserem Beispiel haben wir eine Liste mit den in der Beispieldatenbank enthaltenen Unternehmen erstellt.[\/vc_column_text][vc_single_image image=&#8220;985&#8243; img_size=&#8220;large&#8220;][vc_column_text]Um den Namen eines Unternehmens anzuzeigen, k\u00f6nnen Sie einfach <code>${company.name}<\/code> als Platzhalter verwenden:[\/vc_column_text][vc_single_image image=&#8220;986&#8243; img_size=&#8220;large&#8220;][vc_column_text]Dieser Blogbeitrag endet hier. Wenn Sie mehr erfahren m\u00f6chten, k\u00f6nnen Sie \u00fcber die Kommentarfunktion unten eine Diskussion starten oder unserer <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/structr\" target=\"_blank\" rel=\"noopener\">Mailingliste<\/a> beitreten.[\/vc_column_text][\/vc_column][\/vc_row]<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>[vc_row][vc_column][vc_column_text]Auf dem Neo4j-Meetup in Amsterdam im Januar habe ich einen Vortrag \u00fcber das Prototyping von Webanwendungen mit Structr gehalten. Dieses \u2026<\/p>\n","protected":false},"author":2,"featured_media":2863,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[519,544,543],"tags":[549,552,561,546,560,554,556,550,547,559,553,548,545,558,555,557,551],"class_list":["post-2862","post","type-post","status-publish","format-standard","hentry","category-neo4j-de","category-prototyping-de","category-structr-de","tag-automatisierung","tag-backend-de","tag-beziehungen","tag-bootstrap-de","tag-datamodel-de","tag-datenbank","tag-graphdatabase-de","tag-kodierung","tag-neo4j-de","tag-prototyping-de","tag-schema-editor-de","tag-software-entwicklung","tag-structr-de","tag-structrscripting-de","tag-ui-de","tag-vorderseite","tag-web-entwicklung"],"acf":[],"_links":{"self":[{"href":"https:\/\/structr.com\/de\/wp-json\/wp\/v2\/posts\/2862","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/structr.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/structr.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/structr.com\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/structr.com\/de\/wp-json\/wp\/v2\/comments?post=2862"}],"version-history":[{"count":1,"href":"https:\/\/structr.com\/de\/wp-json\/wp\/v2\/posts\/2862\/revisions"}],"predecessor-version":[{"id":2866,"href":"https:\/\/structr.com\/de\/wp-json\/wp\/v2\/posts\/2862\/revisions\/2866"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/structr.com\/de\/wp-json\/wp\/v2\/media\/2863"}],"wp:attachment":[{"href":"https:\/\/structr.com\/de\/wp-json\/wp\/v2\/media?parent=2862"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/structr.com\/de\/wp-json\/wp\/v2\/categories?post=2862"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/structr.com\/de\/wp-json\/wp\/v2\/tags?post=2862"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}