XML Renderer



  • Hallo,

    derzeit arbeite ich an einer Childklasse zur Anzeige von XML Daten. Die Klasse bekommt eine XML-Struktur und zeigt diese unter Berücksichtigung der evt. verknüpften CSS-Datei an.

    Die Planung sieht folgende Meilensteine vor:

    • Anzeige der XML-Struktur (Dieser Punkt ist schon sehr weit geschritten)
    • Bearbeiten der XML-Struktur (Derzeit wird bei einem Klick dem Elternfenster nur mitgeteilt welches XML-Element angeklickt wurde).
    • Anzeige und Bearbeiten von HTML.
    • Anzeige einer XSL-Transformation und Bearbeiten der XML Quelle (soll heissen, die XML wird vor der Anzeige durch eine XSL-Transformation geschickt. Beim Ändern der Inhalte sollen aber die ursprünglichen XML-Elemente bzw. -Attribute geändert werden / Die XSL-Transformation ist zwar schon implementiert, aber sie kümmert sich derzeit noch überhaupt nicht darum in der Zielstruktur zu vermerken, woher die Inhalte kommen)

    Derzeit ist die Implementierung so, daß ich die Childklasse in eigene Anwendungen (z.B. VCL oder direkt Windows API) einbinden kann. Jetzt bin ich am Überlegen, ob es sich lohnt, die Klasse so zu implementieren, daß ich sie als DLL für Windows oder Shared Library für Linux/X11 bzw. Mac OS X weitergeben kann. Ich würde sie zwar kostenlos weitergeben wollen, aber ich bin derzeit nicht bereit die Quellen zu veröffentlichen. Jetzt meine Frage: Besteht da ein grundsätzliches Interesse oder kann ich mir die Mühe sparen? Gibt es evt. schon andere Lösungen (z.B. VCL-Komponenten) für diese Aufgabe?

    mfg Martin



  • Schämst du dich für die schlechte Code-Qualität?



  • Ich kann mir jetzt nicht viel konkretes drunter vorstellen. Hört sich aber irgendwie nach sehr speziellen Anforderungen an, die nicht viele haben. Und wenn jemand solche Anforderungen hat, dann wird er sowas am ehesten auch selber schreiben wollen, damit es zum restlichen Code und auch zum Look and Feel passt.

    Poste mal am besten ein paar Screenshots.



  • Mechanics schrieb:

    Ich kann mir jetzt nicht viel konkretes drunter vorstellen. Hört sich aber irgendwie nach sehr speziellen Anforderungen an, die nicht viele haben. Und wenn jemand solche Anforderungen hat, dann wird er sowas am ehesten auch selber schreiben wollen, damit es zum restlichen Code und auch zum Look and Feel passt.

    Poste mal am besten ein paar Screenshots.

    Kann man hier Screenshots anhängen? Werd wohl mal bei Gelegenheit auf meiner eigenen Seite eines einstellen.

    Ist das wirklich so speziell? Ich arbeite sehr viel mit XML und XSLT und würde gerne den Benutzern eine bequeme Möglichkeit schaffen, diese Strukturen anzusehen und zu bearbeiten.

    mfg Martin



  • Mag sein, dass es Branchen gibt, wo man das öfter braucht. Aus meiner Sicht ist es recht speziell...
    Endkunden wollen sowas wie XML normal überhaupt nicht sehen. Wenn, dann gibt es spezialisierte Einstellungsmasken/Editoren. Und irgendwelche XSLT Transformationen erst recht nicht. Wenn man das doch aus irgendeinem Grund braucht, dann ist es wohl so wichtig/teuer, dass man da auch nicht "irgendeine Freeware Komponente aus dem Internet" reinklatscht, sondern vielleicht einen spezialisierten Editor kauft oder selber entwickelt. Jedenfalls kann ich mir nicht viele Use Cases für sowas vorstellen.



  • Mechanics schrieb:

    Mag sein, dass es Branchen gibt, wo man das öfter braucht. Aus meiner Sicht ist es recht speziell...
    Endkunden wollen sowas wie XML normal überhaupt nicht sehen. Wenn, dann gibt es spezialisierte Einstellungsmasken/Editoren. Und irgendwelche XSLT Transformationen erst recht nicht. Wenn man das doch aus irgendeinem Grund braucht, dann ist es wohl so wichtig/teuer, dass man da auch nicht "irgendeine Freeware Komponente aus dem Internet" reinklatscht, sondern vielleicht einen spezialisierten Editor kauft oder selber entwickelt. Jedenfalls kann ich mir nicht viele Use Cases für sowas vorstellen.

    Hi,

    so schaut das Fenster derzeit eingebunden in ein VCL-Form aus:

    http://www.cresd.de/xmlEditor.jpg

    Mag sein, daß Du recht hast. Ich habe mir ja auch schon überlegt. z.B. ein VCL-Formular an Hand einer XSD Datei zu generieren und dann damit diese speziellen XML-Dateien zu bearbeiten. War halt nur eine Idee. Das Childfenster mache ich auf jeden Fall fertig, denn das will ich in meinen XML-Editor einbinden. Wer trotzdem mal Interesse hat, kann sich ja bei mir melden. ansonsten spare ich mir die Mühe. Ich kann ja ganz normal das Framework zu meiner VCL-App hinzubinden, muß halt ein Applicationobjekt für das Framework erzeugen.

    WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int)
    {
    	WINLIB::Application theVclApp;
    
    	doDisableLog();
    
    	theVclApp.setInstance( hInstance, hPrevInstance );
    ...
    }
    

    mfg Martin



  • Ich würde sie zwar kostenlos weitergeben wollen, aber ich bin derzeit nicht bereit die Quellen zu veröffentlichen. Jetzt meine Frage: Besteht da ein grundsätzliches Interesse oder kann ich mir die Mühe sparen?

    Ich denke du kannst dir die Mühe sparen.

    Klingt für mich auch so als ob man einen Grossteil davon mit ein paar XSLTs + WebKit (oder einer anderen Browser-Engine) halbwegs schnell umgesetzt hätte.
    Wobei es natürlich sein kann dass hier wiedermal die Tendenz zuschlägt Projekte die man nicht selbst umgesetzt hat (oder selbst umsetzen soll) gehörig zu unterschätzen 😃



  • mgaeckler schrieb:

    Ich habe mir ja auch schon überlegt. z.B. ein VCL-Formular

    Allein das ist schon sehr exotisch. So gut wie niemand verwendet den C++ Builder und VCL, und im professionellen Umfeld sogar noch weniger 😉
    Was ich mir noch gedacht habe, die Bereiche, wo man sowas am ehesten brauchen könnte, als Business Zeugs, Prozessbeschreibungen, irgendwelche Austauschformate in XML... Da wird doch eh viel öfter C# und Java als C++ verwendet, also schränkt es den möglichen Nutzerkreis noch weiter ein.

    Wie du vom XML auf diese Visualisierung kommst, versteh ich jetzt nicht. Aber ich denke auch, dass man das auch eher mit HTML umsetzen würde. Das wäre dann viel flexibler anpassbar und man könnte eigene Styles usw. hinterlegen.



  • Mechanics schrieb:

    mgaeckler schrieb:

    Ich habe mir ja auch schon überlegt. z.B. ein VCL-Formular

    Allein das ist schon sehr exotisch. So gut wie niemand verwendet den C++ Builder und VCL, und im professionellen Umfeld sogar noch weniger 😉

    Es gibt schon noch einige Anwender. Die Roadshows von Embarcadero sind recht gut besucht. Aber trotzdem hast Du recht, daher habe ich diese Ideee auch schnell verworfen.

    Mechanics schrieb:

    Was ich mir noch gedacht habe, die Bereiche, wo man sowas am ehesten brauchen könnte, als Business Zeugs, Prozessbeschreibungen, irgendwelche Austauschformate in XML... Da wird doch eh viel öfter C# und Java als C++ verwendet, also schränkt es den möglichen Nutzerkreis noch weiter ein.

    Ich weiß nicht, ob C+ bzw. Java hier so im Vorteil wären. Darüber hinaus, wenn ich das Childfenster als DLL zur verfügung stelle, ist die Sprache des Nutzers egal. Er lädt die DLL und erzeugt ein Fenster der ensprechenden Klasse.

    Mechanics schrieb:

    Wie du vom XML auf diese Visualisierung kommst, versteh ich jetzt nicht. Aber ich denke auch, dass man das auch eher mit HTML umsetzen würde. Das wäre dann viel flexibler anpassbar und man könnte eigene Styles usw. hinterlegen.

    Das kann auch XML:

    <?xml version="1.0" encoding="iso-8859-1" ?>
    <?xml-stylesheet href="test.css" type="text/css" ?>
    <!DOCTYPE root SYSTEM "root.dtd" >
    <root>
    
    <!-- topBox>This is the TOP Box</topBox -->
    
    <Test>Hello world Test</Test>
    
    <half>50 % Width</half>
    ...
    
    root
    {
    	font-family: Arial, Helvetica, MS Sans Serif;
    	font-size: 11pt;
    	padding: 20px;
    }
    Test
    {
    	display:block;
    	background-color:#AAFFAA;
    }
    half
    {
    	display:block;
    	width:50%;
    	background-color:#FFAAAA;
    }
    ...
    

    Sonst wäre es in der Tat Unfug.

    mfg Martin



  • mgaeckler schrieb:

    Das kann auch XML:

    Aber renderst du das selber? Wenn ja, Repekt 😉 Sonst wärs viel einfacher, daraus HTML zu basteln und eine integrierte HTML Engine zu verwenden. Oder machst du es eh schon so?



  • Mechanics schrieb:

    mgaeckler schrieb:

    Das kann auch XML:

    Aber renderst du das selber? Wenn ja, Repekt 😉 Sonst wärs viel einfacher, daraus HTML zu basteln und eine integrierte HTML Engine zu verwenden. Oder machst du es eh schon so?

    Ja, das rendere ich selber. Früher habe ich XML erzeugt, diese mit einer XSLT-Datei verknüpft und das ganze vom Browser anzeigen lassen. Später habe ich die XSLT-Transformation selber gemacht und das erzeugte HTML im Browser geöffnet jetzt will ich den Browser ablösen.

    Bis jetzt hielt sich der Aufwand in Grenzen. Der XML/HTML Parser wurde schon vor 3 Jahren gemacht. Die XSLT-Transformation und die XSchema Validierung vor 2 Jahren. Mit dem XML Renderer habe ich vor zwei Wochen angefangen. Dem fehlt noch im wesentlichen die Darstellung von Tabellen, Listen und Hintergrundbildern. Block-Elemente, Inline-Elemente, Inline-Block und floats kann ich schon. Die Positionierung der Boxen, Abstände, Rahmen etc. funkt auch schon. Bis ich den aber produktiv einsetzen kann, wird aber noch viel Wasser die Isar runterfließen.

    Wenn der XML Renderer mal fertig ist, ist es zum HTML-Renderer nicht mehr weit:
    Der muß vor dem Rendern für HTML-Elemente nur die entsprechenden Stylesheets setzen und nur wenige Tags wie z.B. iframe, frameset und img extra auswerten und entsprechend darstellen. Die Tags object und script wären noch mal 'ne ganze Hausnummer und wie es mit HTML5 ausschaut kann ich noch überhaupt nicht beurteilen. Für meine Anwendungsfälle ist das aber derzeit eh uninteressant und daher steht das auch noch nicht auf meiner TODO-Liste.

    mfg Martin



  • Hallo,

    auch wenn derzeit keiner daran denkt, so ein Childwindow in seine Anwendungen zu integrieren, vieleicht mag ja mal jemand darauf schauen und seinen Kommentar abgeben:

    http://www.cresd.de/edv/archiv/xmlEditBeta.zip

    Vielen Dank schon mal im Voraus.

    mfg Martin



  • Hi,

    bevor ich irgendeine exe ausführe werde ich einen kurzen blick mit ida pro rein und sehe, dass du irgendwas mit sockets machst?? funkt das ding alles über mich nach hause oder was??



  • und ich so hää? schrieb:

    Hi,

    bevor ich irgendeine exe ausführe werde ich einen kurzen blick mit ida pro rein und sehe, dass du irgendwas mit sockets machst?? funkt das ding alles über mich nach hause oder was??

    Nein, was sollte er auch übertragen? Das benötigt der Schemavalidator. Wenn im XML ein Schema aus einer externen URL angegeben wurde, so wird dieses auch geladen. Wenn es sein muß auch per http.

    STRING	schemaLocation = theElement->getAttribute(
    	XMLNS_SCHEMALOCATION
    );
    if( HTTP_REQUEST::isValidProtocol( xsdFile )
    || HTTP_REQUEST::isValidProtocol( schemaLocation ) )
    {
    	HTTP_REQUEST theRequest;
    	schemaLocation = theRequest.makeFullPath( xsdFile, schemaLocation );
    	theRequest.Get( schemaLocation );
    	theRequest.getHttpStatusCode();
    	theSchemaDoc = theRequest.getXmlDocument( true );
    }
    

    Das habe ich gemacht, weil beim SOAP-Protokoll es üblich ist, daß das Schema vom Web geladen werden muß. Der XML Editor kann es daher rein theoretisch auch, da es aber eher unwahrscheinlich ist, lasse ich für gewöhnlich die OpenSSL-DLL weg. Aber geprüft wird's natürlich trotzdem und http geht auch ohne OpenSSL.

    mfg Martin


Anmelden zum Antworten