530 likes | 675 Views
XSL in der Praxis Anwendungsbeispiele für die eXtensible Stylesheet Language Andreas Kühne kuehne@klup.de XML One 2000. Wozu XSL ?. DOM. XQL. XMI. XXL. ?. XML. XUL. SAX. XLE. XPointer. XSL-Familie. XSL Transformation ( XSLT ) http://www.w3.org/TR/xslt
E N D
XSL in der Praxis Anwendungsbeispiele für die eXtensible Stylesheet LanguageAndreas Kühnekuehne@klup.deXML One 2000
Wozu XSL ? DOM XQL XMI XXL ? XML XUL SAX XLE XPointer
XSL-Familie • XSL Transformation ( XSLT )http://www.w3.org/TR/xslt • XML Path Language ( XPath )http://www.w3.org/TR/xpath • Formatting Objects ( FO )http://www.w3.org/TR/xsl
Formatting Objects • Layout- und Darstellungsinformationen • eng angelehnt an CSS
XPath • Selektionssprache zur Auswahl von Mengen von Elementen • Navigation innerhalb des XML-Baums • Formulierung von Bedingungen • Logische Operatoren
XSLT • Transformationssprache zur Überführung eines XML-Dokumentes in eine andere Struktur / Format • Deklarativ, nicht prozedural • Regelbasiert
XPath Beispiele Pfad : ‘/’ Person Resultat : Wurzelelement Name Adresse PLZ Ort Strasse
XPath Beispiele Pfad : ‘//PLZ’ Person Resultat : Element mit dem Namen ‘PLZ’ irgendwo im Dokument Name Adresse PLZ Ort Strasse
XPath Beispiele Pfad : ‘/*/Adresse [ ./Ort=“Köln”]’ Person Resultat : Adress-Element, dessen Kind- Element ‘Ort’ den Wert ‘Köln’ hat Name Adresse PLZ Ort ‘Köln’ Strasse
Transformation XSLT Dokument A Dokument B
XSLT Stylesheet <xslt:stylesheet xmlns:xslt=“http://www.w3.org/XSL/transform/1.0” xmlns=“http://www.w3.org/TR/REC-html40” > ... </xslt:stylesheet>
XSLT Template <xsl:template match=“/” > <html> <head> <title>A Stock Order</title> </head> <xsl:apply-templates select=“order”> </html> <xsl:template />
XSL Tutorial http://zvon.vscht.cz:/ZvonHTML/Zvon/zvonHomepage_en.html
Einige XSLT Parser • Xalan • C++ und Java-Versionen • http://www.apache.org • Microsoft XMLParser • http://msdn.microsoft.com/downloads/tools/xmlparser/xmlparser.asp • XSL:P • Java mit ECMAScript-Einbettung • http://www.clc-marketing.com/xslp • The XML Cover Pages • Übersicht über Parser, Tools, Newsgroups usw. • http://www.oasis-open.org/cover/xsl.html
XSLT Editor http://www.alphaworks.ibm.com
Parser API // Instantiate an XSLTProcessor. org.apache.xalan.xslt.XSLTProcessor processor = org.apache.xalan.xslt.XSLTProcessorFactory.getProcessor(); // Create the 3 objects the XSLTProcessor needs // to perform the transformation. org.apache.xalan.xslt.XSLTInputSource xmlSource = new org.apache.xalan.xslt.XSLTInputSource (xmlSourceURL); org.apache.xalan.xslt.XSLTInputSource xslSheet = new org.apache.xalan.xslt.XSLTInputSource (xslURL); org.apache.xalan.xslt.XSLTResultTarget xmlResult = new org.apache.xalan.xslt.XSLTResultTarget (outputURL); // Perform the transformation. processor.process(xmlSource, xslSheet, xmlResult); Quelle : Xalan-Dokumentation, http://www.apache.org
Anwendungsbeispiele • Besser als printf • Sprach- und plattformunabhängiges Meldungskonzept • Code Generator • Testmethoden aus dem Objektmodell erzeugen • EAI Infrastruktur • Realisierung einer Integrationsarchitektur
Besser als printf • Meldungen eines C-Programms :printf( “Sie haben %d neue Mails”, nAnzahl ); • Ausgabe mittels C++ Streams :cout << “Sie haben “ << nAnzahl << “ neue Mails” << endl; • Java-Version :System.out.println( “Sie haben “ + nAnzahl + “ neue Mails” );
Printf reicht doch, oder ? • Internationalierung • Wie unterstützt man mehrere Sprachen ? • Multi-Channel-Fähigkeit • Wie nutzt man verschiedene Ausgabemedien (Browser, WAP, Pager, Konsole, … ) ? • Mandantenfähigkeit • Outsourcing-Dienstleister ?
Indirektion mittels XSLT <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl= "http://www.w3.org/XSL/Transform/1.0"> <xsl:template match="/message"> Sie haben <xsl:value-of select=“anzahl“/> neue Mails. </xsl:template> </xsl:stylesheet> Transformationsregel <?xml version="1.0"?> <message> <anzahl>3</anzahl> ... </message> Daten-Document “Sie haben 3 neue Mails.”
Codefragment : Document erzeugen ... Message msg = new Message( “Mail Info” ); msg.append( “anzahl”, nMails ); for( int i = 0; i < nMails; i++ ) { msg.append( “mail/sender”, mails[ i ].sender() ); msg.append( “mail/subject”, mails[ i ].subject() ); } msg.send(); ... Codefragment zum Erzeugen einer Meldung, in Java.
Beispiel-Document <?xml version="1.0"?> <message> <anzahl>3</anzahl> <mail> <sender>Heinz Meier</sender> <subject>Terminbestätigung Donnerstag</subject> </mail> <mail> <sender>Heinz Meier</sender> <subject>I love you</subject> </mail> <mail> <sender>MailMaster</sender> <subject>!! Virenwarnung !!</subject> </mail> </message> Erzeugtes Daten-Document
3 neue Mails ! Ein Document, verschiedene Medien Daten- Document wml.xsl html.xsl text.xsl
Dimensionen von Ausgabeformaten WML Medien HTML Sprachen Text Mandanten
Codegenerator • Metainformationen liegen i. d. R. in einem Objektmodell bereit. • Erstellung von Testmethoden ist eine unbeliebte und fehlerträchtige Aufgabe. • Generierung von Testmethoden aus dem Objektmodell kann sinnvolle Ergänzung darstellen.
XML Metadata Interchange Format (XMI ) • Von der OMG standardisiertes Format zur Darstellung Metainformationen ( z.B. Objektmodelle, Use Cases, Sequenzdiagramme ). • Breite Unterstützung ( ArgoUML, Rose, TogetherJ ). • Tool zur Transformierung *.mdl nach *.xmi bei IBM http://www.alphaworks.ibm.com.
XML Metadata Interchange Format (XMI ) • UML-Meta-Metastruktur. • Bekannte Begriffe der UML werden genutzt. • Unhandliche DTD ( ca. 500 kBytes )
Mini-Modell Simple.mdl Simple.mdl xmiToolkit Simple.xmi
Transformation ‚XMI zu Code‘ (1) <?xml version='1.0'?> <xsl:stylesheet xmlns:xsl='http://www.w3.org/XSL/Transform/1.0'> <xsl:output method="text" media-type="text/plain"/> <xsl:template match="/"> // Test-Methoden <xsl:apply-templates select="//Foundation.Core.Class [@xmi.id]"/> </xsl:template> <xsl:template match="Foundation.Core.Class"> <xsl:variable name="className" select="Foundation.Core.ModelElement.name" /> <xsl:apply-templates select=".//Foundation.Core.Operation [@xmi.id ]"> <xsl:with-param name="className" select="$className" /> </xsl:apply-templates> </xsl:template> Selektion der Klassen
Transformation ‚XMI zu Code‘(2) <xsl:template match="Foundation.Core.Operation"> <xsl:param name="className" /> <xsl:variable name="methodName"><xsl:value-of select="$className" />::<xsl:value-of select="Foundation.Core.ModelElement.name" /></xsl:variable> /* * Test fuer Methode : '<xsl:value-of select="$methodName" />' */ cout << "<xsl:value-of select="$methodName" />() = " << <xsl:value-of select="$methodName" />( <xsl:for-each select=".//Foundation.Core.Parameter [@xmi.id and ./Foundation.Core.Parameter.kind/@xmi.value!='return']"> <xsl:variable name="idref" select="./Foundation.Core.Parameter.type/Foundation.Data_Types.Primitive/@xmi.idref"/> <xsl:variable name="type" select="//Foundation.Data_Types.Primitive [@xmi.id=$idref]/Foundation.Core.ModelElement.name"/> <xsl:choose> <xsl:when test='$type="String"'> "TEST" </xsl:when> <xsl:when test='$type="Long"'> 123 </xsl:when> <xsl:otherwise> // Fehler, Unerwarteter Typ eines Parameter </xsl:otherwise> </xsl:choose> <xsl:if test="position() != last()">, </xsl:if> </xsl:for-each>) << endl; </xsl:template> </xsl:stylesheet> Selektion der Methoden und Parameter
Transformation ‚XMI zu Code‘(3) // Test-Methoden /* * Test fuer Methode : 'Auto::holeGeschwindigkeit' */ cout << "Auto::holeGeschwindigkeit() = " << Auto::holeGeschwindigkeit( ) << endl; /* * Test fuer Methode : 'Auto::setzeFhrgstNr' */ cout << "Auto::setzeFhrgstNr() = " << Auto::setzeFhrgstNr( 123 ) << endl; Erzeugter Code
EAI Infrastruktur • IT-Abteilungen unter Stress: • Data Warehouse • Customer Relationship Management • Enterprise Resource Planning • Workflow • eCommerce • Merger / Aquisitions • Wartung / Weiterentwicklung von ‘Altlasten’ • 99.999 % Verfügbarkeit ist selbstverständlich
Screen scrape Down- load file Message queue Sockets Screen scrape Screen scrape Down- load file Trans- action file Trans- action file CICS gateway Sockets RPC ORB Message ORB APPC Message queue Trans- action file Trans- action file Message queue CICS gateway Screen scrape RPC Down- load file Message APPC Anwendungs- und Schnittstellen-Spaghetti
Die Wartungslücke bei Paketlösungen bis zum Jahr 2003 werden mindestens 66% aller Anpassungen nur außerhalb der Produkte und Entwicklungstools der Paketanbieter realisiert werden können 1997 1998 1999 2000 2001 2002 2003 Quelle Schnittstellen- Management Metadaten-/Versions- Management Markt- und User- Anforderungen Erweiterung / Migration von Anpassungen Parameter Migration Migrationsunterstützung / -fähigkeit durch den Anbieter Daten Migration Standard Releases
1997 1998 1999 2000 2001 2002 2003 Quelle Die Integrationsproblematik verlagert sich Entwicklung der Implementierung neuer Anwendungen nach unterschiedlichen Realisierungsansätzen 100% Integration von Paketlösungen Integration über Architektur “Selbst-gestrickte”, eigene Integrationslösung
Warum ist so eine EAI-Infrastruktur / Architektur wichtig? • Liefert eine Anleitung und hilft Geschäftsprozeß- und technische Komplexitäten umzusetzen • Führt zu verkürzten Auslieferungszeiten, geringeren Wartungs- und Anpassungsaufwänden • Stellt Skalierbarkeit, Flexibilität, Performance und andere wichtige Systemanforderungen sicher • Hilft Software-Entwicklungsprojekte in kleinere Einheiten zu zerlegen und Parallelentwicklungen zu koordinieren • Minimiert oder verhindert langfristig “big-bang” Integrationsprobleme • Spart mittel- und langfristig enorme Kosten
eigene, teilweise redundante Datenbasis Wo ist die Integrationsstrategie ? Host-basierte Anwendungen Gekaufte Standardpakete, Komplettlösungen eigene, teilweise redundante Datenbasis Anwendungen bedingt durch Mergers, Acquisitions und / oder Partner Neue Anwendungen
• Mehrere Prozesse • Mehrere Schritte • One-way, asynchrone Interaktionen • im Batch oder sofort, individuelle Datenbereitstellg. • Systeme sind physisch unabhängig • Systeme sind logisch unabhängig • Ein Geschäftsprozeß • Mehrere Schritte • One-way, asynchrone Interaktionen • im Batch oder sofort, individuelle Daten-bereitstellungen • Systeme sind physisch unabhängig • Systeme sind logisch abhängig • Ein Geschäftsprozeß • One step • bilaterale, synchrone Interaktionen • Sofortige, individuelle Datenbereitstellung • Systeme sind physisch abhängig • Systeme sind logisch abhängig Drei Integrationsansätze gegenübergestellt Die Daten-Zentrierte Integration Multistep Process Message-Orientierte Integration (MOI) Composite Application Pattern (CAP)
Hub ‘n’ Spoke - Architektur Integrations- Infrastruktur
Technische Anpassung Ort Betriebssystem Programmiersprache Inhaltliche Anpassung Semantik Format Abstraktion / Spezialisierung Die Aufgaben der Speiche Nabe
1. Umsetzung der Daten in ein Document. 2. Transformation mittels XSLT. 3. Transport der serialisierten, transformierten Daten ( z.B. mit CORBA, RMI, COM+ ). Realisierung der Speiche 1 2 3 Nabe
Abbilden einer Struktur in ein Baum ‘per Hand’ ( siehe ‘msg.append()’ ). Generierung des Adapters aus vorhandenen Modellen. Zugriff auf Daten aus einer JDBC-DB mittels XLE. Extraktion von Daten aus beliebigen Textquellen ( z.B. HTML ) mit JEDI. Realisierung der Speiche (1) 1 2 3 Nabe
Einsatz von XSLT Umsetzung von Inhalten:‘Wahr’ -> ‘true’ Umbenennung von Knoten und Attributen:‘Versicherter’ -> ‘Kunde’ Umstrukturierung von Dokumenten: ‘Adresse’ -> ‘Lieferanschrift’ und ‘Rechnungsanschrift’ Realisierung der Speiche (2) 1 2 3 Nabe
Transport durch Standard-Middleware ( z.B. CORBA ) Sprach- und Betriebssystemunabhängigkeit. Transparenter Transportmechanismus. Höherwertige Dienste stehen bereit ( z.B. Security-Service ). Transaktionssicherheit bei Einsatz eines OTS. Realisierung der Speiche (3) 1 2 3 Nabe
Opportunity Gap Potential Vorteile / Vorsprung aufgrund von konsequenter Interenterprise Daten- und Prozeßintegration Lost Opportunity Ohne durchgängige Integrationslösung Inkrementelle Geschäftspartnerschaften
Quelle Zweiteiliger Ansatz Effiziente, leading-edge- Lösungen Mainframe Servicequalität Verfügbarkeit Sicherheit Produktivität Time-to-Market Opportunistische System- / Basis- Anwendungen Anwendungen gekaufte “Komplettlösung” Geringe Einstiegs- kosten Langfristige Machbarkeit Verläßlichkeit
Flexibles Werkzeug. Standardisiert durch W3C. Breite Unterstützung in der Industrie. Open Source Implementierungen. Weitschweifigkeit. Proprietäre Erweiterungs-mechanismen. Bewährungsprobe im Hochlastbereich steht noch aus. XSLT Fazit :
Im neuen Millennium • E-Business • DataWarehouse, DataMining • CRM, Supply-Chain-Mgmt, • ERP, Workflow • Process Integration Hoch Grad der Prozeß- Ausnahmen • In der 80iger-90igern • Eigene Lösungen • Rechnungs- u. Finanzwesen • Dokumenten-Mgmt Gering Gering Prozeß-Komplexität Hoch Die Entwicklung Die wichtigsten Motoren für EAI und das “flexible Unternehmen”