53
XSL in der Praxis Anwendungsbeispiele für die eXtensible Stylesheet Language Andreas Kühne [email protected] XML One 2000

Wozu XSL ?

Embed Size (px)

DESCRIPTION

XSL in der Praxis Anwendungsbeispiele für die eXtensible Stylesheet Language Andreas Kühne [email protected] 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 - PowerPoint PPT Presentation

Citation preview

XSL in der Praxis

Anwendungsbeispiele für die eXtensible Stylesheet Language

Andreas Kü[email protected]

XML One 2000

Wozu XSL ?

XML

XQLXXL

XPointer

XMI

XULXLE

?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

Medien

Medien

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

GeneralizableElementisRoot : BooleanisLeaf : BooleanisAbstract : Boolean

Interf ace ClassisActiv e : Boolean DataType

Namespace

Modelname : Namev isibility : Visibility Kind

0..1

*

+namespace

0..1

+ownedElement

*

Constraintbody : BooleanExpression

1..*

*

+constrainedElement1..*

+constraint

*

Methodbody : ProcedureExpression

Operationspecif ication : UninterpretedisPoly morphic : Booleanconcurrency : CallConcurrency Kind *1..1

+method

*

+specif ication

1..1

Behav ioralFeatureisQuery : Boolean

FeatureownerScope : ScopeKind

Parameterdef aultValue : Expressionkind : ParameterDirectionKind

0..1

*

+behav ioralFeature

0..1

+parameter*

StructuralFeaturemultiplicity : 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*

AttributinitialValue : Expression

Mini-ModellFahrzeug

laenge : Long

Radradius : Long

AutofhrgstNr : 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 &lt;&lt; "<xsl:value-of select="$methodName" />() = " &lt;&lt; <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>) &lt;&lt; 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

SocketsORB

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übergestelltMultistep Process

Message-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.