XSL in der Praxis Anwendungsbeispiele für die eXtensible Stylesheet Language Andreas Kühne...
-
Upload
minna-nabholz -
Category
Documents
-
view
105 -
download
1
Transcript of XSL in der Praxis Anwendungsbeispiele für die eXtensible Stylesheet Language Andreas Kühne...
XSL in der Praxis
Anwendungsbeispiele für die eXtensible Stylesheet Language
Andreas Kü[email protected]
XML One 2000
Wozu XSL ?
XML
XQL
XXL
XPointer
XMI
XUL
XLE
?
DOM
SAX
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 : ‘/’
Resultat :Wurzelelement
Person
NameAdresse
Strasse
Ort
PLZ
XPath Beispiele
Pfad : ‘//PLZ’
Resultat :Element mit dem Namen ‘PLZ’ irgendwo im Dokument
Person
NameAdresse
Strasse
Ort
PLZ
XPath Beispiele
Pfad : ‘/*/Adresse [ ./Ort=“Köln”]’
Resultat :Adress-Element, dessen Kind-Element ‘Ort’ den Wert ‘Köln’ hat
Person
NameAdresse
Strasse
Ort
PLZ
‘Köln’
Transformation
Dokument A Dokument B
XSLT
XSLT Stylesheet
<xslt:stylesheetxmlns: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>
“Sie haben 3 neue Mails.”
<?xml version="1.0"?><message> <anzahl>3</anzahl> ...</message>
Daten-Document
Transformationsregel
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
Ein Document, verschiedene Medien
3 neueMails !
Daten-Document
text.xsl html.xsl
wml.xsl
Spra
chen
Spra
chen
Med
ien
Med
ien
MandantenMandanten
Dimensionen von Ausgabeformaten
Text
HTML
WML
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 )
XMI-ModellPackage ‚Foundation.Core‘, View ‚Backbone‘
Element
GeneralizableElement
isRoot : BooleanisLeaf : BooleanisAbstract : Boolean
Interf ace Class
isActiv e : Boolean DataType
Namespace
Model
name : Namev isibility : Visibility Kind
0..1
*
+namespace
0..1
+ownedElement
*
Constraint
body : BooleanExpression
1..*
*
+constrainedElement1..*
+constraint
*
Method
body : ProcedureExpression
Operation
specif ication : UninterpretedisPoly morphic : Booleanconcurrency : CallConcurrency Kind *1..1
+method
*
+specif ication
1..1
Behav ioralFeature
isQuery : Boolean
Feature
ownerScope : ScopeKindParameter
def aultValue : Expressionkind : ParameterDirectionKind
0..1
*
+behav ioralFeature
0..1
+parameter*
StructuralFeature
multiplicity : Multiplicitychangeable : ChangeableKindtargetScope : ScopeKind
Classif ier1..1
*
+owner
1..1
+f eature*
1..1
*
+ty pe
1..1
+parameter
*
1..1 *
+ty pe
1..1
+structuralFeature
*
*
*
+specif ication
*
+realization
*
Attribut
initialValue : Expression
Mini-Modell
Fahrzeug
laenge : Long
Rad
radius : Long
Auto
fhrgstNr : Long
holeGeschwindigkeit()setzeFhrgstNr() 0..*1 0..*1
Simple.mdl
Simple.mdl xmiToolkit Simple.xmi
XMI Document
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
Down-loadfile
Down-loadfile
Down-loadfile
Screenscrape
Screenscrape
Screenscrape
Screenscrape
Trans-action
file
Trans-action
file
Trans-action
file
Trans-action
file
Messagequeue
Messagequeue
Messagequeue
Sockets
Sockets
ORB
Message
RPC
Message RPC
CICS gateway
APPC
APPC
CICS gateway
ORB
Anwendungs- und Schnittstellen-Spaghetti
Standard Releases
1997 1998 1999 2000 2001 2002 2003
Migrationsunterstützung /-fähigkeit durch den Anbieter
Markt- und User-Anforderungen
Die Wartungslücke bei Paketlösungenbis zum Jahr 2003 werden mindestens 66% aller Anpassungen nur außerhalb der Produkte und
Entwicklungstools der Paketanbieter realisiert werden können
DatenMigration
Parameter Migration
Erweiterung / Migration von Anpassungen
Metadaten-/Versions- Management
Schnittstellen-Management
Quelle
1997 1998 1999 2000 2001 2002 2003
Entwicklung der Implementierung neuer Anwendungen nach unterschiedlichen Realisierungsansätzen
100%
“Selbst-gestrickte”,eigene Integrationslösung
Integration überArchitektur
Integration von Paketlösungen
Die Integrationsproblematik verlagert sich
Quelle
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
NeueAnwendungen
eigene, teilweise
redundante Datenbasis
Anwendungen bedingt durch Mergers, Acquisitions und / oder Partner
Host-basierteAnwendungen Gekaufte
Standardpakete, Komplettlösungen
eigene, teilweise
redundante Datenbasis
Wo ist die Integrationsstrategie ?
Die Daten-Zentrierte Integration
Drei Integrationsansätze gegenübergestellt
Multistep ProcessMessage-Orientierte
Integration (MOI)
Composite Application Pattern (CAP)
• 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
Integrations-Infrastruktur
Hub ‘n’ Spoke - Architektur
Die Aufgaben der Speiche
Nabe
• Technische Anpassung– Ort
– Betriebssystem
– Programmiersprache
• Inhaltliche Anpassung– Semantik
– Format
– Abstraktion / Spezialisierung
Realisierung der Speiche
1. Umsetzung der Daten in ein Document.
2. Transformation mittels XSLT.
3. Transport der serialisierten, transformierten Daten ( z.B. mit CORBA, RMI, COM+ ).Nabe
1
2
3
Realisierung der Speiche (1)
• 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.
Nabe
1
2
3
Realisierung der Speiche (2)
• Einsatz von XSLT– Umsetzung von Inhalten:
‘Wahr’ -> ‘true’
– Umbenennung von Knoten und Attributen:‘Versicherter’ -> ‘Kunde’
– Umstrukturierung von Dokumenten: ‘Adresse’ -> ‘Lieferanschrift’ und ‘Rechnungsanschrift’
Nabe
1
2
3
Realisierung der Speiche (3)
• 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.Nabe
1
2
3
Inkrementelle Geschäftspartnerschaften
Potential
Ohne durchgängigeIntegrationslösung
Vorteile / Vorsprung aufgrund von konsequenter Interenterprise Daten- und Prozeßintegration
LostOpportunity
Opportunity Gap
Mainframe ServicequalitätVerfügbarkeit
Sicherheit
Effiziente, leading-edge-Lösungen
gekaufte“Komplettlösung”
LangfristigeMachbarkeit
Verläßlichkeit
ProduktivitätTime-to-Market
Geringe Einstiegs-kosten
OpportunistischeAnwendunge
n
System- / Basis-Anwendunge
n
Quelle
Zweiteiliger Ansatz
XSLT Fazit :
• 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.
Die EntwicklungDie wichtigsten Motoren für EAI und das “flexible Unternehmen”
Im neuen Millennium
• E-Business•DataWarehouse, DataMining•CRM, Supply-Chain-Mgmt,
•ERP, Workflow• Process Integration
Grad derProzeß-
Ausnahmen
Hoch
Gering
Prozeß-KomplexitätGering Hoch
In der 80iger-90igern
• Eigene Lösungen• Rechnungs- u.
Finanzwesen• Dokumenten-Mgmt
Kritische Erfolgsfaktoren
Anforderungen an das Unternehmens-Management
• Entwicklung flexibler Geschäftsmodelle • Redefinition / Reengineering von Rollen und Funktionen• Entwicklung neuer Geschäftsprozesse
Anforderungen ans IT-Management
• Strategie zur schnellen und sicheren Anwendungsintegration (EAI-Strategie)
• Flexibilität — Build/Buy/Outsource • Effizientes Infrastruktur-Management• absolute Gewährleistung von Sicherheit, Verfügbarkeit und
Datenschutz
Steigende Markt-segmentierung
SchnelligkeitTime to Market
KundenspezifischeAnforderungen
E-Commerce
Neue Geschäftsfelder,VertriebskanäleGlobalisierung
SteigenderWettbewerbsdruck
Outsourcing Partner,Mergers&Acquisitions
bedingen
E A I
InterenterpriseApplicationIntegration
VirtuelleUnternehmen
EAI Infrastruktur
• Enterprise Application Integration ( EAI ) ist die kommende Herausforderung.
• Notwendigkeit einer umfassenden technischen Interoperabilität.
• Notwendigkeit der organisatorischen Anpassung an eine gemeinsame Herausforderung.