Serverseitige Architektur - XSLT mit lamP-(HP,erl,ython) ?
hkl
- programmiertechnik
Hallo !
Wuerde gern mal um Eure Erfahrungen / Einschaetzungen
zum Thema serverseitiger XSL-Verarbeitung wissen.
Hier ist erstmal meine Meinung:
Das Thema beruehrt fuer mich auch den Bereich
Softwareengineering, und zwar aus folgendem Grund:
Wenn ich eine Architektur plane, teste ich natuerlich
die vorhanden Technologien auf ihr Zusammenwirken;
baue also sogenannte "spikes"
"http://www.extremeprogramming.org/rules/spike.html"
Damm kommt irgendwann eine Phase, die ich als
Technologie-"freeze" bezeichne - dann habe
ich die Technologien zusammengebracht und sollte
wissen was ich verwenden kann und was ich selbst
schreiben muss. Eigentlich.
Diese Phase habe ich sogar nach einigen Erfahrungen
Dritter mit Java-Projekten sogar instrumentalisert.
( Selber habe ich nicht viel mit Java zu tun, aber
ca. um 2000 herum, waehrend des imho groessten Hypes,
wurden Projekte oft von Releases seitens Sun ein- oder
ueberholt. Dabei denke ich z.B. an ein Team, das ein
Grossprojekt inklusive eines Frameworks in einer Bank
entwickelt hatte, und an einen Projektleiter, der eines
schoenen Morgens seitens der Fachabteilung, aka.
Auftragggeber, auf einen Download-Link aufmerksam
gemacht wurde, der auf ein kostenloses Paket mit der
sonst N Mannstunden teuren Komponente zeigt ! )
Dieser "freeze" sieht bei mir so aus, das ich die Doku
und zusaetzlich zu einem Systemstand ( z.B:
Debian-Sarge-3.?r? ) hinzugefuegte Pakete in eine
Verzeichnisstruktur bringe und archiviere ( soweit das
moeglich ist +SelfHTML,+Python,+MySQL,-PHP,?Perl).
Soweit, so gut. Was passiert, wenn man dann keinen
"spike" (s.o.) sondern realen Code vor sich hat und
ploetzlich feststellt das die Technik an einer
entscheidenden Stelle ploetzlich aussetzt ?
Da hilft auch kein vorheriger Massentest - die
Komlexitaet der Live-Daten kann man imo kaum simulieren.
Zwar hat imho spaetestens Grady Booch das
Wasserfall-Modell ( dankenswerterweise ) zu den Akten
gelegt:
http://en.wikipedia.org/wiki/Grady_Booch
aber was DANN passiert ist imo schwerlich noch als
Iteration im Booch-schen ( eXtreme Programming-) Sinne
zu verstehen.
Konkret bedutet dies, dass ich fuer eine Website ein
erstes Release ohne (MySQL-) Datenbankanbindung geplant
hatte.
Die paar XHTML-Dateien sollten in einer XML-Datei
referenziert und strukturiert werden und mit XSLT und
etwas DOM aufbereitet werden.
Jetzt ( hatte ich gestern gepostet ) habe ich die
Anwendung in eine Front- und ein Backend aufgeteilt;
vorne liest PHP fertige XHTML-Blobs aus der DB und
hinten - also noch auf dem Entwicklungssystem -
transformieren perl(XML::LibXSLT) und libxml2,libxslt
(GNOME).
Auch kein Beinbruch, mag man denken. Na ja, der
Datenbankentwurf ( fuer Release >= 2 ) sollte aber
schon Versionsverwaltung und Transaktionstabellen
( User-Customizing ) beeinhalten...
Fuer's erste schluck ich jetzt meinen Stolz runter,
verzichte bewusst auf die dritte Normalform und hoffe
dass mir spaeter 'was einfaellt.
=> Wie geht Ihr mit sowas um ? <=
Ueber Feedback wuerde ich mich sehr freuen !
Danke fuer's Lesen
&& Gruss
Holger
Wuerde gern mal um Eure Erfahrungen / Einschaetzungen
zum Thema serverseitiger XSL-Verarbeitung wissen.
Kann man machen, ist gut.
[spikes & freeze & ep]
Yo, interessant, ich würde es vielleicht ein wenig lockerer angehen, aber OK.
Soweit, so gut. Was passiert, wenn man dann keinen
"spike" (s.o.) sondern realen Code vor sich hat und
ploetzlich feststellt das die Technik an einer
entscheidenden Stelle ploetzlich aussetzt ?
Ist mir schon mal mit XML-Modulen von Perl passiert, war ein böser Reinfall. Kollegen von mir sind mit bestimmten beworbenen Funktionalitäten von MS-Produkten auf die Fresse gefallen. Shit happens.
Jetzt ( hatte ich gestern gepostet ) habe ich die
Anwendung in eine Front- und ein Backend aufgeteilt;
vorne liest PHP fertige XHTML-Blobs aus der DB und
hinten - also noch auf dem Entwicklungssystem -
transformieren perl(XML::LibXSLT) und libxml2,libxslt
(GNOME).
Hört sich gut an.
Auch kein Beinbruch, mag man denken. Na ja, der
Datenbankentwurf ( fuer Release >= 2 ) sollte aber
schon Versionsverwaltung und Transaktionstabellen
( User-Customizing ) beeinhalten...
Fuer's erste schluck ich jetzt meinen Stolz runter,
verzichte bewusst auf die dritte Normalform und hoffe
dass mir spaeter 'was einfaellt.
Das mit den Normalformen ist mit äusserster Vorsicht zu geniessen. Liest sich aber wieder ganz gut das mit dem "Stolz runterschlucken", was will man auch machen, man entscheidet sich für bestimmte Entwicklerwerkzeuge, für ein bestimmtes Framework und *Bumm* funzt net.
=> Wie geht Ihr mit sowas um ? <=
Gegenfrage: Wie gehen Deine Kollegen und die Leute an die Du berichtest mit sowas um?
@Hamstar
Hallo !
Danke fuer das Feedback !
»»[...]
Ist mir schon mal mit XML-Modulen von Perl passiert, war ein böser Reinfall. Kollegen von mir sind mit bestimmten beworbenen Funktionalitäten von MS-Produkten auf die Fresse gefallen. Shit happens.
Dazu wuerden mich jeweils Details sehr interessieren.
Bei Perl scheint mir XML::XSLT les ich in perldoc
xsl:apply-templates limited
xsl:attribute partially
xsl:for-each limited ( :-( )
[...]
Deshalb setz ich auf XML::LibXSLT.
Sieht bislang sehr stail aus.
Insgesamt glaub ich aber, dass ich da etwas
grundsaetzliches falsch mache. XML/XSLT/XPath et al.
sind seit Jahren derart "gehypt" das es immer
schwer zu glauben ist, wenn bei so weit verbreiteten
Technologien wie PHP und Perl derart massive Probleme
auftreten.
Mein Haupt-Stylesheet hat nicht 'mal PI's oder
imports...
Wenn die MS - Probleme sich auf MSXML beziehen,
poste es bitte !
Das ist eines der wenigen MS-Produkte dem ich nach
'zg Jahren ein vertraue - und das hab ich auch
Kollegen so vermittelt...
Und die muessen reporten.
»»[...]
Gegenfrage: Wie gehen Deine Kollegen und die Leute an die Du berichtest mit sowas um?
Bei dem jetzigen Projekt bin noch alleine und muss
nicht "reporten". Zum Glueck.
Bei beauftragten Projekten koennen nach meiner Erfahrung
sich schnell sehr (un-)soziale Effekte zeitigen.
Da wird dann imho schlichte Kausalitaet leicht
rhetorisch ausgenutzt ( "Es liegt doch aber in IHRER
Verantwortung, dass..." )
Fand ich immer billig und kontraproduktiv.
Soweit mir bekannt gibt es sogar in der Jurisprudenz, namentlich im Fahrlaessigkeitsrecht, Massstaebe wie
das "selbstmoegliche". Koennte hier ein guter Massstab
sein - wenn der sog. "Proof of Concept" unterfinanziert
ist, liegen solche Dinge einfach in der Luft.
Just imho, of course.
Gruss
Holger
Ist mir schon mal mit XML-Modulen von Perl passiert, war ein böser Reinfall. Kollegen von mir sind mit bestimmten beworbenen Funktionalitäten von MS-Produkten auf die Fresse gefallen. Shit happens.
Dazu wuerden mich jeweils Details sehr interessieren.
Es war nicht LibXML (oder wie das Ding genau hiess). Habe mit expat (einem nichtvalidierenden XML-Parser) und XML::Simple meine Erfahrungen gemacht, eventuell noch das eine oder andere Perl-Modul an das ich mich nicht mehr erinnern kann. LibXML soll der beste XML-Parser für Perl sein. Dennoch würde ich das Ding mal gerne richtig testen wollen, Zweifel bleiben. - Überigens wurden die Probleme irgendwann dadurch gelöst, dass alle XML-Perlmodule von CPAN rausgeschmissen wurden und der XML-Parser von MS zum Einsatz kam (in Perl ;).
Insgesamt glaub ich aber, dass ich da etwas
grundsaetzliches falsch mache. XML/XSLT/XPath et al.
sind seit Jahren derart "gehypt" das es immer
schwer zu glauben ist, wenn bei so weit verbreiteten
Technologien wie PHP und Perl derart massive Probleme
auftreten.
Ich glaube, dass Themen wie bspw. XML und UTF immer noch irgendwie Randthemen sind in der GPL-Gemeinde. Schade eigentlich. Warum das so ist? Keine Ahnung. - BTW, MySQL ist auch mit einer gewissen Vorsicht zu geniessen, wenn man "Ansprüche" (Replikationen, Transaktionen, SPs etc.) hat.
Wenn die MS - Probleme sich auf MSXML beziehen,
poste es bitte !
Nein, der XML-Parser ist verdammt gut.
Das ist eines der wenigen MS-Produkte dem ich nach
'zg Jahren ein vertraue - und das hab ich auch
Kollegen so vermittelt...
MS Exchange und MS SQL Server sind auch ganz gut. Studio find ich auch OK. (Von den Office-Produkten ganz zu schweigen, kennst Du openoffice? ;)
Gegenfrage: Wie gehen Deine Kollegen und die Leute an die Du berichtest mit sowas um?
Bei dem jetzigen Projekt bin noch alleine und muss
nicht "reporten". Zum Glueck.
So wie eine Bekanntschaft oder Freundschaft erst dann ihre Qualität beweist, wenn es mal Differenzen gibt, so bestätigt sich die Qualität eines Arbeitskollegentums auch erst im Konfliktfall. Und da das gute alte Scheitern im IT-Bereich normal ist (angeblich scheitern 50% der Projekte mehr oder weniger), ist das richtige Verhalten im Falle des Scheiterns ganz, ganz, ganz wichtig. (Insb. sind "Schuldfragen" (entgegen der allg. Meinung) durchaus zu bearbeiten, allerdings mit der grösstmöglichen Verständigkeit. :)
Hallo !
Vorab :
Zum Ausgangsproblem ( und dessen Hotfix, hab jetzt einen ) poste ich hier nochmal gesondert.
[...]
Überigens wurden die Probleme irgendwann dadurch gelöst, dass alle XML-Perlmodule von CPAN rausgeschmissen wurden und der XML-Parser von MS zum Einsatz kam (in Perl ;).
Von XML::LibXSLT hab ich ja schon berichtet; ob und vor allem (wie ohne GNOME drunter ?!?) das unter MS laeuft weiss ich aber nicht.
Hab mich letzte Nacht 'ner Urangst von mir gestellt und mal wieder mit Sablotron ( mittels xslt.so fuer PHP ) gekaempft. Hab jezt sogar endlich begriffen wie man ihn gepuffert verwendet, sprich diese 'arg:/' syntax. Der ist ja wirklich schnell ! ( gefuehlt, nicht gemessen...)
Aber leider gibt's das Modul bei meinem Provider nicht, und wegen der Groesse der Site nehm ich da mal von Customizing-Wuenschen Abstand.
»»[...]
MySQL ist auch mit einer gewissen Vorsicht zu geniessen, wenn man "Ansprüche" (Replikationen, Transaktionen, SPs etc.) hat.
Vorallem versteh ich nicht, wieso der in 4.x immer noch
unterstuetzt. Das ist jetzt nicht als Gemeckere an der OpenSource Gemeinde gedacht, aber in Anbetracht der Vielzahl von Tools drumherum wundert mich der geringe DDL - Umfang trotzdem.
Nein, der XML-Parser ist verdammt gut.
Da sich das Projekt fuer das ich die Website schreibe, mit XSD und XMI Integration auseinandersetzt, werd ich wohl mal 'ne kleine "Parser" - Uebersicht mit aufnehmen.
Was haeltst Du von ADO ?
Manchmal wuensch ich mir solch einfache XSD-konforme Persistenz (adPersistXML) unter UNIX.
Das koennte ein weiteres Teilprojekt abgeben ( Muss es wohl sogar )
Das ist eines der wenigen MS-Produkte dem ich nach
'zg Jahren ein vertraue - und das hab ich auch
Kollegen so vermittelt...[...] und MS SQL Server sind auch ganz gut.
Bei .NET bin ich nicht dabei; ich kenne die vorherige DNA - Suite.
Was ich nie verstanden habe, war wieso MS seinen Clusterserver so ausgelegt hatte, das zwischen
(Brower->)(IIS mit [MTS[ATL/COM]])-> SQL Server
logische Hops zwischen den virtuellen Cluster-Knoten lag entstanden, wodurch die Credentials floeten gingen.
Musste man wider architektonisch abferdern...
Dann war man aber eigentlich schon neben DNA.
[...]
Studio find ich auch OK.
Find ich auch; den Editor find ich toll, da brauch ich kein Sniff o.ae.
[...]
(Von den Office-Produkten ganz zu schweigen, kennst Du openoffice? ;)
:-)
[...]
allerdings mit der grösstmöglichen Verständigkeit. :)
Dazu koennte man ja mal nen neuen Thread aufmachen. Das wuerde hier glaub ich untergehen.
Was haeltst Du davon ?
Gruss
Holger
Was haeltst Du von ADO ?
Würg. Wir haben hier m.E. eine unnötige Schicht, deren Existenz mit "erweiterter Funktionalität" begründet wird, de facto werden aber Nutzer dummgehalten bzw. dummgemacht, die gelegentlich zu lesende Argumentation, dass man dank ADO zwischen verschiedenen Datenservertypen umschalten kann, ohne dass sich am Code was ändert, ist falsch. Ganz schlimm ist auch, dass der Entwickler oft aufhört den "SQL-Traffic" selbst zu beeinflussen, ineffizienter Müll-Code kann die Folge sein (und ist es auch oft).
Dazu koennte man ja mal nen neuen Thread aufmachen. Das wuerde hier glaub ich untergehen.
Worüber? Über das Scheitern von IT-Projekten und dessen Bearbeitung? Klar, kannst Du machen.
Was haeltst Du von ADO ?
Würg. Wir haben hier m.E. eine unnötige Schicht,
m.E = "meines Erachtens" oder "mit Einschraenkungen"
Wenn letzteres, welche Einschraenkungen nimmst vor ?
Wenn ich auf die Datenbank zugreifen will, brauch ich ja irgendeine Schicht. Unter C++ ist mir ADO da sehr viel lieber als irgendeine sqlcli - Praeprozesor Loesung.
deren Existenz mit "erweiterter Funktionalität" begründet wird, de facto werden aber Nutzer dummgehalten bzw. dummgemacht, die gelegentlich zu lesende Argumentation, dass man dank ADO zwischen verschiedenen Datenservertypen umschalten kann, ohne dass sich am Code was ändert, ist falsch.
Stimmt.
Das ist zudem so'n Migrationsaspekt, der in der Praxis, gerade bei den MS - Zielkunden meist 'ne ziemlich untergeordnete Rolle spielt.( Projektbudget sehr viel groesser als Hardwarekosten fuer eigenen Server /Lizenzen )
Dazu koennte man ja mal nen neuen Thread aufmachen. Das wuerde hier glaub ich untergehen.
Worüber? Über das Scheitern von IT-Projekten und dessen Bearbeitung? Klar, kannst Du machen.
Ja, das weiss ich. Wollte auch nur wissen, ob Dich's interessiert.
Eigentlich meinte ich auch eher den Umgang mit bekannten aber rhetorisch verdraengbaren Projektrisiken.
Gruss
Holger
Würg. Wir haben hier m.E. eine unnötige Schicht,
m.E = "meines Erachtens" oder "mit Einschraenkungen"
m.E = meines Erachtens
Wenn ich auf die Datenbank zugreifen will, brauch ich ja irgendeine Schicht.
Exakt, Du nutzt am besten dieses ADO um T-SQL Code zu exektieren, das Du vorher schon als SP in der MS SQL Server DB hast.
Worüber? Über das Scheitern von IT-Projekten und dessen Bearbeitung? Klar, kannst Du machen.
Ja, das weiss ich. Wollte auch nur wissen, ob Dich's interessiert.
Habe ich hier schon mal diskutiert, die Resonanz war eher dünn. Schade eigentlich. Der Umgang mit dem Projekt-Misserfolg ist doch eine sehr interessante und lehrreiche Sache. Soll ja gelegentlich vorkommen so ein kleines nettes totales Scheitern.
Eigentlich meinte ich auch eher den Umgang mit bekannten aber rhetorisch verdraengbaren Projektrisiken.
Die meisten Projektrisiken sind m.E. unbekannt und nicht rhetorisch zu bearbeiten bzw. zu verdrängen. Aber vielleicht stimmt das nicht, mal schauen, ob eine Diskussion hier was bringt.
Hallo !
Wenn ich auf die Datenbank zugreifen will, brauch ich ja irgendeine Schicht.
Exakt, Du nutzt am besten dieses ADO um T-SQL Code zu exektieren, das Du vorher schon als SP in der MS SQL Server DB hast.
Das versteh ich jetzt als Ironie ? Richtig ? ;-)
Wenn ich das anders ( z.B. mit nem sqlcc o.ae.)
mach sitz' ich aber letztlich auf der libc.
Das mag ich nicht mehr. Wirklich nicht.
Diese ADO-Objekte sind zumindest meist (De)allokations-sicherer als mein selbstgestricktes Ressourcenhandling.
Dass BSTRs funktionieren, setz ich mal voraus; sonst waere ja der MSXML ne Ruine.
Was spricht Deiner Meinung nach eigentlich genau gegen "Business-Objekte" ( hab ich von nem MS-Vertriebler :-) ), die SPs verwenden ( "kapseln" wollt ich jetz nicht schreiben, bin ja nicht von MS :-) ?
Das sieht fuer mich konzeptionell gut aus.
Ablehene wuerde ich eher wenn man versucht mit dem
MTS dann nochmal Transaktionsklammern obendrauf
zu legen.
Das sollte imo wirklich genau die DB leisten.
Die meisten Projektrisiken sind m.E. unbekannt und nicht rhetorisch zu bearbeiten bzw. zu verdrängen. Aber vielleicht stimmt das nicht, mal schauen, ob eine Diskussion hier was bringt.
Fein. Dann mach ich morgen mal 'nen Thread auf.
Gruss
Holger
Wenn ich auf die Datenbank zugreifen will, brauch ich ja irgendeine Schicht.
Exakt, Du nutzt am besten dieses ADO um T-SQL Code zu exektieren, das Du vorher schon als SP in der MS SQL Server DB hast.
Das versteh ich jetzt als Ironie ? Richtig ? ;-)
Eigentlich nicht, ich habe es so gemacht und konnte dann den MS OLE DB Treiber nutzen (was für ein Name!).
Wenn ich das anders ( z.B. mit nem sqlcc o.ae.)
Ich weiss nicht was das ist, wichtig ist es einfach möglichst überbauarm parametriesierte stored procedures ausführen zu können und die Ergebnismengen erhalten zu können.
Was spricht Deiner Meinung nach eigentlich genau gegen "Business-Objekte" ( hab ich von nem MS-Vertriebler :-) ), die SPs verwenden ( "kapseln" wollt ich jetz nicht schreiben, bin ja nicht von MS :-) ?
Find ich ziemlich natürlich, dass Geschäftsobjekte direkten Datenzugriff haben. Wenn man Lust hat, kann man noch eine zusätzliche Datenzugriffsschicht einziehen, dann ist man flexibler.
Ablehene wuerde ich eher wenn man versucht mit dem
MTS dann nochmal Transaktionsklammern obendrauf
zu legen.
Das sollte imo wirklich genau die DB leisten.
MTS sagt mir jetzt nichts, ich kenne aber den MS DTC. ;)
Aber richtig, Applikationen oder Geschäftsobjekte sollten mit Transaktionen nichts direkt zu tun haben. (Falls Du es so gemeint haben solltest?! ;)
Jetzt ( hatte ich gestern gepostet ) habe ich die
Anwendung in eine Front- und ein Backend aufgeteilt;
vorne liest PHP fertige XHTML-Blobs aus der DB und
hinten - also noch auf dem Entwicklungssystem -
transformieren perl(XML::LibXSLT) und libxml2,libxslt
(GNOME).Hört sich gut an.
Nachtrag: "fertige XHTML-Blobs aus der DB" hört sich doch nicht so supergut an, aus der DB holt man strukturierte Daten, gerne auch XML-strukturiert. Mit PHP kann man dann aus verschiedenen "XML-Blöcken" ein XML zusammenstellen und darauf legt man einen Style, so dass man XHTML ausliefern kann.
Zu dem anderen schreib ich morgen noch was...
Hallo Hamstar
[..]
Mit PHP kann man dann aus verschiedenen "XML-Blöcken" ein XML zusammenstellen und darauf legt man einen Style, so dass man XHTML ausliefern kann.
Und genau da knallt's. Leider.
Dynamische Inhalte kann ich damit zunaechst vergessen.
Gruss
Holger
Mit PHP kann man dann aus verschiedenen "XML-Blöcken" ein XML zusammenstellen und darauf legt man einen Style, so dass man XHTML ausliefern kann.
Und genau da knallt's. Leider.
Dynamische Inhalte kann ich damit zunaechst vergessen.
Warum bzw. welche "dynamischen" Inhalte?
Hallo !
Hab nochmal mit den verschiedenen Schnittstellen fuer
XSLT unter PHP4 und hab jetzt glaube ich nen Hotfix
fuer das Probelm das ich 'mal geschildert hatte
[link http://forum.de.selfhtml.org/?t=140508&m=912954@title=PHP4 XSLT Seg Fault]
Das Problem scheint die Vrbindung von XLST-Processing
und nachfolgenden Transaktionen im XML-Ergebnisbaum
zu sein.
Vielleicht versucht der XSLT-Prcessor
Knoten rekursiv feizugeben, deren Uneterknotennicht
mehr existieren.
Zumindest hilft das hier
//[...]
$xmldoc1 = domxml_open_file("content/complex.xml");
$xsldoc = domxml_xslt_stylesheet_file ("xslt/complex.xsl") ;
$xmldoc2 = $xsldoc->process($xmldoc1,array ( 'id' => $_GET["id"], 'mode'=> "normal" ));
/////////////////////////////////////////////////
// Hierauf kommt's anscheined an
//
$xmldoc = domxml_open_mem($xmldoc2->dump_mem());
//
//[...]
// wenn man sowas dann spaeter machen will
//
foreach ($bodytree->children() as $contenttree)
{
$dummy = $xmldoc->create_element('dummy');
$dummy = $contenttree->clone_node(true);
// $father aus $xmldoc
$father = $pagetree->parent();
$father->append_child($dummy);
}
//[..]
So wurde der Baum vom stylesheet-prozessor
entkoppelt.
Performant ist das natuerlich nicht, da doppelt
geparsed und ein evtl. sehr grosser String kopiert
wird.
Ausserdem sind solche Dealokationen meist in mehrfach
verwendeten Funktionen enthalten - es steht zu vermuten
das der Effekt noch an andere Stele auftaucht.
Gruss
Holger