Sie sind auf Seite 1von 43

Bonn Boston

Tobias Trapp
XML fr ABAP-Entwickler
1362.book Seite 3 Donnerstag, 1. Oktober 2009 11:32 11
5
Inhalt
Vorwort zur zweiten Auflage .................................................................... 11
In diesem Kapitel lernen Sie die wichtigsten Anwendungsgebiete von XML-Technologien innerhalb und auerhalb der Plattform SAP NetWeaver kennen. 15
1 Einleitung ............................................................................ 15
1.1 Anwendungsgebiete von XML-Technologien ......................... 16
1.1.1 XML fr den Austausch von Daten und
Dokumenten ............................................................. 16
1.1.2 XML im E-Business ................................................... 18
1.1.3 XML in der Anwendungsintegration .......................... 19
1.2 XML innerhalb von SAP NetWeaver ...................................... 19
1.2.1 XML im Datenaustausch ........................................... 19
1.2.2 XML in ABAP-Anwendungen .................................... 21
1.2.3 XML in der ABAP-Entwicklung .................................. 22
1.2.4 XML als Integrationstechnologie ............................... 23
1.2.5 XML fr die Generierung und das Parsen von
Dokumenten ............................................................. 25
1.2.6 XML in Webanwendungen ....................................... 25
1.3 XML-Verarbeitung durch String-Manipulation ....................... 27
1.3.1 Verwendung von String-Operationen ........................ 27
1.3.2 Parsen mit regulren Ausdrcken .............................. 28
1.3.3 Softwaretechnische Grnde fr Application
Programming Interfaces ............................................ 29
1.4 Zusammenfassung ................................................................. 29
In diesem Kapitel lernen Sie die wichtigsten Mitglieder der XML-Familie kennen, beginnend mit der Syntax und Semantik von XML bis hin zum Vokabular der Semantic-Web-Standards. 31
2 XML-Standards und XML-Middleware .............................. 31
2.1 Einfhrung in XML ................................................................ 31
2.1.1 XML-Syntax .............................................................. 32
2.1.2 XML-Semantik .......................................................... 39
2.2 XML-Vokabulare ................................................................... 40
2.2.1 Really Simple Syndication ......................................... 40
2.2.2 WordML, ODF und OOXML ..................................... 42
2.2.3 XSL Formatting Objects ............................................ 42
2.2.4 Scalable Vector Graphics ........................................... 44
2.2.5 XHTML ..................................................................... 45
2.2.6 XML-Linking ............................................................. 45
2.3 XSL-Transformationen ........................................................... 46
2.3.1 Lokalisierungen mit XPath ......................................... 48
1362.book Seite 5 Donnerstag, 1. Oktober 2009 11:32 11
Inhalt
6
2.3.2 Template-Verarbeitung mit XSLT .............................. 49
2.3.3 Strken und Schwchen von XSLT ............................. 51
2.4 XML-Schemasprachen ........................................................... 51
2.4.1 Document Type Definitions ...................................... 52
2.4.2 XML Schema ............................................................. 53
2.4.3 Schematron ............................................................... 59
2.4.4 Grundregeln fr die Erstellung eigener Vokabulare .... 61
2.5 XML als Basis des Semantic Web ........................................... 62
2.5.1 Resource Description Framework .............................. 62
2.5.2 Web Ontology Language ........................................... 66
In diesem Kapitel lernen Sie die XML-Library kennen. Sie ist die lteste XML-Programmierschnittstelle des AS ABAP und die einzige, die einen Service zur Validierung von XML-Dokumenten gegen DTDs bietet. 71
3 XML-Library ........................................................................ 71
3.1 Einfhrung ............................................................................. 72
3.1.1 Erzeugen eines DOM-Baumes ................................... 72
3.1.2 Filter und Iteratoren .................................................. 74
3.2 Wichtige Interfaces ................................................................ 76
3.3 Datenquellen ......................................................................... 78
3.4 DOM-API .............................................................................. 79
3.4.1 Zugriff auf den DOM-Baum ....................................... 79
3.4.2 Manipulation eines DOM-Baumes ............................ 80
3.5 Rendern von XML-Dokumenten ............................................ 82
3.6 Validierung gegen Document Type Definitions ...................... 83
3.6.1 Interner Verweis auf eine Document Type
Definition ................................................................. 84
3.6.2 Validierung bei internen Document Type
Definitions ................................................................ 85
3.6.3 Validierung bei externen Document Type
Definitions ................................................................ 85
3.7 Untersttzung von Namensrumen ........................................ 86
3.7.1 Namensraumuntersttzung der XML-Library ............. 87
3.7.2 Elementidentifikation mit Namensrumen ................. 90
3.8 Ereignisbasiertes Parsen ......................................................... 91
3.8.1 SAX-Schnittstelle ...................................................... 91
3.8.2 Fallstricke ................................................................. 93
3.9 Service-Schnittstellen zur XML-Library ................................... 94
Sie lernen in diesem Kapitel mit dem SXML-Parser die jngste XML-Programmierschnittstelle im AS ABAP kennen. ber diese knnen Sie auch binre XML-Daten erzeugen. 97
4 SXML-Parser ....................................................................... 97
4.1 Reader- und Writer-Klassen ................................................... 98
4.2 SXML-Parser .......................................................................... 101
4.2.1 Zugriff ber das Interface IF_SXML_NODE ................ 102
1362.book Seite 6 Donnerstag, 1. Oktober 2009 11:32 11
Inhalt
7
4.2.2 Token-Modus ........................................................... 104
4.3 Anwendungsbeispiele ............................................................ 105
4.3.1 Verwendung von Binary XML .................................... 105
4.3.2 Ermittlung des Headers eines XML-Dokumentes ....... 106
In diesem Kapitel lernen Sie den ABAP-XSLT-Prozessor und seine SAP-spezifischen Erweiterungen kennen. XSLT ist eines der mchtigsten Werkzeuge zur Verarbeitung von XML-Dokumenten. 109
5 XSL-Transformationen ........................................................ 109
5.1 Integration von XSLT in die ABAP Workbench ....................... 110
5.1.1 Tag Browser .............................................................. 111
5.1.2 XSLT-Tester .............................................................. 111
5.1.3 bergabe von Parametern im XSLT-Tester ................ 112
5.1.4 XSLT-Debugger ......................................................... 113
5.2 Integration von XSLT in ABAP ............................................... 114
5.2.1 Aufruf von XSLT aus ABAP ........................................ 115
5.2.2 Aufruf von ABAP aus XSLT ........................................ 117
5.2.3 Ausnahmebehandlung bei ABAP-Aufrufen
von XSLT .................................................................. 122
5.3 Transformation von ABAP-Daten ........................................... 123
5.4 SAP-spezifische Erweiterungen .............................................. 127
5.4.1 Numerische Funktionen ............................................ 127
5.4.2 String-Funktionen ..................................................... 128
5.4.3 XPath-Operatoren und Pfadausdrcke aus
XPath 2.0 .................................................................. 129
5.4.4 Kommandos fr Nodesets ......................................... 130
5.4.5 Weitere Funktionen .................................................. 130
5.4.6 SAP-spezifische Einschrnkungen .............................. 133
5.5 XSLT-2.0-Untersttzung ........................................................ 134
5.5.1 Definitionen von XPath-Funktionen und bedingte
XPath-Ausdrcke ...................................................... 134
5.5.2 Gruppierung von XML-Elementen ............................. 135
5.5.3 Mehrere Ein- und Ausgabedokumente ...................... 139
5.5.4 Ausgabeformatierung ................................................ 141
5.6 Generierung von Code ........................................................... 141
5.6.1 Text-Templates ......................................................... 142
5.6.2 Abstrakte Syntaxbume von XPath-Ausdrcken ........ 144
5.7 Tipps fr die Praxis ................................................................ 145
5.7.1 Encoding .................................................................. 145
5.7.2 Performance ............................................................. 145
5.7.3 Erweiterungen .......................................................... 146
5.7.4 Modularisierung von Transformationsprogrammen .... 146
5.7.5 Konstruktion portabler Transformationen .................. 147
1362.book Seite 7 Donnerstag, 1. Oktober 2009 11:32 11
Inhalt
8
Simple Transformations bezeichnen eine SAP-proprietre Programmiersprache, die Sie einsetzen sollten, wenn Performanceaspekte wichtig sind oder Sie groe XML-Dokumente verarbeiten wollen. Wie das in der Praxis funktioniert, zeigt Ihnen dieses Kapitel. 149
6 Simple Transformations ...................................................... 149
6.1 Grundstruktur ........................................................................ 150
6.2 Zugriff auf Datenobjekte ........................................................ 153
6.2.1 Zugriff auf elementare Datenobjekte ......................... 153
6.2.2 Datenwurzeln und Datenknoten ............................... 154
6.2.3 Attribute ................................................................... 156
6.2.4 Strukturen ................................................................. 156
6.2.5 Interne Tabellen ........................................................ 157
6.2.6 XML-Reprsentation von ABAP-Daten ...................... 160
6.3 Variablen und Parameter ....................................................... 161
6.3.1 Zuweisungen von Variablen und Parametern ............. 161
6.3.2 Fallunterscheidungen mit Variablen .......................... 162
6.4 Bedingte Transformationen .................................................... 162
6.4.1 Optionale Elemente und Attribute ............................ 163
6.4.2 Vorbedingungen, Bedingungen und Zusicherungen ... 165
6.4.3 tt:cond im Detail ....................................................... 168
6.4.4 Fallunterscheidung .................................................... 171
6.4.5 Gruppierung ............................................................. 175
6.5 Mappings .............................................................................. 180
6.5.1 Mapping-Attribut ..................................................... 181
6.5.2 Mapping mit Fallunterscheidungen ........................... 181
6.5.3 Bedingte Transformationen mit Variablen ................. 183
6.5.4 Struktur-Mappings .................................................... 184
6.6 Modulare Transformationsprogramme ................................... 185
6.6.1 Unter-Templates ....................................................... 186
6.6.2 Einbindung von Transformationen ............................. 186
6.6.3 Aufruf externer ST-Programme .................................. 186
6.7 Weitere Themen .................................................................... 186
6.7.1 Literale Inhalte .......................................................... 187
6.7.2 Namensrume ........................................................... 188
6.7.3 Typisierung ............................................................... 190
6.7.4 Best Practices ............................................................ 193
6.7.5 Ausblick auf weitere Entwicklungen .......................... 193
Mit XML-Technologien knnen Sie Systeme und Anwendungen verbinden und die Programmierweisen fr neue und innovative Lsungen etablieren. In diesem Kapitel werden Sie dazu die passenden Anwendungsbeispiele kennenlernen sowohl fr XML-Technologien als auch fr fortgeschrittene XSLT-Programmiertechniken. 195
7 XML-Anwendungsbeispiele ................................................ 195
7.1 Unit-Tests von XSLT-Programmen ......................................... 195
7.1.1 Fallbeispiel: Komplexe Operation auf
Knotenmengen ......................................................... 197
7.1.2 Zusammenfassung ..................................................... 201
1362.book Seite 8 Donnerstag, 1. Oktober 2009 11:32 11
Inhalt
9
7.2 Schematron-Implementierung ............................................... 202
7.2.1 Speicherung der Schemata in eCATT-Containern ....... 202
7.2.2 Ablauf der Generierung ............................................. 205
7.2.3 Generierung der Validierungstransformation ............. 207
7.2.4 Erzeugung von XSLT-Entwicklungselementen ............ 210
7.2.5 Zusammenfassung ..................................................... 211
7.3 XSLT-Erweiterungen durch EXSLT .......................................... 212
7.3.1 berprfung regulrer Ausdrcke ............................. 213
7.3.2 Zusammenfassung ..................................................... 215
7.4 REST-Webservices ................................................................. 215
7.4.1 Wiedergabe von Informationen ber Kurzdumps ...... 216
7.4.2 REST-Webservices in der Praxis ................................. 218
7.4.3 Zusammenfassung ..................................................... 221
7.5 Objektserialisierung ............................................................... 221
7.5.1 Anwendungsbeispiel Terminverwaltung .................... 221
7.5.2 Strken und Schwchen ............................................ 225
7.5.3 Zusammenfassung ..................................................... 226
7.6 Domnenspezifische Sprachen ............................................... 226
7.6.1 Anwendungsbeispiel Datumsberechnung .................. 227
7.6.2 Zusammenfassung ..................................................... 232
7.7 XML als Dokumentenformat .................................................. 232
7.7.1 Parsen von Excel-Dokumenten .................................. 233
7.7.2 Erstellung von WordML-Dokumenten ....................... 235
7.7.3 Erzeugung von PDF-Dateien mittels XSL-FO ............. 237
7.7.4 Zusammenfassung ..................................................... 237
In diesem Kapitel werden Sie erfahren, mit welchen XML-Vokabularen Sie Metadaten zu Stamm- und Bewegungsdaten des AS ABAP erzeugen und auf welchen Anwendungsfeldern Sie davon profitieren knnen. 239
8 Metadaten und Semantic-Web-Technologien ................... 239
8.1 Realisierung eines RSS-Feeds ................................................. 241
8.1.1 Exponieren von ABAP-Kurzdumps als RSS-Feed ........ 242
8.1.2 Erzeugung der RSS-Daten ......................................... 246
8.1.3 Zusammenfassung ..................................................... 249
8.2 Resource Description Framework .......................................... 249
8.2.1 Metainformationen fr XML-Transformationen ......... 250
8.2.2 Exponieren der Metadaten als REST-Webservice ....... 258
8.2.3 Integration von Metadaten in XML-Dokumente ........ 258
8.2.4 Zusammenfassung ..................................................... 263
8.3 Ontologien ............................................................................ 263
8.3.1 Verwendungen zwischen Transformationen
im AS ABAP .............................................................. 264
8.3.2 Reasoning in OWL .................................................... 267
1362.book Seite 9 Donnerstag, 1. Oktober 2009 11:32 11
Inhalt
10
8.3.3 Generierung der Ontologie ....................................... 269
8.3.4 Zusammenfassung ..................................................... 273
In diesem Kapitel werden Sie erfahren, mit welchen XML-Vokabularen Sie Metadaten zu Stamm- und Bewegungsdaten des AS ABAP erzeugen und auf welchen Anwendungsfeldern Sie davon profitieren knnen. 239
Anhang ...................................................................................... 275
A Literaturverzeichnis .......................................................................... 275
B Der Autor ........................................................................................ 278
Index ........................................................................................................ 279
1362.book Seite 10 Donnerstag, 1. Oktober 2009 11:32 11
11
Vorwort zur zweiten Auflage
XML-Technologien haben sich zu Schlsseltechnologien von SAP NetWeaver
entwickelt. Wurden die ersten XML-Programmierschnittstellen von Anwen-
dungsentwicklern in erster Linie genutzt, um den Datenaustausch mit exter-
nen Partnern zu betreiben, durchziehen sie nun die gesamte Plattform und
sind Basis fast aller Integrationstechnologien. Auch innerhalb der Anwen-
dungen des SAP NetWeaver Application Servers ABAP (AS ABAP) werden sie
verwendet, wenn flexible Programmiermodelle gefragt sind.
Aus diesem Grund habe ich mich entschlossen, der zweiten Auflage des SAP-
Heftes XML-Datenaustausch in ABAP einen neuen Fokus zu geben, der sich
auch im Titel dieses Buches widerspiegelt. Standen in der ersten Auflage vor
allem Integrationsszenarien im Vordergrund, sollen in dieser Neuauflage
viele unterschiedliche Anwendungsgebiete behandelt werden, um die Str-
ken von XML-basierten Lsungen aufzuzeigen. Insbesondere dieser letzte
Aspekt wird weiter an Bedeutung gewinnen, da der AS ABAP aufgrund sei-
ner Robustheit und der Vielzahl seiner Programmierschnittstellen eine
mchtige Plattform fr die Entwicklung von Geschftsanwendungen ist.
Inhalt, Ziel und Zielgruppen des Buches
Dieses Buch behandelt alle XML-Programmierschnittstellen des AS ABAP.
Ihnen wird vermittelt, in welchen Bereichen der Anwendungsentwicklung
Sie XML-Technologien gewinnbringend einsetzen knnen. Neben den
Grundlagen werden dabei auch fortgeschrittene Programmiertechniken und
Anwendungsgebiete vorgestellt.
Dieses Buch richtet sich an ABAP-Entwickler, die die Grundlagen von XML
und auf XML basierenden Technologien verstehen und einsetzen wollen.
Damit ist es einerseits fr Einsteiger geschrieben, die vielfltige Anwendungen
zum Austausch von Daten und Dokumenten sowie die XML-Anwendungs-
entwicklung in ABAP an sich kennenlernen wollen. Aber auch XML-Profis
und Lsungsarchitekten werden auf den folgenden Seiten eine Vielzahl an
Anregungen und Programmiertricks finden, um flexible und zeitgeme
Lsungen zu entwerfen.
1362.book Seite 11 Donnerstag, 1. Oktober 2009 11:32 11
Vorwort zur zweiten Auflage
12
Aufbau des Buches
In Kapitel 1, Einleitung, werden Sie die wichtigsten Anwendungsgebiete
von XML-Technologien sowohl innerhalb des AS ABAP als auch aus der Per-
spektive der Anwendungsentwicklung kennenlernen. Kapitel 2, XML-Stan-
dards und XML-Middleware, behandelt die Grundlagen und wichtigsten
Standards der XML-Familie. Die in diesem Kapitel diskutierten Standards
werden in den folgenden Anwendungsbeispielen des Buches wieder aufge-
griffen.
Im Anschluss werden die XML-Library (Kapitel 3), der SXML-Parser (Kapitel 4),
XSL-Transformationen (Kapitel 5) und Simple Transformations (Kapitel 6)
detailliert betrachtet. Diese Kapitel dienen Ihnen als Einfhrung in die The-
matik und knnen auch unabhngig voneinander gelesen werden. Jedes die-
ser Kapitel enthlt auch softwaretechnische berlegungen sowie Best
Practices zum Einsatz der jeweiligen Technologie, sie bieten damit auch fort-
geschrittenen Lesern gengend Anregungen.
Kapitel 7, XML-Anwendungsbeispiele, liefert eine Reihe von Anwen-
dungsbeispielen fr XML-Technologien, whrend Kapitel 8, Metadaten
und Semantic-Web-Technologien, den Einsatz von XML-Technologien im
Bereich des Wissensmanagements beleuchtet und eine Einfhrung in soge-
nannte Semantic-Web-Technologien liefert.
Systemvoraussetzungen
Wenn Sie die in diesem Buch beschriebenen Lsungen testen wollen, sollten
Sie ein Testsystem aufsetzen. Fr Test- und Evaluierungszwecke knnen Sie
die ABAP Trial Version mit Release-Stand 7.0 EhP1 aus dem SAP Developer
Network unter http://sdn.sap.com herunterladen: Folgen Sie dem Menver-
lauf Downloads SAP NetWeaver Main Releases.
Viele der hier beschriebenen Technologien lassen sich aber auch bereits mit
Release 6.20 des AS ABAP einsetzen. Stehen bestimmte Techniken erst ab
hheren Releases zur Verfgung, wird gesondert darauf hingewiesen.
Beispiele und ABAP-Quelltext
Alle Codebeispiele dieses Buches knnen Sie sich von der Webseite zum
Buch unter http://www.sap-press.de/2042 als Transporte und auch als SAP-
link-Nuggets (siehe Abschnitt 1.2.3, XML in der ABAP-Entwicklung) her-
unterladen.
1362.book Seite 12 Donnerstag, 1. Oktober 2009 11:32 11
Vorwort zur zweiten Auflage
13
Danksagung
An dieser Stelle mchte ich besonders Karsten Bohlmann fr seine wertvol-
len Hinweise danken. Ebenso danke ich Stefan Proksch von Galileo Press fr
die sehr gute Zusammenarbeit.
Tobias Trapp
Softwarearchitekt, AOK Systems GmbH
1362.book Seite 13 Donnerstag, 1. Oktober 2009 11:32 11
71
In diesem Kapitel lernen Sie die XML-Library kennen. Sie ist die
lteste XML-Programmierschnittstelle des AS ABAP und die einzige,
die einen Service zur Validierung von XML-Dokumenten gegen DTDs
bietet.
3 XML-Library
Die XML-Library auch bekannt als iXML-Library
1
ist die lteste XML-Pro-
grammierschnittstelle des SAP NetWeaver Application Servers ABAP und
steht seit Release 4.6D zur Verfgung. Sie enthlt verschiedene Klassen,
unter anderem fr das Parsen und Rendern von XML-Dokumenten. Da sie
im Kernel des AS ABAP implementiert ist, ist sie schnell und speichereffizi-
ent: Die Objekte zum Zugriff auf die XML-Elemente werden erst dann
erzeugt, wenn auf sie zugegriffen wird.
Die XML-Library besitzt folgende Programmierschnittstellen:
Parser
Es existiert eine Reihe von Parsern: ein eventbasierter, ein tokenbasierter
und ein DOM-basierter Parser. Im Paket SIXML des AS ABAP finden Sie
Beispielprogramme fr diese Programmierschnittstellen: T_PARSING_EVENT,
T_PARSING_TOKEN und T_PARSING_EVENT.
Renderer
Neben dem Lesen von XML-Dokumenten knnen Sie diese auch erzeu-
gen, wobei Sie die Kontrolle ber Zeichenstze und Byteordnung besit-
zen. Dies wird im Programm T_ENCODING demonstriert.
Untersttzung von DTDs
Die XML-Library kann sowohl gegen XML-Dokumente als auch gegen
Document Type Definitions (DTD) validieren und besitzt auch eine API, um
einem XML-Dokument eine interne DTD hinzuzufgen. Hierfr gibt es im
AS ABAP zwei Beispiel-Reports T_DTD_VALIDATION und T_DTD_CREATION.
Die Validierung gegen DTDs wird in Abschnitt 3.6 dargestellt.
1 Der Buchstabe i in iXML steht fr integrated, was bedeutet, dass dieses Softwaremodul in
den Kernel integriert ist.
1362.book Seite 71 Donnerstag, 1. Oktober 2009 11:32 11
XML-Library 3
72
Verglichen mit dem SXML-Parser, der in Kapitel 4 vorgestellt wird, besitzt
die XML-Library einen greren Funktionsumfang, untersttzt aber kein
Binary XML.
Abschnitt 3.1 dieses Kapitels bietet Ihnen eine allgemeine Einfhrung in die
XML-Library, in Abschnitt 3.2 folgt eine Einfhrung in die wichtigsten Pro-
grammierschnittstellen der XML-Library. In Abschnitt 3.3 lernen Sie die
Datenquellen der XML-Library kennen und im darauffolgenden Abschnitt
3.4 eine Programmierschnittstelle, mit der Sie bequem sowohl XML-Doku-
mente lesen als auch erzeugen knnen. Diese XML-Dokumente liegen in
einer Hauptspeicher-Reprsentation, einem sogenannten DOM-Baum, vor.
Wie Sie diesen Baum als Datenstrom ausgeben (rendern), erfahren Sie in
Abschnitt 3.5.
Abschnitt 3.6 beschreibt die Validierung eines Dokumentes gegen Docu-
ment Type Definitions, die Sie schon in Abschnitt 2.4.1 kennengelernt
haben. Im nachfolgenden Abschnitt 3.7 lernen Sie, wie XML-Namensrume
von der XML-Library untersttzt werden. Abschnitt 3.8 behandelt soge-
nannte ereignisbasierte Parser, die Sie einsetzen sollten, wenn Sie extrem
groe XML-Dokumente verarbeiten. Abschnitt 3.9 schliet das Kapitel mit
Informationen zur softwaretechnischen Kapselung der XML-Library, die sich
in Ihren Anwendungen als vorteilhaft erweisen werden.
3.1 Einfhrung
Damit Sie die XML-Library besser kennenlernen, soll zunchst das folgende
Dokument mit der DOM-API der XML-Library erzeugt werden:
<?xml version="1.0" encoding="utf-8" ?>
<root attr="value">
<child>text</child>
</root>
3.1.1 Erzeugen eines DOM-Baumes
Das Programm, das dieses Dokument als einen DOM-Baum, eine objektori-
entierte Reprsentation im Hauptspeicher des AS ABAP, erzeugt, ist in Lis-
ting 3.1 zu sehen. Die Vorgehensweise ist wie folgt:
1. Zuerst erzeugen Sie die zentrale Klasse zum Zugriff auf Funktionen der
XML-Library ber den Aufruf von cl_ixml=>create( ).
1362.book Seite 72 Donnerstag, 1. Oktober 2009 11:32 11
Einfhrung 3.1
73
2. Diese Klasse verwenden Sie, um ber die Methode create_document( )
ein leeres XML-Dokument zu erstellen.
3. Dann erzeugen Sie ein Element ber die Methode create_element( ) und
fgen ein Attribut ber set_attribute( ) hinzu. Dieses Element hngen
Sie ber append_child( ) an das Dokument als Wurzelelement an.
4. Ebenso erstellen Sie ein zweites Element child und fgen einen Textinhalt
ber die Methode set_value( ) hinzu. Dieses Element hngen Sie ber
append_child( ) unter das Wurzelelement.
5. Im Anschluss erzeugen Sie einen Ausgabestrom, der einen XSTRING
erstellt, und rendern das Dokument, um es im Anschluss ber den Funk-
tionsbaustein DISPLAY_XML_STRING anzuzeigen.
REPORT z_ixml_create_document.
DATA:
lr_ixml TYPE REF TO if_ixml,
lr_doc TYPE REF TO if_ixml_document,
lr_element1 TYPE REF TO if_ixml_element,
lr_element2 TYPE REF TO if_ixml_element,
lr_sf TYPE REF TO if_ixml_stream_factory,
lr_ostream TYPE REF TO if_ixml_ostream,
lv_out TYPE xstring,
lr_renderer TYPE REF TO if_ixml_renderer.
lr_ixml = cl_ixml=>create( ).
lr_doc = lr_ixml->create_document( ).
lr_element1 = lr_doc->create_element( name = 'root' ).
lr_element1->set_attribute( name = 'attr' value = 'value' ).
lr_doc->append_child( lr_element1 ).
lr_element2 = lr_doc->create_element( name = 'child' ).
lr_element2->set_value( 'text' ).
lr_element1->append_child( lr_element2 ).
lr_sf = lr_ixml->create_stream_factory( ).
lr_ostream = lr_sf->create_ostream_xstring( lv_out ).
lr_renderer = lr_ixml->create_renderer(
document = lr_doc
ostream = lr_ostream ).
lr_renderer->render( ).
CALL FUNCTION 'DISPLAY_XML_STRING'
EXPORTING
xml_string = lv_out.
Listing 3.1 Erstellung, Rendering und Anzeige eines XML-Dokumentes
1362.book Seite 73 Donnerstag, 1. Oktober 2009 11:32 11
XML-Library 3
74
3.1.2 Filter und Iteratoren
Als zweites Beispiel fr die XML-Library lernen Sie nun Filter und Iteratoren
kennen. Auf diese Weise knnen Sie gezielt Knotenmengen sukzessive ver-
arbeiten. Dies geschieht wie folgt:
1. Das Interface IF_IXML_DOCUMENT besitzt eine Methode create_filter_name_
ns( ), mit der Sie das Dokument auf Elemente einschrnken knnen. In
Listing 3.2 whlen Sie alle Elemente, die im Namensraum urn:filter liegen.
2. Anhand dieses Filters definieren Sie einen Iterator ber die Methode
create_iterator_filtered( ). ber die Methode get_next( ) des Itera-
tors knnen Sie nun sukzessive die entsprechenden Knoten selektieren.
REPORT z_ixml_iterate_by_filter.
DATA:
lr_ixml TYPE REF TO if_ixml,
lr_doc TYPE REF TO if_ixml_document,
lr_sf TYPE REF TO if_ixml_stream_factory,
lr_istream TYPE REF TO if_ixml_istream,
lv_string TYPE string,
lr_name TYPE string,
lr_filter TYPE REF TO if_ixml_node_filter,
lr_iterator TYPE REF TO if_ixml_node_iterator,
lr_node TYPE REF TO if_ixml_node.
DEFINE xml.
CONCATENATE lv_string &1 INTO lv_string.
END-OF-DEFINITION.
xml '<root xmlns:filter="urn:filter">'.
xml ' <filter:child_1>'.
Tipp: Pretty Print von XML-Dokumenten
XML-Dokumente knnen Sie auch lesbar ausgeben, indem Sie die Methode set_
normalizing( ) verwenden. Auf diese Weise werden zustzliche Whitespaces
eingefgt, sodass die hierarchische Struktur des XML-Dokumentes besser erkenn-
bar ist.
Tipp: Anzeige von XML-Dokumenten
Fr die Anzeige von XML-Dokumenten verwenden Sie am besten den Funktions-
baustein DISPLAY_XML_STRING. Dieser ist eine Kapselung des HTML-Controls CL_
GUI_HTML_VIEWER.
1362.book Seite 74 Donnerstag, 1. Oktober 2009 11:32 11
Einfhrung 3.1
75
xml ' <child_2>'.
xml ' <filter:child_3/>'.
xml ' </child_2>'.
xml ' </filter:child_1>'.
xml '</root>'.
lr_ixml = cl_ixml=>create( ).
lr_doc = lr_ixml->create_document( ).
CALL TRANSFORMATION id
SOURCE XML lv_string
RESULT XML lr_doc.
lr_filter = lr_doc->create_filter_name_ns(
name ='*' namespace = 'urn:filter' ).
lr_iterator = lr_doc->create_iterator_filtered( lr_filter ).
lr_node ?= lr_iterator->get_next( ).
WHILE lr_node IS NOT INITIAL.
lr_name = lr_node->get_name( ).
WRITE :/ 'Found a node ', lr_name.
lr_node ?= lr_iterator->get_next( ).
ENDWHILE.
Listing 3.2 Verwendung eines Iterators
Sie haben in Listing 3.2 den Befehl CALL TRANSFORMATION verwendet, um ein
XML-Dokument in eine Instanz von IF_IXML_DOCUMENT zu berfhren. Sie
werden in Abschnitt 3.3, Datenquellen, noch weitere Alternativen dazu
sehen.
In Listing 3.2 wurden die Knoten des Namensraums urn:filter des folgen-
den XML-Dokumentes ausgegeben; das waren die Knoten child_1 und
child_3:
<root xmlns:filter="urn:filter">'.
<filter:child_1>
<child_2>
<filter:child_3/>
</child_2>
</filter:child_1>
</root>
Bevor Sie die Verwendung der XML-Library anhand einiger Anwendungs-
flle kennenlernen, werden im folgenden Abschnitt noch zentrale Interfaces
vorgestellt.
1362.book Seite 75 Donnerstag, 1. Oktober 2009 11:32 11
XML-Library 3
76
3.2 Wichtige Interfaces
Die XML-Library bietet eine Vielzahl von Funktionen zum Parsen und Erzeu-
gen von XML-Dokumenten. Der Zugriff auf diese APIs erfolgt ber Inter-
faces. Durch diese Konstruktion wird die Funktionalitt einer Schnittstelle
von ihrer Implementierung getrennt.
Eine vollstndige Dokumentation der XML-Library ist im SAP Help Portal
(http://help.sap.com) im gleichnamigen Abschnitt zu finden. Allein die Viel-
zahl der Interfaces bereitet Einsteigern oft Schwierigkeiten. Daher soll hier
ein Einblick in wichtige Programmierschnittstellen gegeben werden. Der
verbleibende Teil erschliet sich dann erfahrungsgem schnell von selbst.
Interface IF_IXML
Fr Entwickler bietet das Interface IF_IXML den zentralen Zugang zu den
bisher vorgestellten Funktionalitten. Mit ihm lassen sich andere Objekte
instanzieren, zum Beispiel zum Parsen oder Rendern eines XML-Doku-
mentes. Das Interface wird ber die Klasse CL_IXML implementiert. Diese
Klasse ist ein Singleton-Objekt: Mehrfache Aufrufe der Methode cl_
ixml=>create( ) liefern immer dasselbe Objekt.
Interface IF_IXML_DOCUMENT
Das Interface IF_XML_DOCUMENT reprsentiert das komplette XML-Doku-
ment, indem es den Dokumentenknoten eines XML-Dokumentes abbil-
det. IF_IXML_DOCUMENT ist somit vom Interface IF_IXML_NODE abgeleitet,
aber um weitere Methoden erweitert. Als Beispiel sei die Methode find_
from_path_ns( ) genannt, mit der ein Knoten mit einem eingeschrnkten
XPath-Ausdruck identifiziert werden kann.
Interface IF_IXML_NODE
IF_IXML_NODE reprsentiert einen Knoten in der DOM-Darstellung eines
Dokumentes (siehe Abschnitt 3.3, Datenquellen). Der Typ eines Kno-
tens kann mit der Methode get_type( ) ermittelt werden: Es kann sich
dabei zum Beispiel um einen Kommentar- oder Textknoten handeln. Fr
einen vollstndigen berblick ber die Knotentypen sollten Sie sich die
Attribute des Interface IF_IXML_NODE anzeigen lassen. ber die Methode
get_name( ) lsst sich der Name des Knotens ermitteln, mit get_value( )
dessen Inhalt.
Auf die Attribute eines Knotens kann ber ein von IF_IXML_NODE abgelei-
tetes Objekt IF_IXML_ATTRIBUTE zugegriffen werden. Sie erhalten sie ber
die Methode get_attributes( ).
1362.book Seite 76 Donnerstag, 1. Oktober 2009 11:32 11
Wichtige Interfaces 3.2
77
Auf die Kindelemente eines Elementknotens lsst sich ber die Methode
get_children( ) zugreifen. Es existieren noch weitere Methoden, wie
zum Beispiel die Methode get_gid( ), die eine dem Knoten zugeordnete
Nummer liefert. Mithilfe dieser Nummer lassen sich umgekehrt ber die
Methode find_from_gid( ) Knoten identifizieren.
Die API untersttzt auch Iteratoren, mit denen sich Knotenmengen durch-
wandern lassen: Ein Iterator wird mit create_iterator( ) definiert, und
mit get_next( ) wird auf das folgende Element zugegriffen. Da alle Teile
eines Dokumentes ber Objekte, die das Interface IF_IXML_NODE oder
davon abgeleitete Interfaces haben, angesprochen werden knnen, ist
damit eine generische Programmierweise mglich.
Stream-Interfaces
Das Interface IF_IXML_STREAM ist das Basis-Interface fr alle Eingabe-
und Ausgabestrme von XML-Daten. Der XML-Parser arbeitet auf Objek-
ten, die das Interface IF_IXML_ISTREAM definieren, und der XML-Rende-
rer arbeitet umgekehrt auf IF_IXML_OSTREAM. Ein- und Ausgabestrom
knnen an eine Datei auf dem Applikationsserver, einen String oder eine
interne Tabelle gebunden sein. Ein Objekt fr einen Datenstrom wird
durch eine sogenannte Factory ber das Interface IF_IXML_STREAM_
FACTORY instanziert.
Interface IF_IXML_PARSER
Der Parser der XML-Library baut entweder einen DOM-Baum aus einem
XML-Eingabestrom auf, oder er arbeitet rein ereignisbasiert. Im zweiten
Fall ist es erforderlich, ein Objekt mit dem Interface IF_IXML_EVENT zu
erstellen. Zuvor mssen die Ereignisse, die abgefangen werden sollen,
beim Parser angemeldet werden.
In den folgenden Abschnitten werden Sie anhand einiger Programmbei-
spiele die Einsatzmglichkeiten des XML-Parsers kennenlernen, sich mit der
DOM- und SAX-API, mit der Validierung gegen eine Document Type Defini-
tion und mit Namensraumaspekten beschftigen. Fr weitergehende Details
wie die Behandlung von Whitespaces ber die Methode set_normalizing( )
oder die bernahme von Attribut-Default-Werten aus der DTD ber set_
supply_attr_defaults( ) sei auf den Abschnitt XML Library im SAP Help
Portal verwiesen.
1362.book Seite 77 Donnerstag, 1. Oktober 2009 11:32 11
XML-Library 3
78
3.3 Datenquellen
Um ein XML-Dokument zu parsen, muss der Inhalt einem Objekt zugewie-
sen werden, das das Interface IF_IXML_ISTREAM implementiert. Eine Mg-
lichkeit besteht darin, dieses Interface ber die Methode create_istream_
uri( ) von IF_IXML_STREAM_FACTORY zu erzeugen und dem Datenstrom eine
Datei auf dem Applikationsserver zuzuweisen; ein Dateipfad auf dem Prsen-
tationsserver oder eine URL sind nicht zulssig. Diese Vorgehensweise ist in
Listing 3.3 zu sehen.
DATA lv_filename TYPE string VALUE '/xch/dataset.xml'.
DATA lr_factory TYPE REF TO if_ixml_stream_factory.
DATA lr_parser TYPE REF TO if_ixml_parser.
DATA lr_xmlstream TYPE REF TO if_ixml_istream.
DATA lr_tmpdoc TYPE REF TO if_ixml_document.
DATA lr_ixml TYPE REF TO if_ixml.
* Erzeuge das Haupt-Factory-Objekt der XML-Library
lr_ixml = cl_ixml=>create( ).
* Erzeuge ein temporres Dokument fr das Parsen
lr_tmpdoc = lr_ixml->create_document( ).
* Erzeuge ein Stream-Factory-Objekt
lr_factory = lr_ixml->create_stream_factory( ).
* Erzeuge den Eingabestrom
lr_xmlstream = lr_factory->create_istream_uri(
system_id = lv_filename ).
Listing 3.3 XML-Dokument auf dem Dateisystem des Applikationsservers
In den meisten Anwendungsfllen liegen die XML-Dokumente nicht als
Dateien auf dem Applikationsserver vor, sondern als Strings oder Bytefol-
gen, die aus verschiedenen Datenquellen stammen knnen, wie beispiels-
weise transparente Tabellen oder Datenquellen, die ber das Internet Com-
munication Framework zur Verfgung stehen. Mit diesem Aspekt beschftigt
sich Abschnitt 7.4, REST-Webservices.
Liegt der Inhalt eines Dokumentes in einem String vor, knnen Sie diesen
mit der Methode create_istream_xstring( ) bergeben, was in Listing 3.4
beschrieben ist.
* Erzeuge das Haupt-XML-Library-Factory-Objekt
lr_ixml = cl_ixml=>create( ).
1362.book Seite 78 Donnerstag, 1. Oktober 2009 11:32 11
DOM-API 3.4
79
* Erzeuge ein temporres Dokument
lr_tmpdoc = lr_ixml->create_document( ).
* Erzeuge ein Factory-Objekt fr den Eingabestrom
lr_factory = lr_ixml->create_stream_factory( ).
* Erzeuge den Eingabestrom
lr_xmlstream = lr_factory->create_istream_xstring(
string = xmldata ).
Listing 3.4 String als Eingabestrom
Da die XML-Library intern mit UTF-16 arbeitet, ist es mglich, Unicode zu
verarbeiten.
2
Jedoch besteht das Risiko, dass einige Zeichen nicht korrekt
dargestellt werden. Umgekehrt ist es aber auch erlaubt, XML-Dateien zum
Beispiel in UTF-8 zu erzeugen, was im folgenden Abschnitt gezeigt wird.
3.4 DOM-API
Das Document Object Model (DOM) bietet eine API fr das Parsen und Mani-
pulieren von XML-Dokumenten in Baumstrukturen. DOM basiert auf einer
Reihe von W3C-Empfehlungen und liegt derzeit in Level 2 vor (http://
www.w3.org/TR/DOM-Level-2-Core). In der XML-Library ist eine bermenge
von Level 1 (http://www.w3.org/TR/DOM-Level-1) inklusive Namensraumun-
tersttzung implementiert.
3.4.1 Zugriff auf den DOM-Baum
DOM-basierte Interfaces werden beispielsweise fr Konfigurationsdateien
verwendet: Ein XML-Dokument wird mithilfe der DOM-API in den Haupt-
speicher geladen und liegt dort in einem sogenannten DOM-Baum vor. Diese
Techniken knnen natrlich auch zur bequemen Auswertung von Header-
Elementen eines XML-Dokumentes verwendet werden.
2 Interne Konvertierungen von UTF-16 zur SAP-Codepage sind hufig ein Grund fr schlechte
Performanz whrend der XML-Verarbeitung.
Document Object Model ist eine standardisierte Schnittstelle
Ein DOM-Baum ist auch ein Modell fr ein XML-Dokument. Leider sind die Modelle
fr XML-Dokumente in den unterschiedlichen Spezifikationen (zum Beispiel XML
1.0, XPath 1.0, XML Schema, DOM und SAX) nicht einheitlich, sondern weisen
kleine Unterschiede auf, die zum Glck nur in wenigen Fllen Probleme bereiten.
1362.book Seite 79 Donnerstag, 1. Oktober 2009 11:32 11
XML-Library 3
80
Die API stellt Methoden fr einen Zugriff auf beliebige Teile des Dokumen-
tes zur Verfgung, unter Level 1 und Level 2 allerdings nicht mit vollstndi-
ger XPath-Untersttzung. Trotzdem verfgt das Interface IF_IXML_DOCUMENT
ber die Mglichkeit, auf Elemente mittels eines Pfadausdrucks zuzugreifen,
was im Folgenden an einem Beispiel vorgefhrt wird. Fr eine vollstndige
Dokumentation sei auf das SAP Help Portal verwiesen.
3.4.2 Manipulation eines DOM-Baumes
Sie werden nun sehen, wie ein DOM-Baum manipuliert wird. Das Eingabe-
dokument ist eine Nachricht im cXML-Format zum Austausch von Geschfts-
nachrichten (siehe Abschnitt 2.5, XML als Basis des Semantic Web). Eine
solche Nachricht besitzt ein Wurzelelement cXML mit den Kindelementen
Header und Request.
Sie sehen die Struktur in Abbildung 3.1. Diese Abbildung wurde brigens
ber den Funktionsbaustein F4_HELP_XML_TREE erstellt, mit dem Sie ein
Dokument als Treeview ausgeben und einen bestimmten Knoten selektieren
knnen und den Pfad im Dokument als Rckgabewert erhalten. Die dafr
bentigte Service-Schnittstelle werden Sie in Abschnitt 3.9, Service-Schnitt-
stellen zur XML-Library, kennenlernen.
Abbildung 3.1 Aufbau einer cXML-Beispielnachricht
Ausgangspunkt fr die Manipulation eines XML-Dokumentes mit den
Methoden der XML-Library ist ein Dokument in der in Abbildung 3.1 darge-
stellten Struktur. Zu dieser Eingangsnachricht soll eine Quittungsnachricht
erstellt werden. Hierzu gehen Sie wie folgt vor:
1362.book Seite 80 Donnerstag, 1. Oktober 2009 11:32 11
DOM-API 3.4
81
1. Sie lschen die Elemente Header und Request unter dem Wurzelelement
und fgen folgende Elemente und Attribute ein, wie es die cXML-Spezifi-
kation vorschreibt:
<Response>
<Status code="200" text="OK"/>
</Response>
2. Das geschieht, wie in Listing 3.5 gezeigt, indem Sie die zu lschenden Ele-
mente ber die Methode find_from_path_ns( ) identifizieren, ber
remove_node( ) lschen und dann ber die Methoden append_child( )
und set_attribute( ) die Elemente und Attribute hinzufgen.
* Lies einen Knoten
lr_element = lr_document->find_from_path_ns(
default_uri = `` path = `/cXML/Header`).
lr_element->remove_node( ).
* Lies einen Knoten
lr_element = lr_document->find_from_path_ns(
default_uri = `` path = `/cXML/Request`).
* Lsche den alten Payload
lr_element->remove_node( ).
* Ermittle das Wurzelelement
lr_cxml = lr_document->find_from_path_ns(
default_uri = `` path = `/cXML`).
* Erzeuge ein Antwortelement
lr_element = lr_document->create_element(
name = `Response` ).
lr_cxml->append_child( lr_element ).
lr_status = lr_document->create_element( name = `Status` ).
lr_element->append_child( lr_status ).
lr_status->set_attribute( name = `code` value = `200` ).
lr_status->set_attribute( name = `test` value = `OK` ).
lr_cxml->set_attribute(
name = `timestamp`
value = `2006-04-20T23:59:45-07:00` ).
Listing 3.5 Manipulation des DOM-Baumes
Auf die Methode find_from_path_ns( ) wird im Zusammenhang mit
Namensrumen (siehe Abschnitt 3.6, Validierung gegen Document Type
Definitions) noch eingegangen.
1362.book Seite 81 Donnerstag, 1. Oktober 2009 11:32 11
XML-Library 3
82
3.5 Rendern von XML-Dokumenten
In Abschnitt 3.4 wurde Ihnen gezeigt, wie Sie einen DOM-Baum aufbauen.
Nun erfahren Sie, wie Sie diesen ausgeben knnen.
Im folgenden Beispiel wird davon ausgegangen, dass das Eingabedokument
im String lv_xmldata vorliegt, und zwar in einem beliebigen Zeichensatz,
wie zum Beispiel ISO-8859-1, der der SAP-Standard-Codepage 1100 ent-
spricht. Das Ausgabedokument ist ein String lv_cstr in einer UTF-8-Code-
page.
Die einzelnen Schritte knnen Sie Listing 3.6 entnehmen: Sie erzeugen
zuerst einen Eingabestrom fr Strings ber eine Stream-Factory, dann erstel-
len Sie ein Eingabedokument vom Typ IF_IXML_DOCUMENT, das Sie mit einem
Eingabestrom (hier nur ein Wurzelelement) befllen. Nach dem Parsen
geben Sie es in einen Ausgabestrom vom Typ IF_IXML_OSTREAM aus, wobei
Sie mit der Methode create_encoding( ) die Ausgabeoptionen festlegen.
Beachten Sie, dass erst mit der Methode render( ) der Ausgabe-String
befllt wird.
DATA: lr_ixml TYPE REF TO if_ixml,
lr_streamfactory TYPE REF TO if_ixml_stream_factory,
lr_parser TYPE REF TO if_ixml_parser,
lr_istream TYPE REF TO if_ixml_istream,
lr_document TYPE REF TO if_ixml_document,
lr_node TYPE REF TO if_ixml_node,
lv_xmldata TYPE string,
lv_cstr TYPE string,
lr_ostream TYPE REF TO if_ixml_ostream,
lr_encoding TYPE REF TO if_ixml_encoding,
lr_renderer_cstr TYPE REF TO if_ixml_renderer,
lv_ret TYPE I.
* Beflle den String lv_xmldata
lv_xmldata = `<root/>`.
* Erzeuge das zentrale Factory-Objekt
lr_ixml = cl_ixml=>create( ).
* Erzeuge ein Factory-Objekt fr Datenstrme
lr_streamfactory = lr_ixml->create_stream_factory( ).
* Erzeuge ein Objekt fr den Eingabestrom
lr_istream = lr_streamfactory->create_istream_string(
string = lv_xmldata ).
1362.book Seite 82 Donnerstag, 1. Oktober 2009 11:32 11
Validierung gegen Document Type Definitions 3.6
83
* Erzeuge ein Dokument
lr_document = lr_ixml->create_document( ).
* Erzeuge den Parser
lr_parser = lr_ixml->create_parser(
document = lr_document
stream_factory = lr_streamfactory
istream = lr_istream ).
* Erzeuge durch Parsen einen DOM-Baum
IF lr_parser->parse( ) <> 0.
* Wirf eine Ausnahme
RETURN.
ENDIF.
* Erzeuge ein Ausgabeobjekt
lr_ostream = lr_streamfactory->create_ostream_cstring(
string = lv_cstr ).
* Ausgabe UTF-8 mit plattformabhngiger Byteordnung:
lr_encoding = lr_ixml->create_encoding(
character_set = 'UTF-8'
byte_order = -1 ).
* Erzeuge ein Renderer-Objekt
lr_renderer_cstr = lr_ixml->create_renderer(
document = lr_document
ostream = lr_ostream ).
* Verwende den Renderer
lv_ret = lr_renderer_cstr->render( ).
* Schliee den Ausgabestrom
lr_ostream->close( ).
Listing 3.6 Rendern von XML-Dokumenten
3.6 Validierung gegen Document Type Definitions
Document Type Definitions wurden in Abschnitt 2.4.1 vorgestellt. Die XML-
Library besitzt im Interface IF_IXML_PARSER die Mglichkeit, XML-Doku-
mente whrend des Parsens gegen DTDs zu validieren. Die Validierung lsst
sich ber die Methode set_validating( ) aktivieren und deaktivieren.
Dabei sind folgende Werte mglich:
1362.book Seite 83 Donnerstag, 1. Oktober 2009 11:32 11
XML-Library 3
84
IF_IXML_PARSER=>CO_NO_VALIDATION
Diese Einstellung aktiviert die Validierung und gibt die Fehlermeldung
unexpected symbol: '<DOCTYPE' aus, wenn ein Verweis auf eine DTD im
XML-Dokument enthalten ist.
IF_IXML_PARSER=>CO_VALIDATION
Diese Einstellung meldet umgekehrt einen Fehler, wenn es keinen Ver-
weis auf eine DTD gibt.
3.6.1 Interner Verweis auf eine Document Type Definition
Ein Verweis auf eine DTD kann ber einen internen oder externen Verweis
erfolgen.
Beim internen Verweis erfolgt die Document Type Definition im Doku-
ment, wie im Beispiel von <!DOCTYPE rss [ ]>, wobei in den eckigen
Klammern die Strukturbeschreibung des Wurzelelementes rss des Doku-
mentes erfasst ist. Listing 3.7 zeigt ein XML-Dokument mit einer internen
DTD analog zur externen DTD in Abschnitt 3.6.3.
<!DOCTYPE rss [
<!ATTLIST rss version NMTOKEN #FIXED "2.0">
<!ELEMENT channel>
<!ELEMENT channel ((title | link | description)+, item+)>
...
]>
<rss version="2.0">
<channel>
<title>ABAP Short Dumps</title>
<link>http://localhost:8000/z_rabax/rss</link>
<description>Content of transaction ST22</description>
<item>
...
</item>
</channel>
</rss>
Listing 3.7 XML-Dokument mit interner DTD
ber den Zusatz <!DOCTYPE rss PUBLIC> oder <!DOCTYPE rss SYSTEM>
erfolgt ein externer Verweis auf eine URI, in der die DTD zu finden ist.
ber die Anweisung <!DOCTYPE rss SYSTEM> kann auf eine DTD am sel-
ben Bezugsort wie das XML-Dokument verwiesen und zum Beispiel ein
Pfad auf dem Applikationsserver angegeben werden.
1362.book Seite 84 Donnerstag, 1. Oktober 2009 11:32 11
Validierung gegen Document Type Definitions 3.6
85
3.6.2 Validierung bei internen Document Type Definitions
Die Validierung kann wie in Listing 3.8, das ab Release 6.10 des AS ABAP
lauffhig ist, vorgenommen werden. ber die Konstante IF_IXML_PAR-
SER=>CO_VALIDATE_IF_DTD knnen Sie angeben, dass eine Validierung vor-
genommen werden soll, sofern eine DTD spezifiziert ist, die in diesem Fall
Teil des XML-Dokumentes ist. Im Anschluss geben Sie die Fehler und War-
nungen aus.
* Erzeuge den XML-Parser
lr_parser = lr_ixml->create_parser(
document = lr_document
stream_factory = lr_factory
istream = lr_istream ).
lr_parser->set_validating(
mode = if_ixml_parser=>co_validate_if_dtd ).
* Erzeuge einen DOM-Baum aus dem Dokument
IF lr_parser->parse( ) <> 0.
* Zhle die Fehlermeldungen
lv_count = lr_parser->num_errors(
min_severity = if_ixml_parse_error=>co_error ).
* Gib die Fehlermeldungen aus
DO lv_count TIMES.
lv_index = sy-index - 1.
lr_error = lr_parser->get_error( index = lv_index ).
lv_msg = lr_error->get_reason( ).
lv_off = lr_error->get_offset( ).
IF lr_error->get_severity( ) =
if_ixml_parse_error=>co_warning.
WRITE: / 'Warnung: ', lv_msg, lv_off.
ELSE.
WRITE: / 'Fehler: ', lv_msg, lv_off.
ENDIF.
ENDDO.
ENDIF.
Listing 3.8 Validierung gegen eine DTD
3.6.3 Validierung bei externen Document Type Definitions
Wollen Sie ein XML-Dokument validieren, das ber eine URI auf einen
externen Bezugsort verweist, gehen Sie wie folgt vor:
1. Die DTD liegt in einem String vor, der in einen IF_IXML_ISTREAM eingele-
sen wurde und der der in Listing 3.9 dargestellten DTD entspricht.
1362.book Seite 85 Donnerstag, 1. Oktober 2009 11:32 11
XML-Library 3
86
2. Dann teilen Sie dem Parser ber die Methode register_entity( ) den
Verweis auf diese DTD mit und zeigen auf die im XML-Dokument angege-
bene URI (hier der Einfachheit halber rss.dtd). Dafr muss der Code in Lis-
ting 3.8 vor dem Aufruf der Methode parse( ) ausgefhrt werden:
lr_parser->register_entity(
istream = lr_dtdstream
system_id = 'rss.dtd'
public_id = 'rss.dtd' ).
3. Das zu validierende XML-Dokument muss mit einer Doctype-Deklaration
beginnen und den folgenden Aufbau besitzen:
<!DOCTYPE rss SYSTEM "rss.dtd">
<rss version="2.0">
<channel>
...
</channel>
</rss>
3.7 Untersttzung von Namensrumen
Namensrume dienen der Unterscheidung von Elementen und Attributen,
die denselben Namen, aber unterschiedliche Bedeutung haben. ber URI-
Namen ist es beispielsweise mglich, verschiedene XML-Vokabulare ausein-
anderzuhalten. Hierdurch werden auch die Vokabulare der XML-basierten
Spezifikationen XML Schema und XSLT eindeutig identifizierbar.
Namensrume sind ebenso notwendig fr die Erstellung modularer Daten-
austauschspezifikationen: Sie knnen Bibliotheken von Datentypen erstellen
und diese mithilfe von Namensrumen zusammenfassen, sodass sie ber
Softwaresysteme erkennbar sind. Diese Bibliotheken knnen Sie in Daten-
austauschspezifikationen wiederverwenden. Auf diese Weise werden Daten-
typen standardisiert. Die Standardisierung macht Datenaustauschspezifikati-
onen besser verstndlich, da sie Mehrfachdefinitionen vermeidet. Ebenso
lassen sich dadurch Transformationsprogramme wiederverwenden.
Wie schon in Abschnitt 2.1, Einfhrung in XML, angesprochen, lsst die
W3C-Spezifikation Namespaces in XML (http://www.w3.org/TR/REC-xml-
names) unterschiedliche Mglichkeiten zur Bindung eines XML-Elementes
an einen Namensraum zu und macht die Identifizierung eines Namensraums
beim Parsen schwieriger als erwartet. In den folgenden Abschnitten werden
die damit in Verbindung stehenden Probleme detailliert diskutiert. Zunchst
1362.book Seite 86 Donnerstag, 1. Oktober 2009 11:32 11
Untersttzung von Namensrumen 3.7
87
werden quivalente XML-Dokumente prsentiert, deren Elemente auf unter-
schiedliche Weise mit Namensrumen versehen sind, die aber alle gltig in
Bezug auf dasselbe XML Schema sind. Dann lernen Sie ein ABAP-Programm
kennen, das zu geparsten XML-Dokumenten bezglich der verschiedenen
Parser-Modi Namensrauminformationen ausgibt. Im Anschluss werden Sie
mehrere XML-Dokumente mit diesem Programm verarbeiten und sehen,
wie die XML-Library mit den Namensrauminformationen umgeht.
3.7.1 Namensraumuntersttzung der XML-Library
Die Namensraumuntersttzung des Parsers lsst sich ber die Methode set_
namespace_mode( ) beeinflussen, ber die sich drei Modi einstellen lassen:
co_namespace_unaware, co_prefix_aware und co_namespace_aware. Der
Modus co_namespace_unaware ignoriert die Existenz eines Namensraums
vollstndig und behandelt Namensraumattribute wie alle anderen Attribute.
Da auf diese Weise die Namensraumprfixe dem Elementnamen zugeschla-
gen werden, ist dieser Modus fr die weitere Betrachtung uninteressant.
Sie knnen das ABAP-Programm aus Listing 3.9 verwenden, um ein XML-
Dokument zu parsen. Mit dem Unterprogramm aus diesem Listing knnen
Sie Namen, Namensraum und Attribute des DOM-Baumes anzeigen, nach-
dem Sie das Dokument mit der Anweisung lr_node ?= lr_document einem
Knoten zugewiesen und mit diesem Knoten das Unterprogramm print_dom
aufgerufen haben.
DATA: lr_iterator TYPE REF TO if_ixml_node_iterator,
lr_node TYPE REF TO if_ixml_node,
lv_name TYPE string,
lv_prefix TYPE string.
* Erzeuge einen Iterator fr den Knoten
lr_iterator = iv_node->create_iterator( ).
* Ermittle den aktuellen Knoten
lr_node = lr_iterator->get_next( ).
* Schleife ber alle Knoten
WHILE NOT lr_node IS INITIAL.
CASE lr_node->get_type( ).
WHEN if_ixml_node=>co_node_element.
* Behandle einen Elementknoten
lv_name = lr_node->get_name( ).
lv_prefix = lr_node->get_namespace_prefix( ).
WRITE: / 'Element : ', lv_name.
WRITE: / 'Namensraumprfix : ', lv_prefix.
ENDCASE.
1362.book Seite 87 Donnerstag, 1. Oktober 2009 11:32 11
XML-Library 3
88
* Behandle den nchsten Knoten
lr_node = lr_iterator->get_next( ).
ENDWHILE.
Listing 3.9 Ausgabe der Namensrauminformationen fr den Knoten iv_node
Im Folgenden werden drei XML-Dokumente betrachtet, die sich nur in der
Art der Namensraumdefinition unterscheiden, im brigen aber denselben
Inhalt haben.
Das folgende XML-Dokument definiert im Element Wurzel zwei Namens-
raumprfixe, die in den Kindelementen verwendet werden:
<Wurzel xmlns:nr1="urn:Namensraum1"
xmlns:nr2="urn:Namensraum2" >
<nr1:Element/>
<nr2:Element/>
<Element/>
</Wurzel>
Fr beide betrachteten Parser-Modi co_prefix_aware und co_
namespace_aware sind die Ausgaben des Unterprogramms in Listing 3.9
fr dieses XML-Dokument identisch und werden in Tabelle 3.1 darge-
stellt.
Das folgende XML-Dokument ist quivalent zum vorangegangenen, es
wurden lediglich die Namensraumprfixe im Element Wurzel umdefiniert:
<Wurzel xmlns:nr1="urn:Namensraum2"
xmlns:nr2="urn:Namensraum1"
xmlns:empty="">
<nr2:Element/>
<nr1:Element/>
<empty:Element/>
</Wurzel>
XML-Element Namensraumprfix URI
Wurzel
Element nr1 urn:Namensraum1
Element nr2 urn:Namensraum2
Element
Tabelle 3.1 Ausgabe bei Namensraumdeklaration mit Prfixen
1362.book Seite 88 Donnerstag, 1. Oktober 2009 11:32 11
Untersttzung von Namensrumen 3.7
89
Wieder erzeugen beide Parser-Modi dasselbe Resultat, die Namensraum-
prfixe unterscheiden sich aber verglichen mit Tabelle 3.1 (siehe Tabelle 3.2).
Verzichten Sie auf explizite Namensraumprfixe und definieren Default-
Namensrume fr jedes Element Element, sieht das XML-Dokument fol-
gendermaen aus:
<Wurzel>
<Element xmlns="urn:Namensraum1"/>
<Element xmlns="urn:Namensraum2"/>
<Element xmlns=""/>
</Wurzel>
Das Ergebnis ist wieder fr beide Parser-Modi identisch, und es fehlen,
wie erwartet, die Namensraumprfixe (siehe Tabelle 3.3).
Im letzten Fall definieren Sie fr jedes Element Element ein eigenes
Namensraumprfix:
<Wurzel>
<nr1:Element xmlns:nr1="urn:Namensraum1"/>
<nr2:Element xmlns:nr2="urn:Namensraum2"/>
<empty:Element xmlns:empty=""/>
</Wurzel>
XML-Element Namensraumprfix URI
Wurzel
Element nr2 urn:Namensraum1
Element nr1 urn:Namensraum2
Element empty
Tabelle 3.2 Ausgabe bei Redefinition der Namensraumdeklaration
XML-Element Namensraumprfix URI
Wurzel
Element urn:Namensraum1
Element urn:Namensraum2
Element
Tabelle 3.3 Ausgabe bei Namensraumdeklaration ohne Prfixe
1362.book Seite 89 Donnerstag, 1. Oktober 2009 11:32 11
XML-Library 3
90
Auch hier ist das Resultat fr beide Parser-Modi identisch (siehe Tabelle 3.4).
Fr die Namensraumuntersttzung der XML-Library kann damit folgendes
Fazit gezogen werden: Wollen Sie ein XML-Element anhand seines Namens
und seines Namensraums identifizieren, mssen diese unterschiedlichen
Mglichkeiten der Definition des Namensraums beachtet werden.
3
Sie sehen
an diesen Beispielen, dass nur die Namensraum-URI verlssliche Auskunft
ber den Namensraum geben kann, da Namensraumprfixe beliebig gewhlt
werden knnen. Gerade in Datenaustauschverfahren mit externen Partnern
werden Sie hufig nicht wissen, welche Namensraumdefinition gewhlt
wird.
3.7.2 Elementidentifikation mit Namensrumen
ber die Methode find_from_path_ns( ) lsst sich ein Element im DOM-
Baum eines geparsten XML-Dokumentes mit einem eingeschrnkten XPath-
Ausdruck suchen. Betrachten Sie dazu noch einmal das Beispiel mit einem
Element Wurzel, das ohne Namensraum definiert ist:
<Wurzel xmlns:nr1="urn:Namensraum1"
xmlns:nr2="urn:Namensraum2" >
<nr1:Element/>
<nr2:Element/>
<Element/>
</Wurzel>
XML-Element Namensraumprfix URI
Wurzel
Element urn:Namensraum1
Element urn:Namensraum2
Element empty
Tabelle 3.4 Ausgabe bei lokaler Namensraumdeklaration
3 Der Grund der Misere ist, dass das W3C die Empfehlung Namespaces in XML (http://
www.w3.org/TR/REC-xml-names) nach der Spezifikation von XML 1.0 fertigstellte. In den
verschiedenen APIs wie DOM und SAX wurde schnell die Namensraumuntersttzung nach-
gezogen, allerdings in uneinheitlichen Notationen, was in der XML-Library vermieden
wurde. In der Spezifikation von XML Schema wurde das Thema Namensrume wieder
angegangen.
1362.book Seite 90 Donnerstag, 1. Oktober 2009 11:32 11
Ereignisbasiertes Parsen 3.8
91
Bei der Parser-Einstellung co_namespace_aware lsst sich das Element
nr1:Element mit der folgenden Anweisung identifizieren:
l_var_node = document->find_from_path_ns(
default_uri = ''
path = '/Wurzel/urn:Namensraum1:Element' ).
Da Namensraumprfixe im XML-Dokument beliebig definiert werden kn-
nen, wird hier konsequenterweise mit URIs gearbeitet. Diese werden entwe-
der explizit vor den Elementnamen geschrieben oder fr alle nicht qualifi-
zierten Elemente im Parameter default_uri spezifiziert. Wenn die URI
einen Schrgstrich (/) enthlt, mssen Sie den ganzen Ausdruck (Namens-
raum-URI und Elementname) in Anfhrungszeichen setzen, beispielsweise
fr das Ansprechen der Wurzel root eines Dokumentes im Namensraum
http://www.example.org:
'/"http://www.example.org:root"'
3.8 Ereignisbasiertes Parsen
Eine Schwche von DOM zeigt sich bei der Hauptspeicherdarstellung eines
XML-Dokumentes, da die Gre ein Vielfaches des ursprnglichen Doku-
mentes betrgt. Fr die Verarbeitung groer XML-Dokumente eignen sich
ereignisbasierte Verarbeitungsmethoden. SAP bietet hierfr eine Umsetzung
der Simple API for XML (SAX) an.
Verglichen mit der Java-Implementierung dieser API, wie sie zum Beispiel
im sogenannten SAP XML Toolkit for Java enthalten ist, hnelt die Umset-
zung der XML-Library eher einem Pull-Parser: Es existieren keine Content-
Handler- und ErrorHandler-Interfaces, und die Anwendung behlt die Kon-
trolle ber das Parsen, indem ber die Methode parse_event( ) das nchste
Ereignis im XML-Eingabestrom abgefragt wird. Dies wird nun im Detail
beschrieben.
3.8.1 SAX-Schnittstelle
Beim ereignisbasierten Parsen geht der XML-Parser sequenziell ber das
XML-Dokument und meldet sogenannte Events, die dem Parser vorher mit-
geteilt werden mssen. Diese Events sind als konstante Attribute des Inter-
face IF_IXML_EVENT definiert und im SAP Help Portal im Abschnitt zur XML-
Library beschrieben: Es gibt Ereignisse fr den Start des Dokumentes, fr
Verarbeitungsanweisungen, Elemente, Attribute, DTD-Bereiche, Textinhalte
1362.book Seite 91 Donnerstag, 1. Oktober 2009 11:32 11
XML-Library 3
92
etc. Fr jeden dieser Inhalte existiert ein korrespondierendes, von IF_IXML_
NODE abgeleitetes Interface, mit dem auf den Inhalt des entsprechenden
XML-Knotens zugegriffen werden kann, der durch ein Ereignis gemeldet
wurde.
Im Programmbeispiel in Listing 3.10 wird nur das Ereignis co_event_
element_pre2 behandelt. In der Hauptverarbeitungsschleife werden ber
die Methode get_node( ) der Klasse IF_IXML_EVENT Ereignisse abgefragt,
solange sie gemeldet werden. Wenn der Parser das Ereignis vom Typ co_
event_element_pre2 meldet, knnen Sie auf den Elementnamen und die
Attribute zugreifen, aber nicht auf den Text. Eine solche Vorgehensweise ist
bei attributorientierter Codierung von XML-Daten ausreichend: Elemente
enthalten keinen Inhaltstext, sondern nur Attribute und andere Elemente.
DATA: lr_factory TYPE REF TO if_ixml_stream_factory,
lr_parser TYPE REF TO if_ixml_parser,
lr_istream TYPE REF TO if_ixml_istream,
lr_document TYPE REF TO if_ixml_document,
lr_ixml TYPE REF TO if_ixml,
l_var_xmldata TYPE string,
lr_event_sink TYPE REF TO if_ixml_event,
l_var_rval TYPE boolean,
l_var_events TYPE i,
lr_node TYPE REF TO if_ixml_node,
lr_iterator TYPE REF TO if_ixml_node_iterator.
OPEN DATASET '/xch/cxml.xml' FOR INPUT IN BINARY MODE.
READ DATASET '/xch/cxml.xml' INTO l_var_xmldata.
CLOSE DATASET '/xch/cxml.xml'.
* Ermittle das zentrale Factory-Objekt
lr_ixml = cl_ixml=>create( ).
* Erzeuge ein Factory-Objekt fr den Eingabestrom
lr_factory = lr_ixml->create_stream_factory( ).
* Erzeuge den Eingabestrom
lr_istream = lr_factory->create_istream_string(
string = l_var_xmldata ).
* Erzeuge ein temporres Dokument
lr_document = lr_ixml->create_document( ).
* Erzeuge den XML-Parser
lr_parser = lr_ixml->create_parser(
document = lr_document
stream_factory = lr_factory
istream = lr_istream ).
lr_factory = lr_ixml->create_stream_factory( ).
* Schalte DOM-Generierung aus
lv_rval = lr_parser->set_dom_generating(
1362.book Seite 92 Donnerstag, 1. Oktober 2009 11:32 11
Ereignisbasiertes Parsen 3.8
93
EXPORTING
is_generating = space
RECEIVING
rval = lv_rval ).
* Bei diesem Ereignis sind der Elementname und alle
* Attribute bekannt
l_var_events = if_ixml_event=>co_event_element_pre2.
* Melde die Events beim Parser an
lr_parser->set_event_subscription( events = l_var_events ).
* Ermittle das erste Event
lr_event_sink = lr_parser->parse_event( ).
WHILE NOT lr_event_sink IS INITIAL.
* Ermittle den aktuellen Knoten
lr_node = lr_event_sink->get_node( ).
* Frage das nchste Ereignis ab
lr_event_sink = lr_parser->parse_event( ).
ENDWHILE.
Listing 3.10 Ereignisbasiertes Parsen
Auch wenn beim ereignisbasierten Parsen die DOM-Generierung ausge-
schaltet wurde, kann vom aktuell verarbeiteten Knoten auf die Menge der
Vaterelemente bis hin zum Wurzelelement ber lr_node->get_parent( )
zugegriffen werden.
3.8.2 Fallstricke
Die XML-Spezifikation sieht vor, dass Sie spezielle Abschnitte definieren
knnen, in denen Zeichen wie das kaufmnnische Und (&) oder das Kleiner-
Zeichen (<) nicht mehr mit &amp; oder &lt; codiert werden mssen. Diese
Abschnitte beginnen mit <![CDATA[ und enden mit ]]>:
<![CDATA[ Hier knnen beliebige Zeichen
stehen, aber auch <Element> ]]>.
Diese Texte mssen ber die Events co_event_cdata_section_pre und
beim Event co_event_cdata_section_post, bearbeitet ber die Methode
getValue( ), gelesen werden.
Die SAX-Spezifikation sieht grundstzlich nicht vor, dass ein zusammenhn-
gender Text genau durch ein Ereignis co_event_text_pre und co_event_
text_post eingeleitet bzw. abgeschlossen wird, obwohl die meisten Parser
dies tun. Prinzipiell kann es daher erforderlich sein, den Textinhalt eines Ele-
mentes in mehreren Schritten zu lesen. Je unstrukturierter ein XML-Doku-
ment ist, desto hufiger wird dieser Fall vorkommen: Ein Textinhalt eines
1362.book Seite 93 Donnerstag, 1. Oktober 2009 11:32 11
XML-Library 3
94
Elementes kann prinzipiell durch CDATA-Abschnitte, aber auch durch Ele-
mente unterbrochen werden:
<A>Text1<B/>Text2 <![CDATA[Text3]]>Text4</A>
3.9 Service-Schnittstellen zur XML-Library
An den vorhergehenden Beispielen knnen Sie erkennen, dass die Verwen-
dung der XML-Library mit einem programmiertechnischen Overhead ver-
bunden ist. Das betrifft die immer wiederkehrenden Standardoperationen
zum Erzeugen von Stream-Objekten.
Um nicht stndig diese wiederkehrenden Operationen entwickeln zu ms-
sen, ist es sinnvoll, diese in Service-Klassen bereitzustellen. Ein gutes Bei-
spiel aus dem SAP-Standard ist die Klasse CL_XML_DOCUMENT_BASE aus dem
Workflow-XML-Framework des AS ABAP. Hier hat SAP eine Reihe von Stan-
dardfunktionen fr wiederkehrende Operationen entwickelt, sodass der
Zugriff auf die XML-Library vllig gekapselt ist.
Es kann die Programmierung sehr vereinfachen, wenn fr die Zugriffe auf
XML-Dokumente auf dieselbe Weise vorgegangen und, wie in Abbildung 3.2
beschrieben, der Zugriff verschalt wird: Eine Instanz der Klasse ZCL_
GENERIC_DOCUMENT reprsentiert ein XML-Dokument und stellt gleichzeitig
eine Reihe von Methoden zur Verfgung:
Die Methode export_to_file( ) ermglicht den Download auf den
Applikations- oder Prsentationsserver.
Die Methode parse_string( ) instanziert das Objekt, indem ein String in
das Attribut m_cl_ixml_document (eine Instanz von IF_IXML_DOCUMENT)
gelesen wird.
Die Methode import_form_file( ) realisiert die Instanzierung durch
einen Upload vom Applikations- oder Prsentationsserver.
Die Methode find_node( ) dient der Identifizierung eines XML-Elementes.
Die Methode get_node_name( ) liefert den Namen eines XML-Elementes.
Prfung nach Wohlgeformtheit
Beachten Sie, dass die XML-Library nicht in voller Strenge die Wohlgeformtheit
von XML-Dokumenten berprft, zum Beispiel lsst sie doppelte Attributnamen in
einem XML-Element zu.
1362.book Seite 94 Donnerstag, 1. Oktober 2009 11:32 11
Service-Schnittstellen zur XML-Library 3.9
95
Die Methode get_node_data ( ) liefert den Inhalt eines XML-Elementes.
Die Methode insert_document_as_child( ) fgt ein anderes Dokument
unterhalb eines Knotens als Kind ein.
Abbildung 3.2 Mgliche Service-Klassen zum Zugriff auf XML-Dokumente
Diese an die Klasse CL_XML_DOCUMENT_BASE angelehnte Klasse kann fr
bestimmte Dokumententypen abgeleitet werden. In Abbildung 3.2 wurde
diese Klasse abgeleitet, um spezielle Funktionen fr EDI-Dokumente (Klasse
ZCL_EDI_MESSAGE und Unterklassen) und in XML-codierte Testflle (Klasse
ZCL_TESTCASE) umzusetzen.
Eine solche Vorgehensweise ist expliziter und sauberer als die Verwendung
der nicht freigegebenen Klasse CL_XML_DOCUMENT des AS ABAP, zumal viele
der dortigen Funktionen wie die Persistenzmethoden load( ) oder save( )
rein workflowspezifisch sind.
()
()
()
()
()
+ validate()
()
1362.book Seite 95 Donnerstag, 1. Oktober 2009 11:32 11
279
Index
A
ABAP
Kurzdump 242
Proxy 218
ABAP Debugger 99
ABAP Serialization XML asXML
ABAP Unit 193
Abnahmeklasse
CX_INVALID_TRANSFORMATION
117
CX_MATCH_ELEMENT 154
CX_ST_ERROR 154
CX_ST_GROUP_MISSING_CASE 179
CX_ST_MATCH_ELEMENT 170
CX_ST_MATCH_TEXT 156
CX_ST_REF_ACCESS 162
CX_ST_SWITCH_NO_CASE 171
CX_SY_CONVERSION_NO_DATE_TIME
126
CX_SY_CONVERSION_OVERFLOW
231
CX_SY_TANS_OPTION_ERROR 117
CX_TRANSFORMATION_ERROR 116
CX_XSLT_ABAP_CALL_ERROR 119,
123
CX_XSLT_EXCEPTION 117
CX_XSLT_RUNTIME_ERROR 231
abstrakter Syntaxbaum 144
Adobe Flex 241
AJAX 15, 25
aktueller Knoten 153
Applikationsserver, Datenquelle 77
Architektur, serviceorientierte 218
asXML 33, 39, 123, 160, 224
Asynchronous JavaScript and XML 15,
25
Attributwert-Template 120
Ausdruck, regulrer 28, 56, 213, 220
Ausnahme, verkettete 123
B
BAPI 23
Base64 125
basXML 39
benanntes Template 101, 197
benutzerdefinierte XPath-Funktionen
134
Beschreibungslogik 240
Binary ABAP Serialization XML 39
Binary XML 39, 97, 99
Verwendung 105
BizTalk Message 18
BMEcat 18
BPEL 219
BRFplus 20
BSP 25, 215
Framework 215
Business Application Log 241
Business Application Programming Inter-
face 23
Business Rules Framework Plus 20
Business Server Page BSP
C
CALL TRANSFORMATION 75, 115, 125,
151
Canonical XML 39
CDA 17, 58
CDATA
Abschnitt 94
CDATA-Sektion 35
Character Information Item 34
CIF 18
CL_ABAP_CONV_OUT_CE 103
CL_ABAP_XML_NAME_CONVERTER
253
CL_APL_ECATT_TDC_API 207
CL_AUNIT_ASSERT 193
CL_FX_READER 151
CL_FX_WRITER 151
CL_GUI_HTML_VIEWER 74
1362.book Seite 279 Donnerstag, 1. Oktober 2009 11:32 11
280
Index
CL_GUI_TEXTEDIT 232
CL_HTTP_CLIENT 243
CL_IXML 72, 76
CL_IXML_OSTREAM 139
CL_O2_API_XSLTDESC 202, 210, 253
CL_SXML_DATASET_READER 97
CL_SXML_DATASET_WRITER 97
CL_SXML_OPEN_ELEMENT 102
CL_SXML_STRING_WRITER 106
CL_XML_DOCUMENT_BASE 94, 95
CL_XSLT_PROCESSOR 113
Code Inspector 250
Codegenerierung 141, 227, 232
Codepage, Standard 36, 82
Content Negotiation 243, 258
Content-Type 64, 218, 220, 242, 243
CSV-Datei 46, 48, 109
current-grouping-key() 138
cXML 18, 59, 80, 158, 173, 176, 204
D
Daten, semistrukturierte 21
Datenaustauschprozess 259
Datenformat, semistrukturiertes 18
Datenintegration 239
Datenstrom, XDF 261
Datentyp
komplexer 54
XSDBOOLEAN 125
XSDDATETIME_Z 125
XSDLANGUAGE 125
XSDUUID_CHAR 126
Deserialisierung 151
DNS 37
DocBook, Format 47
Doctype, Deklaration 86
Document Object Model DOM
Document Type Definition DTD
Dokumententyp, Deklaration 33
DOM 72, 79, 82
Baum 72, 79, 87, 139, 145, 150
Domain Name System 37
domnenspezifische Sprache 226
DSL domnenspezifische Sprache
DTD 52, 71, 83, 84
Attribut-Default-Wert 77
externe 84, 85
interne 84
Dublin Core 64
E
ebXML 18
eCATT 22, 23, 202
EDIFACT 16
einfacher Link 45
eingebautes Template 50
Element, optionales 163
Endrekursion 145
End-Tag 34, 35, 39
ereignisbasiertes Parsen 91, 106
Ereignis-Trace 241
Event 91
EXSLT 212
Extended Computer Aided Test Tool 22,
23, 202
Extensible Markup Language XML
externe DTD 85
F
Factory-Pattern 121, 122
Fallunterscheidung, symmetrische 173
FOAF 64
Formularsystem 239, 262
Funktionsbaustein
DISPLAY_XML_STRING 33, 73, 236
F4_HELP_XML_TREE 80
SDIXML_XML_TO_DOM 262
G
gemischtes Inhaltsmodell 34, 104, 260
groes XML-Dokument 101
group-adjacent() 139
group-by() 139
group-ending-with() 139
group-starting-with() 139
gXML 18
1362.book Seite 280 Donnerstag, 1. Oktober 2009 11:32 11
281
Index
H
Handler-Klasse 242
Head-Body-Pattern 106, 259
HL7 Messages 19
HTML 32, 45
HTTP-Request 242
Hlle, transitive 267, 274
I
ICF 24, 78, 215, 258
Handler 215, 216, 242
IDoc, Schnittstelle 19
Impact-Analyse 264
indirekte Verwendung 263
Individualdruck 237
Inferenzmaschine 274
Inhaltsmodell
gemischtes 104, 260
nicht deterministisches 57, 160
Inside-out 24
Intelligenz, knstliche 274
Interface
IF_HTTP_CLIENT 242
IF_HTTP_EXTENSION 216
IF_IXML 76
IF_IXML_ATTRIBUTE 76
IF_IXML_DOCUMENT 74, 75, 80, 82,
116
IF_IXML_EVENT 77, 91
IF_IXML_ISTREAM 77, 78, 116
IF_IXML_NODE 76, 92, 116
IF_IXML_NODE_COLLECTION 115,
138
IF_IXML_OSTREAM 77, 82, 116
IF_IXML_PARSER 77, 83
IF_IXML_STREAM 77
IF_IXML_STREAM_FACTORY 77, 78
IF_SWF_IFS_PARAMETER_CONTAINE
R 21
IF_SXML_NODE 102
IF_SXML_READER 97, 98, 101
IF_SXML_WRITER 97, 98
IF_XML_DOCUMENT 76
interne DTD 84
Internet Communication Framework
ICF
Internet Connection Framework ICF
ISO
8601 61
8859-1 36
Item 129
iXML, Library 71
J
Java 148
JavaScript, ABAP 246
JSON 26
K
kanonische XML-Reprsentation 33
Knoten, aktueller 153
Kollektion 160
komplexer Datentyp 54
knstliche Intelligenz 274
Kurzdump 242
L
Legacy System Migration Workbench
142
Link, einfacher 45
literaler Text 162, 187
LSMW 142
M
Makro, Verwendung 27
Markup 18, 28, 35
Mashup 62
Massendaten 150
Medientyp 242
Memory Inspector 22
Metadaten 239
Metainformation 240, 249
modellgetriebene Programmierung 232
Muster 168, 173
1362.book Seite 281 Donnerstag, 1. Oktober 2009 11:32 11
282
Index
N
Namensraum 34, 37, 39, 55, 86, 87, 91,
130, 188, 258
Achse 130
Attribut 34
Knoten 49
Prfix 38, 65, 89, 188
URI 37
Newsreader 41
nicht deterministisches Inhaltsmodell
57, 160
Nodeset 129
O
OASIS Open Document Format for Office
Applications 42
ODF 42
ODT 42, 237
Online Text Repository 131
Ontologie 63, 263, 264, 273
Generierung 269
OOXML 237
Open World Assumption 68
OpenDocument-Text 42, 237
optionales Element 163
OTR 131
Outside-in 24
OWL 66, 264, 271, 273
owl:Class 269
owl:disjointWith 269
owl:sameAs 269
owl:transitiveProperty 267
OWL-DL 68
OWL-Full 68
OWL-Lite 68
Reasoning 267
P
Parsen
ereignisbasiertes 91, 106
tokenbasiertes 105
PDF 40, 43, 237
Pretty Printer 74
Processing Instruction 35, 36, 104, 236
Programmierung
modellgetriebene 232
rekursive 100
Pull-Parser 97
R
RDF 41, 63, 249, 250, 273
Viewer 251
Visualisierung 251
Vokabular 261
RDF Schema 63
RDF-Daten
Generierung 256
Visualisierung 257
RDFS 63
Reader-Klasse 98
Really Simple Syndication RSS
Reasoner 240, 267
Reasoning 264
Records Modeler 21
Redirect 258
regexp, test() 213
regulrer Ausdruck 28, 56, 213, 220
Rekursion 101
rekursive Programmierung 100
Relax NG 58
Representational State Transfer 24
Resource Description Framework RDF
Ressource 274
REST 24
REST-Webservice 45, 253, 258
Aufruf von ABAP 243
Result Fragment Tree 130
RFC
Fehlerprotokoll 241
RFC 822 56, 246
RIA 219
Rich Enterprise Application 241
Rich Internet Application 219
RosettaNet 18
RSS 40, 41
Format 241
Version 1.0 246
Version 2.0 41, 52, 54, 62, 248
RSS-Feed 41, 240, 247
Anzeige 246
Aufruf 246
1362.book Seite 282 Donnerstag, 1. Oktober 2009 11:32 11
283
Index
RSS-Reader 241
Ruby on Rails 219
S
S_MEMORY_INSPECTOR 22
SAP NetWeaver 19
SAP NetWeaver Process Integration 20
SAP Records Management 21
SAP Smart Forms 23, 261
SAP XML Toolkit for Java 91
SAPlink 23
SAX 91
Spezifikation 93
Schemasprache 31
Schematron 58, 60, 202, 232
Schnittstelle Interface
SCI 250
Semantic Web 63, 239, 240
Semantic Wiki 240
semantischer Webservice 250
semistrukturierte Daten 18, 21
Sequenz 129
Serialisierung 33, 151
serviceorientierte Architektur 218
Simple API for XML SAX
Simple Transformations 107, 149, 242,
269
ABAP-Struktur 156
Attribut 156
Ausdrucksstrke 184
bedingte Transformation 168, 183
Bedingung 164
Beispielanwendung 150
Datenknoten 154
Datenwurzel 154
Deserialisierung 161, 167, 169
elementares Datenobjekt 153
externes ST-Programm 186
Fallunterscheidung 162, 163, 171
Gruppierung 175
Integration 97
interne Tabelle 157
literaler Inhalt 187
Mapping 180
Modularisierung 185
Muster 168, 179
Namensraumdeklaration 188
optionales Element 163
Parameter 153, 161
Standarddeserialisierung 172, 179
Standardserialisierung 172, 179
Symmetrie 151, 193
symmetrische Fallunterscheidung 173
tt:apply 153, 186
tt:assign 162, 178, 185
tt:attribute 156
tt:call 153, 184, 186, 250
tt:clear 162
tt:cond 163, 165, 167, 168, 169, 173,
174, 184
tt:cond-var 162, 184
tt:context 161, 186
tt:copy 160
tt:d-cond 163, 170, 184
tt:deserialize 183, 193
tt:empty 168
tt:group 177, 179, 180
tt:include 152, 186, 250
tt:lax 169
tt:loop 157, 170, 185
tt:namespace 190
tt:parameter 152
tt:read 161, 162, 181
tt:ref 154, 157
tt:root 152, 154, 155
tt:s-cond 163, 170, 175
tt:serialize 193
tt:skip 163, 164, 185, 187
tt:switch 171, 173, 179, 182, 183
tt:switch-var 183, 184
tt:template 152, 186
tt:transform 150, 161
tt:value 153
tt:variable 152, 161, 183
tt:with-parameter 186
tt:with-root 186
tt:write 162, 181
Unter-Template 152
Variable 161
Vorbedingung 165, 166
Whitespace 187
Wiederholungsgruppe 177
Zusicherung 166
Singleton-Objekt 76
SLG1 241
SM02 241
1362.book Seite 283 Donnerstag, 1. Oktober 2009 11:32 11
284
Index
SM13 241
SM58 241
SM66 241
SOA 218
SOAMANAGER 24
SOAP, Webservice 23, 218
Sprache, domnenspezifische 226
SpreadsheetML 233
SRMREGEDIT 22
ST01 241
ST02 241
ST22 242
Standard-Codepage 36, 82
Standardserialisierung 172
Start-Tag 34, 35, 39
Streaming Transformations for XML 30
String-Operation 27
Stylesheet Level 147
SVG 17, 44, 259
svg:line 45
svg:rect 45
svg:svg 45
svg:text 45
SWEL 241
SXML
Knoten-Parser 103
Parser 97, 101
Reader 99
Writer 99
SXML-API, Vorteil 105
symmetrische Fallunterscheidung 173
Syntaxbaum, abstrakter 144
Systemnachricht 241
Systemprotokoll 241
T
TABLES-Parameter 40
Tag Browser 111
Tag-Interface 222
Taxonomie 67, 68
Template
benanntes 101, 197
eingebautes 50
Test-Report 242
Text, literaler 162, 187
Textinhalt 35
TIFF 43
Token
Modus 104
Parser 102, 104
tokenbasiertes Parsen 105
Transaktion
SCI 250
SLG1 241
SM02 241
SM13 241
SM58 241
SM66 241
SOAMANAGER 24
SRMREGEDIT 22
ST01 241
ST02 241
ST22 242
SWEL 241
WE07 241
Transformation 31, 254, 262, 263
AS ABAP 264
Fakten 270
Generierung 207
transitive Hlle 267, 274
U
UDDI 219
Unicode 32, 36, 145
Uniform Resource Identifier 34, 37, 63,
240
Uniform Resource Name 37
URI 34, 37, 63, 240
URN 37
UTF-16 36, 79
UTF-8 36, 79, 97
Codepage 36, 82
V
Validierung 52
Verbuchungsabbruch 241
verkettete Ausnahme 123
Verwendung, indirekte 263
Verwendungsbeziehung, Ermittlung
253
Vorbedingung 165
1362.book Seite 284 Donnerstag, 1. Oktober 2009 11:32 11
285
Index
W
W3C 31
WE07 241
Web 2.0, Anwendung 25
Web Dynpro 25
Web Ontology Language OWL
Web Services Description Language 23,
56
Weblog 41
Webservice 24
REST 24
semantischer 250
SOAP 23
Whitespace 34, 74, 77, 142
Wissensmanagement 240
Wissensreprsentation 240, 274
Wohlgeformtheit 35, 36, 94
WordML 42, 235
Workprozess-Status 241
World Wide Web Consortium 31
Writer-Klasse 98
WSDL 23, 56
Wurzelelement 35, 54, 82
X
XDF-Datenstrom 261
XHTML 45, 66, 258
XLink 45, 220
xlink:actuate 46
xlink:href 46
xlink:show 46
xlink:type 46
XML 15
ABAP-Anwendung 21
ABAP-Entwicklung 22
Anwendungsintegration 19
Datenaustausch 19
Deklaration 32, 37, 144
Header 116
Information Set 39
Integration von Metadaten 258
Integrationstechnologie 23
Kommentar 35
Serialisierung 25
Tag 34
Ursprung 16
Version 32
Vokabular 17, 40
XML Encryption 30
XML Schema 30, 53, 79, 125, 134, 160,
259
einfacher Datentyp 56
Familienkonzept 261
gemischtes Inhaltsmodell 260
Modularisierung 58, 61, 260
xs:annotation 54
xs:any 55, 259
xs:anyAttribute 57
xs:restriction base 56
xs:sequence 54
xs:string 56
XML Signature 30
XML-Dokument
Erzeugung 27
groes 101
Parsen 29
Processing Instruction 104
XML-Library 71
Datenstrom 78
DOM 79
DOM-API 79
ereignisbasiertes Parsen 91
Filter 74
Iterator 74, 87
Namensraumuntersttzung 90
Parser-Modus 88
SAX-API 91
Validierung 83
XPath-Untersttzung 80
xmlns
Attribut 37
XML-Reprsentation
kanonische 33
XPath 48, 59, 76, 79, 90, 110, 129, 272
Achse 49
Funktion 49, 134
Prdikat 49
sap:abs 127, 147
sap:acos 127
sap:asin 127
sap:atan 127
sap:column 111
sap:concat 142
sap:cos 127
sap:ends-with 128
1362.book Seite 285 Donnerstag, 1. Oktober 2009 11:32 11
286
Index
sap:escape-uri 129
sap:exp 127
sap:find-first 128
sap:find-first-of 129
sap:find-last 128
sap:find-last-not-of 129
sap:find-last-of 129
sap:if 135
sap:intersection 130
sap:let 131
sap:line 111
sap:log 127
sap:log10 127
sap:lower-case 128
sap:max 130
sap:min 130
sap:node-set 130
sap:otr-string 131, 132
sap:otr-text 132
sap:parse-xpath 144
sap:resolve-uri 129
sap:sin 127
sap:sqrt 127
sap:string-pad 128
sap:tan 127
sap:target 139
sap:timestamp 131, 146
sap:upper-case 128
Version 2.0 127
XSDANY 126
XSDDATE_D 126
XSDTIME_T 126
XSL-FO 17, 42, 47, 237
fo:block 43
fo:flow 43
fo:layout-master-set 43
fo:page-sequence 43
fo:root 43
XSLT 46, 109, 250, 270, 273
ABAP-Erweiterung 117, 146
asXML-Reprsentation 123
Aufruf aus ABAP 115
Ausgabeformatierung 141, 142
Ausnahmebehandlung 122
benanntes Template 101, 145, 197
Debugger 112
dynamischer Template-Aufruf 196
function-available() 133
Integration 97
Java-Erweiterung 148
Konformitt in Version 2.0 109, 127,
134, 135, 139, 141, 147
plattformunabhngige Transformation
147
rekursive Programmierung 100
sap:call-external 118, 119, 120
sap:callvalue 119
sap:callvariable 120
sap:external-function 118, 121, 122,
215
SAP-Prozessor 133
SAP-spezifische Erweiterung 127
Tester 112
Transformation 207
Version 2.0 134, 147
xsl:apply-imports 146, 147
xsl:apply-templates 50, 51, 145, 146
xsl:attribute 256
xsl:attribute-set 133
xsl:call-template 196, 270
xsl:copy 49, 139, 209
xsl:element 208, 209, 256, 272
xsl:fallback 133
xsl:for-each 272
xsl:for-each-group 135, 136
xsl:function 134
xsl:import 146, 196, 250, 256
xsl:include 146, 196, 250
xsl:message 111, 112
xsl:namespace-alias 133, 207, 208
xsl:number 133
xsl:output 47, 111, 141, 144
xsl:param 112, 115, 118, 119, 139
xsl:processing-instruction 236
xsl:result 134
xsl:transform 198
xsl:value-of 47
xsl:with-param 147
Z
Zeichensatz 145
Zusicherung 165
1362.book Seite 286 Donnerstag, 1. Oktober 2009 11:32 11