SVG Grafik und zugehörige Formulardaten sichern
TclTk_Erfahrener
- browser
Hallo miteinander,
ich hoffe ich poste das hier im richtigen Themenbereich, weil das ganze bereichsübergreifend ist, aber der Browser ist zu mindest mal im Moment der Haken an der Sache.
Erstmals die Vorgeschichte, der Ist-Zustand sozusagen:
Ich habe einen kleinen, auf SVG basierenden Zeicheneditor erstellt, dessen "Programmlogik" in JavaScript geschrieben ist. Zum Beispiel, wenn der Benutzer versucht ein Zeichenelement aus der Zeichenfläche hinauszuschieben wird das Element wieder zurückgesetzt und ähnliche Funktionen.
Das ganze ist in eine html-Seite eingebunden, weil ich davon ausgehe, dass der Adobe-SVG-Viewer die bisher besten Ergebnisse bei der Arbeit mit SVG-Dateien bingt(?) und ausserdem werden per JavaScript Formularfelder angelegt, wenn der Benutzer ein Zeichenelement beschriftet.
In diesem Formular werden bisher Attribute des Zeichenelements, zB. der Radius, und die Anzahl der gleichen Zeichenelemente ( gleiche Beschriftung, setzt gleiche Attribute voraus) angezeigt.
Der Browser soll nur als Frontend dienen, es ist im Moment noch kein Zugriff über das Internet vorgesehen, liegt aber nicht im Bereich des unmöglichen.
Das ganze läuft also lokal auf einem Rechner.
Ein konkreteres Beispiel:
Der Benutzer zeichnet ein Aufhängeregal, mit 3 Regalbrettern und 2 Metallschienen und 6 Aufhängungen.
Er beschriftet nun ein Regalbrett, mit "Regalbrett". Es wird nun ein Formularfeld angelegt:
Regalbrett 20cm 1
er beschriftet die nächsten Bretter genau gleich und es wird die Anzahl hochgezählt, also 3:
Regalbrett 20cm 3
Das gleiche Spiel mit den Metallschienen und den Aufhängungen.
So weit steht das alles, dazu kommen soll:
Er soll nun zu diesen Einträgen weitere Attribute wie Material oder Zustand auswählen können.
Also zum Regalbrett aus Materialien, wie Holz, Metall, Kunstoff... wählen können und eventuell abhängig davon dann eine Feinauswahl, zu Holz kann man dann Birke, Buche, Eiche, Pappel usw. auswählen.
Das Problem
Diese Daten müssen nun irgendwo her kommen und nach der Erfassung des Objekts, dazu kommen wohl noch Namen des Objekts und des Erstellers, auch gesichert werden.
Und genau hier komme ich nicht weiter.
Die Art wie die Daten bereit gestellt werden sollen legt eine Datenbank nahe. Nur ist die Frage wie greife ich darauf zu ?
Bisherige Lösungsansätze:
Unter dem IE kann ich mittels eines Active-X Objekts auf die Festplatte schreiben und davon lesen. Ich könnte also Textdateien schreiben und auslesen, oder etwas strukturierter in eine XML-Datei. Allerdings bleibt dann die Auswerterei der Zusammenhänge an mir bzw. meinem Programm hängen.
Dies ist im obigen Beispiel noch gangbar, wenn es keine Mehrfachzuordnungen gibt, werden die Datensätze aber komplexer wirds schon schwieriger, ausserdem bin ich dann Browser gebunden.
Über ein Applet, kann ich prima auf eine DB zugreifen, solange es signiert ist und der Aufruf direkt aus dem Applet heraus erfolgt. Rufe ich die Appletfunktionen von JavaScript heraus aus, zB. als Reaktion auf eine Eingabe in ein Formularfeld dann wird mir der Zugriff verweigert. Die geringeren Rechte des JavaScripts überschreiben da wohl die erweiterten Rechte des signierten Applets. Also ist dieser Lösungsansatz auch nur bedingt nutzbar.
Aus Java-Script heraus könnte ich über ein Active-X Objekt und Dos-Kommandos auch batch-Dateien anstossen die Zugriffe auf die Festplatte ausführen und oder SQL-Kommandos etc. absetzen und das Ergebnis in eine Textdatei schreiben, die ich dann wieder per JavaScript auslese und das Ergebnis in die entsprechenden Felder schreibt.
Wieder ActiveX und umständliche Kommunikation zwischen den Komponenten, also auch nicht das wahre.
Warum hab ich mich so verkünstelt?
Das ganze soll lokal laufen und ich möchte eigentlich vermeiden einen lokalen Server aufzusetzen nur damit ich PHP oder ähnliches nutzen kann.
Kann ich zB. das JavaScript signieren, ohne 900 Dollar an VeriSign oder eine vergleichbare Firma abzudrücken ( für 1 Jahr Gültigkeit), und diesem so mehr Rechte einzuräumen oder diese per policy-Datei zu gewähren ?
Oder gibt es eine ganz andere Technik die es mir erlaubt aus der Browser-Sandbox auszubrechen ? Oder denke ich bisher in die ganz falsche Richtung ?
ok vielleicht ein klein ;) wenig lang geraten, aber ich wollte halt einen komplett Überblick geben, wie was und warum.
Kurzfassung:
Welche Möglichkeit habe ich zwischen einer html-Seite und meiner lokalen Festplatte Daten auszutauschen?
Hallo!
Welche Möglichkeit habe ich zwischen einer html-Seite und meiner lokalen Festplatte Daten auszutauschen?
Wie du es bereits machst, per COM-Automation(ActiveX). Dann kannst du das Ganze aber auch gleich als HTA-Anwendung umsetzen.
Willst du dir aber die Option offen halten, es irgendwann webfähig zu machen, dann ist der COM-Ansatz letztendlich eine Sackgasse.
Was spricht denn gegen den Einsatz eines Webservers?
Die Daten würde ich in XML-Form speichern, weil du dann die (elementaren) SVG-Elemente eins zu eins übernehmen kannst.
Gruß Uwe
Hallo Uwe
Hallo!
Welche Möglichkeit habe ich zwischen einer html-Seite und meiner lokalen Festplatte Daten auszutauschen?
Wie du es bereits machst, per COM-Automation(ActiveX). Dann kannst du das Ganze aber auch gleich als HTA-Anwendung umsetzen.
»»
Auf hta bin ich irgendwann auch mal gekommen und hab dann einfach mal meine start.html in start.hta unbenannt. Das war wohl ein wenig zu blauäugig an die Sache rangegangen, da ich beim Start dann einen Fehler aus einem DOM-Zugriff bekam (top.document.Formularname.childNodes ist Null oder kein Objekt).
Ich hab die Sache nicht genau weiter verfolgt, weil ich mir nicht sicher war, wie SVG mit HTA zusammenarbeitet.
Ah ok hab grad den Fehler beseitigt bekommen und hab dann festgestellt, dass SVG in HTA gar nicht dargestellt wird :(
Dann muss ich mich mal nähers mit der COM-Automation beschäftigen.
Willst du dir aber die Option offen halten, es irgendwann webfähig zu machen, dann ist der COM-Ansatz letztendlich eine Sackgasse.
Was spricht denn gegen den Einsatz eines Webservers?
Vor allem meine Unwissenheit auf diesem Gebiet. Eigentlich wollte ich möglichst jeden zusätzlichen Ballast vermeiden.
Server hört sich für mich nach Administrationsaufwand und Ressourcenverbrauch ( Rechenleistung, Speicher )an, allerdings hab ich absolut gar keine Vorstellung wie gravierend das wirklich ist.
Auch will ich es für den Anwender so einfach wie möglich halten, entweder der Server läuft dann immer im Hintergrund oder muss vom Benutzer eigens gestartet werden, wenn er das Programm benutzen will ( ist das überhaupt möglich oder muss so ein Server mit dem OS gestartet werden? ).
Wie gesagt ich hab von dem Thema keine Ahnung und ich stell mir das viel schlimmer vor als es wirklich ist, aber ich lass mich da gerne eines besseren belehren.
Wie groß ist der Aufwand für einen lokal laufenden WebServer ?
Kann ich so einen WebServer "unsichtbar" für den Benutzer machen ?
Vor Allem, da ich gemerkt habe, dass die Verwendung eines Applets und der damit verbundene Start der JRE, das "Starten" einer htm-Seite deutlich rauszögert. ( und zuvor muss das ganze dann auch noch installiert werden, was auch ein Gegenargument zum Server war)
Die Daten würde ich in XML-Form speichern, weil du dann die (elementaren) SVG-Elemente eins zu eins übernehmen kannst.
Um die Zeichnung zu speichern ist das sicher der geschickteste Weg: Die Zeichnung einfach direkt als SVG zu sichern und in einer DB dann die anderen Daten, wie Beschriftung, Material, Menge, Gewicht etc....
Hab bisher überlegt als DB entweder eine .mdb-Datei ( Access ist halt schon da) oder sqlite zu verwenden.
Ersteres hat den Vorteil, dass ich mich da schon wenig auskenne, also wäre die Struktur leicht angelegt und es muss auch nicht überall Access installiert sein.
Zweiteres hätte den Vorteil, dass ich es mit SQL-Kommandos aus der Konsole (über ActiveX) ansprechen kann und die "Installation" keinen nennenswerten Nachteil bringt.
Leider könnte ich in beiden Fällen in der DB nur einen Verweis auf die gespeicherte Zeichnung hinterlegen, da die Sicherung von XML in DBs anscheinend nur größere Systeme können.
Eine DB wäre im Allgemeinen schon wünschenswert, da ich dem Benutzer ggf. noch Suchfunktionen bereitstellen will ( zB. alle Objekte von einem bestimmten Ersteller, oder die Holz als Material verwenden). Aber das soll erst mal eine andere Hürde sein, kann ja noch nichts durchsuchen :)
Gruß Uwe
»»
Danke für die Antwort,
jetzt hab ich wieder ein paar Ansätze über die ich nachdenken kann. Vor allem da mir beim Antworten auf deinen Eintrag auffiel, dass ich durch meine Versuche schon einige Gegenargumente gegen einen Webserver ausgehebelt habe... hatte einfach noch im Hinterkopf Webserver != optimale Lösung.
Hallo!
und hab dann einfach mal meine start.html in start.hta unbenannt. Das war wohl ein wenig zu blauäugig
Nein das war nicht zu blauäugig, denn viel mehr ist es tatsächlich nicht. Bei HTA fallen Restriktionen, die durch den http-Kontext gegeben sind, weg, Und HTA bietet dir ein paar Einstellunen in bezug auf das Fenster. Ansonsten verwendest du absolut die gleichen Techniken, die du in einer HTML-Seite verwendest. Plus natürlich die COM-Automation.
Was spricht denn gegen den Einsatz eines Webservers?
Vor allem meine Unwissenheit auf diesem Gebiet.
Du musst eine Grundsatzentscheidung treffen, Standalone-Anwendung oder Webanwendung. Grundlage solcher Entscheidungen darf niemals sein "was man kann", sondern nur "was die geeignetsten Technologien sind".
Wenn du dich für eine Standalone-Anwendung entscheidest,dann konzipiere sie so, dass du mit "wenigen Handgriffen" daraus eine Webanwendung machen kannst. Dazu gehört der Verzicht auf proprietäre Techniken und die Trennung der verschiedenen Funktionalitäten. Du musst beispielsweise den Zugriff auf deine Datenquelle unabhängig von der Datenquelle implementieren.
Eine DB wäre im Allgemeinen schon wünschenswert, da ich dem Benutzer ggf. noch Suchfunktionen bereitstellen will
Das ist alles problemlos auch mit einer xml-Datenquelle möglich. Der riesige Vorteil einer xml-Datenquelle ist, dass dir die standardisierten Techniken, mit denen du sie manipulierst. überall zur Verfügung stehen.
hab dann festgestellt, dass SVG in HTA gar nicht dargestellt wird :(
Dazu kann ich dir nichts sagen, dass musst du klären, ob das prinzipiell möglich ist. Ich gehe aber eigentlich davon aus.
Dann muss ich mich mal nähers mit der COM-Automation beschäftigen.
Da musst du dich nicht groß mit beschäftigen. Der einzige Grund, warum du COM-Automation überhaupt einsetzt, ist, damit du Zugriff auf das lokale Dateisystem hast, um Daten zu lesen und zu schreiben. Ich nehme an du verwendest dafür das FSO (file system object). Mehr brauchst du nicht, alles andere solltest du mit Techniken machen, die auch im http-Kontext zulässig sind.
Gruß Uwe
Hallo
hab dann festgestellt, dass SVG in HTA gar nicht dargestellt wird :(
Dazu kann ich dir nichts sagen, dass musst du klären, ob das prinzipiell möglich ist. Ich gehe aber eigentlich davon aus.
Seit wann beherrscht der MSIE (dessen Einsatz für die Ausführung von HTAs vorausgesetzt wird) SVG? ;-)
Tschö, Auge
Hallo Auge!
Seit wann beherrscht der MSIE ... SVG? ;-)
Man sollte es nicht glauben, aber er tut's ;-)
Ich habe schon vor rund vier Jahren eine relativ komplexe SVG-Anwendung entwickelt, die problemlos im MSIE 6.x lief. Das früher noch ein SVG-Prozessor als Plug-In eingebunden werden musste, während dies heutzutage integraler Bestandteil der meisten Browser ist, tut dem keinen Abbruch.
Gruß Uwe
Hallo!
Ich nehme an du verwendest dafür das FSO (file system object). Mehr brauchst du nicht,
Da habe ich im Eifer des Gefechtes Quatsch geschrieben. Das FSO ist nur für den Zugriff auf Textdateien bzw. für einen binären Zugriff. Welche COM-Komponente du benötigst hängt natürlich davon ab, welche Datenquelle zugrunde liegt, beispielsweise die MSXML-Komponente für eine xml-Datenquelle (wobei das natürlich auch nur eine Textdatei ist).
Aber ich hoffe ja sowieso, dass du dich für die Webanwendung entscheidest :-)
Gruß Uwe
Ola
Aber ich hoffe ja sowieso, dass du dich für die Webanwendung entscheidest :-)
Gruß Uwe
Auf jeden Fall mache ich mich mal in diese Richtung schlau, bin leider übers WE nicht so richtig dazu gekommen.
Hab mal testweise nen Apache installiert und versucht den lokal laufen zu lassen. Ich ging dabei nach diesem HowTo vor.
Zumindest mal die Installationsgröße hat mich überrascht, hatte mit mehr gerechnet, die Kosten sind auch ok ;) und den sonstigen Ressourcenverbrauch konnte ich noch nicht genau anschauen.
Hatte nur Probleme beim Download des PHP-Moduls, aber das bekomme ich auch noch hin, anderer mirror andere Datei, dann wird das schon.
Werde mich in den nächsten Schritten mal mit PHP und Apache auseinandersetzen und noch ein klein wenig Zeit investieren um die Möglichkeit einer Signatur für JavaScript Code zu untersuchen.
Eventuell werd ich mir auch mal die unterschiedlichen Objekte für ActiveX anschauen.
Werde auf jeden Fall Rückmeldung geben sobald ich Ergebnisse hab.
Schöne Gruß
Markus