8/11/2019 Sappress XML Fuer Abap Entwickler
1/43
Bonn Boston
Tobias Trapp
XML fr ABAP-Entwickler
8/11/2019 Sappress XML Fuer Abap Entwickler
2/43
5
Inhalt
Vorwort zur zweiten Auflage .................................................................... 11
In diesem Kapitel lernen Sie die wichtigsten Anwendungsgebiete vonX ML-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 ........................................... 191.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 .............................. 281.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 v on 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 .......................................................... 392.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
8/11/2019 Sappress XML Fuer Abap Entwickler
3/43
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 ............................................................. 532.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 ............................................................................. 723.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 ...................... 833.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 ................. 903.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 .......................................................................... 1014.2.1 Zugriff ber das Interface IF_SXML_NODE ................ 102
8/11/2019 Sappress XML Fuer Abap Entwickler
4/43
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 ........................................ 1155.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 .................................................................. 1295.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 ................................................ 1415.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
8/11/2019 Sappress XML Fuer Abap Entwickler
5/43
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 da s 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 ......................... 1536.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 .................................................... 1626.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 ................. 1836.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 ............................................................... 1906.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 auchfr 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
8/11/2019 Sappress XML Fuer Abap Entwickler
6/43
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 ............ 2107.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 ............................................................... 2217.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 ....................... 2357.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 ..................................................... 2498.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
8/11/2019 Sappress XML Fuer Abap Entwickler
7/43
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 p rofitieren knnen. 239
Anhang ...................................................................................... 275
A Literaturverzeichnis .......................................................................... 275
B Der Autor ........................................................................................ 278
Index ........................................................................................................ 279
8/11/2019 Sappress XML Fuer Abap Entwickler
8/43
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-
HeftesXML-Datenaustausch in ABAPeinen 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 einemchtige 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.
8/11/2019 Sappress XML Fuer Abap Entwickler
9/43
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 BestPractices 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.comherunterladen: Folgen Sie dem Menver-
lauf DownloadsSAP NetWeaver Main Releases.
Viele der hier beschriebenen Technologien lassen sich aber auch bereits mitRelease 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.
8/11/2019 Sappress XML Fuer Abap Entwickler
10/43
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
8/11/2019 Sappress XML Fuer Abap Entwickler
11/43
71
In diesem Kapitel lernen Sie die XML-Library kennen. Sie ist dielteste XML-Programmierschnittstelle des AS ABAP und die einzige,die einen Service zur Validierung von XML-Dokumenten gegen DTDsbietet.
3 XML-Library
Die XML-Library auch bekannt als iXML-Library1 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:
ParserEs existiert eine Reihe von Parsern: ein eventbasierter, ein tokenbasierter
und ein DOM-basierter Parser. Im Paket SIXMLdes AS ABAP finden Sie
Beispielprogramme fr diese Programmierschnittstellen: T_PARSING_EVENT,
T_PARSING_TOKENund 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_ENCODINGdemonstriert.
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_VALIDATIONund 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 inden Kernel integriert ist.
8/11/2019 Sappress XML Fuer Abap Entwickler
12/43
XML-Library3
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 dieXML-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:
text
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().
8/11/2019 Sappress XML Fuer Abap Entwickler
13/43
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()undfgen ein Attribut ber set_attribute()hinzu. Dieses Element hngenSie ber append_child()an das Dokument als Wurzelelement an.
4. Ebenso erstellen Sie ein zweites Element childund fgen einen Textinhaltber die Methode set_value()hinzu. Dieses Element hngen Sie berappend_child()unter das Wurzelelement.
5. Im Anschluss erzeugen Sie einen Ausgabestrom, der einen XSTRINGerstellt, und rendern das Dokument, um es im Anschluss ber den Funk-tionsbaustein DISPLAY_XML_STRINGanzuzeigen.
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_docostream = 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
8/11/2019 Sappress XML Fuer Abap Entwickler
14/43
XML-Library3
74
3.1.2 Filter und IteratorenAls 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_DOCUMENTbesitzt 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:filterliegen.
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 ''.xml ' '.
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 Whitespaceseingefgt, 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.
8/11/2019 Sappress XML Fuer Abap Entwickler
15/43
Einfhrung 3.1
75
xml ' '.xml ' '.xml ' '.xml ' '.xml ''.
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 CALLTRANSFORMATIONverwendet, um ein
XML-Dokument in eine Instanz von IF_IXML_DOCUMENTzu berfhren. Siewerden in Abschnitt 3.3, Datenquellen, noch weitere Alternativen dazu
sehen.
In Listing 3.2 wurden die Knoten des Namensraums urn:filterdes folgen-
den XML-Dokumentes ausgegeben; das waren die Knoten child_1 und
child_3:
'.
Bevor Sie die Verwendung der XML-Library anhand einiger Anwendungs-
flle kennenlernen, werden im folgenden Abschnitt noch zentrale Interfaces
vorgestellt.
8/11/2019 Sappress XML Fuer Abap Entwickler
16/43
XML-Library3
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 Schnittstellevon 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_IXMLden zentralen Zugang zu denbisher 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_IXMLimplementiert. 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_DOCUMENTist somit vom Interface IF_IXML_NODEabgeleitet,
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_NODEreprsentiert einen Knoten in der DOM-Darstellung eines
Dokumentes (siehe Abschnitt 3.3, Datenquellen). Der Typ eines Kno-
tens kann mit der Methodeget_type( )
ermittelt werden: Es kann sichdabei zum Beispiel um einen Kommentar- oder Textknoten handeln. Fr
einen vollstndigen berblick ber die Knotentypen sollten Sie sich die
Attribute des Interface IF_IXML_NODEanzeigen 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_NODEabgelei-
tetes Objekt IF_IXML_ATTRIBUTEzugegriffen werden. Sie erhalten sie ber
die Methode get_attributes().
8/11/2019 Sappress XML Fuer Abap Entwickler
17/43
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_ISTREAMdefinieren, 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_
FACTORYinstanziert.
Interface IF_IXML_PARSERDer 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 Libraryim SAP Help
Portal verwiesen.
8/11/2019 Sappress XML Fuer Abap Entwickler
18/43
XML-Library3
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_FACTORYzu 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-Librarylr_ixml = cl_ixml=>create( ).
* Erzeuge ein temporres Dokument fr das Parsenlr_tmpdoc = lr_ixml->create_document( ).
* Erzeuge ein Stream-Factory-Objekt
lr_factory = lr_ixml->create_stream_factory( ).
* Erzeuge den Eingabestromlr_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 Frameworkzur 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-Objektlr_ixml = cl_ixml=>create( ).
8/11/2019 Sappress XML Fuer Abap Entwickler
19/43
DOM-API 3.4
79
* Erzeuge ein temporres Dokumentlr_tmpdoc = lr_ixml->create_document( ).
* Erzeuge ein Factory-Objekt fr den Eingabestromlr_factory = lr_ixml->create_stream_factory( ).
* Erzeuge den Eingabestromlr_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
DasDocumentObjectModel (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 sogenanntenDOM-Baumvor. 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 schlechtePerformanz 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 Modellefr XML-Dokumente in den unterschiedlichen Spezifikationen (zum Beispiel XML1.0, XPath 1.0, XML Schema, DOM und SAX) nicht einheitlich, sondern weisenkleine Unterschiede auf, die zum Glck nur in wenigen Fllen Probleme bereiten.
8/11/2019 Sappress XML Fuer Abap Entwickler
20/43
XML-Library3
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 vollstndigeDokumentation 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
Headerund 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:
8/11/2019 Sappress XML Fuer Abap Entwickler
21/43
8/11/2019 Sappress XML Fuer Abap Entwickler
22/43
XML-Library3
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_xmldatavorliegt, 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_cstrin 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 Parsengeben Sie es in einen Ausgabestrom vom Typ IF_IXML_OSTREAMaus, 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 = ``.
* Erzeuge das zentrale Factory-Objektlr_ixml = cl_ixml=>create( ).
* Erzeuge ein Factory-Objekt fr Datenstrmelr_streamfactory = lr_ixml->create_stream_factory( ).
* Erzeuge ein Objekt fr den Eingabestromlr_istream = lr_streamfactory->create_istream_string( string = lv_xmldata ).
8/11/2019 Sappress XML Fuer Abap Entwickler
23/43
Validierung gegen Document Type Definitions 3.6
83
* Erzeuge ein Dokumentlr_document = lr_ixml->create_document( ).
* Erzeuge den Parserlr_parser = lr_ixml->create_parser(
document = lr_document stream_factory = lr_streamfactory istream = lr_istream ).
* Erzeuge durch Parsen einen DOM-BaumIF lr_parser->parse( ) 0.* Wirf eine Ausnahme RETURN.ENDIF.
* Erzeuge ein Ausgabeobjektlr_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-Objektlr_renderer_cstr = lr_ixml->create_renderer(
document = lr_document ostream = lr_ostream ).
* Verwende den Rendererlv_ret = lr_renderer_cstr->render( ).
* Schliee den Ausgabestromlr_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:
8/11/2019 Sappress XML Fuer Abap Entwickler
24/43
XML-Library3
84
IF_IXML_PARSER=>CO_NO_VALIDATION
Diese Einstellung aktiviert die Validierung und gibt die Fehlermeldung
unexpected symbol: '
8/11/2019 Sappress XML Fuer Abap Entwickler
25/43
8/11/2019 Sappress XML Fuer Abap Entwickler
26/43
XML-Library3
86
2. Dann teilen Sie dem Parser ber die Methode register_entity()denVerweis 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-Deklarationbeginnen und den folgenden Aufbau besitzen:
...
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
8/11/2019 Sappress XML Fuer Abap Entwickler
27/43
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 Siemehrere 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 Namensraumsvollstndig 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_documenteinem
Knoten zugewiesen und mit diesem Knoten das Unterprogramm print_domaufgerufen 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.
8/11/2019 Sappress XML Fuer Abap Entwickler
28/43
XML-Library3
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 Wurzelzwei Namens-
raumprfixe, die in den Kindelementen verwendet werden:
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, eswurden lediglich die Namensraumprfixe im Element Wurzelumdefiniert:
XML-Element Namensraumprfix URIWurzel
Element nr1 urn:Namensraum1
Element nr2 urn:Namensraum2
Element
Tabelle 3.1 Ausgabe bei Namensraumdeklaration mit Prfixen
8/11/2019 Sappress XML Fuer Abap Entwickler
29/43
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:
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:
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
8/11/2019 Sappress XML Fuer Abap Entwickler
30/43
XML-Library3
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 unterschiedlichenMglichkeiten der Definition des Namensraums beachtet werden.3Sie 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 Namensrumenber 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:
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 wiederangegangen.
8/11/2019 Sappress XML Fuer Abap Entwickler
31/43
8/11/2019 Sappress XML Fuer Abap Entwickler
32/43
XML-Library3
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-Objektlr_ixml = cl_ixml=>create( ).* Erzeuge ein Factory-Objekt fr den Eingabestromlr_factory = lr_ixml->create_stream_factory( ).* Erzeuge den Eingabestromlr_istream = lr_factory->create_istream_string(string = l_var_xmldata ).
* Erzeuge ein temporres Dokumentlr_document = lr_ixml->create_document( ).* Erzeuge den XML-Parserlr_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 auslv_rval = lr_parser->set_dom_generating(
8/11/2019 Sappress XML Fuer Abap Entwickler
33/43
Ereignisbasiertes Parsen 3.8
93
EXPORTING is_generating = space RECEIVING rval = lv_rval ).
* Bei diesem Ereignis sind der Elementname und alle* Attribute bekanntl_var_events = if_ixml_event=>co_event_element_pre2.* Melde die Events beim Parser anlr_parser->set_event_subscription( events = l_var_events ).* Ermittle das erste Eventlr_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 (
]]>.
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_posteingeleitet 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
8/11/2019 Sappress XML Fuer Abap Entwickler
34/43
XML-Library3
94
Elementes kann prinzipiell durch CDATA-Abschnitte, aber auch durch Ele-
mente unterbrochen werden:
Text1Text2 Text4
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_BASEaus 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 Wohlgeformtheitvon XML-Dokumenten berprft, zum Beispiel lsst sie doppelte Attributnamen ineinem XML-Element zu.
8/11/2019 Sappress XML Fuer Abap Entwickler
35/43
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_MESSAGEund 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_DOCUMENTdes AS ABAP, zumal viele
der dortigen Funktionen wie die Persistenzmethoden load()oder save()rein workflowspezifisch sind.
()
()
()
()
()
+ validate()
()
8/11/2019 Sappress XML Fuer Abap Entwickler
36/43
279
Index
AABAP
Kurzdump 242Proxy 218
ABAP Debugger 99ABAP Serialization XMLasXMLABAP Unit 193Abnahmeklasse
CX_INVALID_TRANSFORMATION117
CX_MATCH_ELEMENT 154CX_ST_ERROR 154CX_ST_GROUP_MISSING_CASE 179CX_ST_MATCH_ELEMENT 170CX_ST_MATCH_TEXT 156CX_ST_REF_ACCESS 162CX_ST_SWITCH_NO_CASE 171CX_SY_CONVERSION_NO_DATE_TIME
126CX_SY_CONVERSION_OVERFLOW
231
CX_SY_TANS_OPTION_ERROR 117CX_TRANSFORMATION_ERROR 116CX_XSLT_ABAP_CALL_ERROR 119,
123CX_XSLT_EXCEPTION 117CX_XSLT_RUNTIME_ERROR 231
abstrakter Syntaxbaum 144Adobe Flex 241AJAX 15, 25aktueller Knoten 153Applikationsserver, Datenquelle 77
Architektur, serviceorientierte 218asXML 33, 39, 123, 160, 224Asynchronous JavaScript and XML 15,
25Attributwert-Template 120Ausdruck, regulrer 28, 56, 213, 220Ausnahme, verkettete 123
BBAPI 23Base64 125basXML 39benanntes Template 101, 197benutzerdefinierte XPath-Funktionen
134Beschreibungslogik 240Binary ABAP Serialization XML 39Binary XML 39, 97, 99
Verwendung 105BizTalk Message 18BMEcat 18BPEL 219BRFplus 20BSP 25, 215
Framework 215Business Application Log 241Business Application Programming Inter-
face 23Business Rules Framework Plus 20
Business Server Page BSP
C
CALL TRANSFORMATION 75, 115, 125,151
Canonical XML 39CDA 17, 58CDATA
Abschnitt 94
CDATA-Sektion 35Character Information Item 34CIF 18CL_ABAP_CONV_OUT_CE 103CL_ABAP_XML_NAME_CONVERTER
253CL_APL_ECATT_TDC_API 207CL_AUNIT_ASSERT 193CL_FX_READER 151CL_FX_WRITER 151CL_GUI_HTML_VIEWER 74
8/11/2019 Sappress XML Fuer Abap Entwickler
37/43
280
Index
CL_GUI_TEXTEDIT 232CL_HTTP_CLIENT 243CL_IXML 72, 76CL_IXML_OSTREAM 139
CL_O2_API_XSLTDESC 202, 210, 253CL_SXML_DATASET_READER 97CL_SXML_DATASET_WRITER 97CL_SXML_OPEN_ELEMENT 102CL_SXML_STRING_WRITER 106CL_XML_DOCUMENT_BASE 94, 95CL_XSLT_PROCESSOR 113Code Inspector 250Codegenerierung 141, 227, 232Codepage, Standard 36, 82Content Negotiation 243, 258
Content-Type 64, 218, 220, 242, 243CSV-Datei 46, 48, 109current-grouping-key() 138cXML 18, 59, 80, 158, 173, 176, 204
D
Daten, semistrukturierte 21Datenaustauschprozess 259Datenformat, semistrukturiertes 18
Datenintegration 239Datenstrom, XDF 261Datentyp
komplexer 54XSDBOOLEAN 125XSDDATETIME_Z 125XSDLANGUAGE 125XSDUUID_CHAR 126
Deserialisierung 151DNS 37DocBook, Format 47
Doctype, Deklaration 86Document Object ModelDOMDocument Type Definition DTDDokumententyp, Deklaration 33DOM 72, 79, 82
Baum 72, 79, 87, 139, 145, 150Domain Name System 37domnenspezifische Sprache 226DSLdomnenspezifische SpracheDTD 52, 71, 83, 84
Attribut-Default-Wert 77externe 84, 85interne 84
Dublin Core 64
E
ebXML 18eCATT 22, 23, 202EDIFACT 16einfacher Link 45eingebautes Template 50Element, optionales 163Endrekursion 145
End-Tag 34, 35, 39ereignisbasiertes Parsen 91, 106Ereignis-Trace 241Event 91EXSLT 212Extended Computer Aided Test Tool 22,
23, 202Extensible Markup Language XMLexterne DTD 85
F
Factory-Pattern 121, 122Fallunterscheidung, symmetrische 173FOAF 64Formularsystem 239, 262Funktionsbaustein
DISPLAY_XML_STRING 33, 73, 236F4_HELP_XML_TREE 80SDIXML_XML_TO_DOM 262
G
gemischtes Inhaltsmodell 34, 104, 260groes XML-Dokument 101group-adjacent() 139group-by() 139group-ending-with() 139group-starting-with() 139gXML 18
8/11/2019 Sappress XML Fuer Abap Entwickler
38/43
281
Index
H
Handler-Klasse 242Head-Body-Pattern 106, 259
HL7 Messages 19HTML 32, 45HTTP-Request 242Hlle, transitive 267, 274
I
ICF 24, 78, 215, 258Handler 215, 216, 242
IDoc, Schnittstelle 19
Impact-Analyse 264indirekte Verwendung 263Individualdruck 237Inferenzmaschine 274Inhaltsmodell
gemischtes 104, 260nicht deterministisches 57, 160
Inside-out 24Intelligenz, knstliche 274Interface
IF_HTTP_CLIENT 242
IF_HTTP_EXTENSION 216IF_IXML 76IF_IXML_ATTRIBUTE 76IF_IXML_DOCUMENT 74, 75, 80, 82,
116IF_IXML_EVENT 77, 91IF_IXML_ISTREAM 77, 78, 116IF_IXML_NODE 76, 92, 116IF_IXML_NODE_COLLECTION 115,
138IF_IXML_OSTREAM 77, 82, 116IF_IXML_PARSER 77, 83IF_IXML_STREAM 77IF_IXML_STREAM_FACTORY 77, 78IF_SWF_IFS_PARAMETER_CONTAINE
R 21IF_SXML_NODE 102IF_SXML_READER 97, 98, 101IF_SXML_WRITER 97, 98IF_XML_DOCUMENT 76
interne DTD 84
Internet Communication FrameworkICF
Internet Connection FrameworkICFISO
8601 618859-1 36Item 129iXML, Library 71
J
Java 148JavaScript, ABAP 246JSON 26
K
kanonische XML-Reprsentation 33Knoten, aktueller 153Kollektion 160komplexer Datentyp 54knstliche Intelligenz 274Kurzdump 242
L
Legacy System Migration Workbench142
Link, einfacher 45literaler Text 162, 187LSMW 142
MMakro, Verwendung 27Markup 18, 28, 35Mashup 62Massendaten 150Medientyp 242Memory Inspector 22Metadaten 239Metainformation 240, 249modellgetriebene Programmierung 232
Muster 168, 173
8/11/2019 Sappress XML Fuer Abap Entwickler
39/43
282
Index
N
Namensraum 34, 37, 39, 55, 86, 87, 91,130, 188, 258
Achse 130Attribut 34Knoten 49Prfix 38, 65, 89, 188URI 37
Newsreader 41nicht deterministisches Inhaltsmodell
57, 160Nodeset 129
OOASIS Open Document Format for Office
Applications 42ODF 42ODT 42, 237Online Text Repository 131Ontologie 63, 263, 264, 273
Generierung 269OOXML 237Open World Assumption 68
OpenDocument-Text 42, 237optionales Element 163OTR 131Outside-in 24OWL 66, 264, 271, 273
owl:Class 269owl:disjointWith 269owl:sameAs 269owl:transitiveProperty 267OWL-DL 68OWL-Full 68OWL-Lite 68Reasoning 267
P
Parsenereignisbasiertes 91, 106tokenbasiertes 105
PDF 40, 43, 237
Pretty Printer 74Processing Instruction 35, 36, 104, 236
Programmierungmodellgetriebene 232rekursive 100
Pull-Parser 97
R
RDF 41, 63, 249, 250, 273Viewer 251Visualisierung 251Vokabular 261
RDF Schema 63RDF-Daten
Generierung 256
Visualisierung 257RDFS 63Reader-Klasse 98Really Simple SyndicationRSSReasoner 240, 267Reasoning 264Records Modeler 21Redirect 258regexp, test() 213regulrer Ausdruck 28, 56, 213, 220Rekursion 101
rekursive Programmierung 100Relax NG 58Representational State Transfer 24Resource Description FrameworkRDFRessource 274REST 24REST-Webservice 45, 253, 258
Aufruf von ABAP 243Result Fragment Tree 130RFC
Fehlerprotokoll 241RFC 822 56, 246
RIA 219Rich Enterprise Application 241Rich Internet Application 219RosettaNet 18RSS 40, 41
Format 241Version 1.0 246Version 2.0 41, 52, 54, 62, 248
RSS-Feed 41, 240, 247Anzeige 246Aufruf 246
8/11/2019 Sappress XML Fuer Abap Entwickler
40/43
283
Index
RSS-Reader 241Ruby on Rails 219
SS_MEMORY_INSPECTOR 22SAP NetWeaver 19SAP NetWeaver Process Integration 20SAP Records Management 21SAP Smart Forms 23, 261SAP XML Toolkit for Java 91SAPlink 23SAX 91
Spezifikation 93
Schemasprache 31Schematron 58, 60, 202, 232SchnittstelleInterfaceSCI 250Semantic Web 63, 239, 240Semantic Wiki 240semantischer Webservice 250semistrukturierte Daten 18, 21Sequenz 129Serialisierung 33, 151serviceorientierte Architektur 218
Simple API for XML SAXSimple Transformations 107, 149, 242,
269ABAP-Struktur 156Attribut 156Ausdrucksstrke 184bedingte Transformation 168, 183Bedingung 164Beispielanwendung 150Datenknoten 154Datenwurzel 154Deserialisierung 161, 167, 169elementares Datenobjekt 153externes ST-Programm 186Fallunterscheidung 162, 163, 171Gruppierung 175Integration 97interne Tabelle 157literaler Inhalt 187Mapping 180Modularisierung 185Muster 168, 179Namensraumdeklaration 188
optionales Element 163Parameter 153, 161Standarddeserialisierung 172, 179Standardserialisierung 172, 179
Symmetrie 151, 193symmetrische Fallunterscheidung 173tt:apply 153, 186tt:assign 162, 178, 185tt:attribute 156tt:call 153, 184, 186, 250tt:clear 162tt:cond 163, 165, 167, 168, 169, 173,
174, 184tt:cond-var 162, 184tt:context 161, 186
tt:copy 160tt:d-cond 163, 170, 184tt:deserialize 183, 193tt:empty 168tt:group 177, 179, 180tt:include 152, 186, 250tt:lax 169tt:loop 157, 170, 185tt:namespace 190tt:parameter 152tt:read 161, 162, 181
tt:ref 154, 157tt:root 152, 154, 155tt:s-cond 163, 170, 175tt:serialize 193tt:skip 163, 164, 185, 187tt:switch 171, 173, 179, 182, 183tt:switch-var 183, 184tt:template 152, 186tt:transform 150, 161tt:value 153tt:variable 152, 161, 183
tt:with-parameter 186tt:with-root 186tt:write 162, 181Unter-Template 152Variable 161Vorbedingung 165, 166Whitespace 187Wiederholungsgruppe 177Zusicherung 166
Singleton-Objekt 76SLG1 241SM02 241
8/11/2019 Sappress XML Fuer Abap Entwickler
41/43
284
Index
SM13 241SM58 241SM66 241SOA 218
SOAMANAGER 24SOAP, Webservice 23, 218Sprache, domnenspezifische 226SpreadsheetML 233SRMREGEDIT 22ST01 241ST02 241ST22 242Standard-Codepage 36, 82Standardserialisierung 172Start-Tag 34, 35, 39
Streaming Transformations for XML 30String-Operation 27Stylesheet Level 147SVG 17, 44, 259
svg:line 45svg:rect 45svg:svg 45svg:text 45
SWEL 241SXML
Knoten-Parser 103
Parser 97, 101Reader 99Writer 99
SXML-API, Vorteil 105symmetrische Fallunterscheidung 173Syntaxbaum, abstrakter 144Systemnachricht 241Systemprotokoll 241
TTABLES-Parameter 40Tag Browser 111Tag-Interface 222Taxonomie 67, 68Template
benanntes 101, 197eingebautes 50
Test-Report 242Text, literaler 162, 187Textinhalt 35TIFF 43
TokenModus 104Parser 102, 104
tokenbasiertes Parsen 105
TransaktionSCI 250SLG1 241SM02 241SM13 241SM58 241SM66 241SOAMANAGER 24SRMREGEDIT 22ST01 241ST02 241
ST22 242SWEL 241WE07 241
Transformation 31, 254, 262, 263AS ABAP 264Fakten 270Generierung 207
transitive Hlle 267, 274
U
UDDI 219Unicode 32, 36, 145Uniform Resource Identifier 34, 37, 63,
240Uniform Resource Name 37URI 34, 37, 63, 240URN 37UTF-16 36, 79UTF-8 36, 79, 97
Codepage 36, 82
V
Validierung 52Verbuchungsabbruch 241verkettete Ausnahme 123Verwendung, indirekte 263Verwendungsbeziehung, Ermittlung
253
Vorbedingung 165
8/11/2019 Sappress XML Fuer Abap Entwickler
42/43
8/11/2019 Sappress XML Fuer Abap Entwickler
43/43
Index
sap:escape-uri 129sap:exp 127sap:find-first 128sap:find-first-of 129
sap:find-last 128sap:find-last-not-of 129sap:find-last-of 129sap:if 135sap:intersection 130sap:let 131sap:line 111sap:log 127sap:log10 127sap:lower-case 128sap:max 130
sap:min 130sap:node-set 130sap:otr-string 131, 132sap:otr-text 132sap:parse-xpath 144sap:resolve-uri 129sap:sin 127sap:sqrt 127sap:string-pad 128sap:tan 127sap:target 139
sap:timestamp 131, 146sap:upper-case 128Version 2.0 127
XSDANY 126XSDDATE_D 126XSDTIME_T 126XSL-FO 17, 42, 47, 237
fo:block 43fo:flow 43fo:layout-master-set 43fo:page-sequence 43
fo:root 43XSLT 46, 109, 250, 270, 273
ABAP-Erweiterung 117, 146asXML-Reprsentation 123Aufruf aus ABAP 115Ausgabeformatierung 141, 142Ausnahmebehandlung 122benanntes Template 101, 145, 197Debugger 112dynamischer Template-Aufruf 196
function-available() 133Integration 97Java-Erweiterung 148Konformitt in Version 2.0 109, 127,
134, 135, 139, 141, 147plattformunabhngige Transformation147
rekursive Programmierung 100sap:call-external 118, 119, 120sap:callvalue 119sap:callvariable 120sap:external-function 118, 121, 122,
215SAP-Prozessor 133SAP-spezifische Erweiterung 127
Tester 112Transformation 207Version 2.0 134, 147xsl:apply-imports 146, 147xsl:apply-templates 50, 51, 145, 146xsl:attribute 256xsl:attribute-set 133xsl:call-template 196, 270xsl:copy 49, 139, 209xsl:element 208, 209, 256, 272xsl:fallback 133
xsl:for-each 272xsl:for-each-group 135, 136xsl:function 134xsl:import 146, 196, 250, 256xsl:include 146, 196, 250xsl:message 111, 112xsl:namespace-alias 133, 207, 208xsl:number 133xsl:output 47, 111, 141, 144xsl:param 112, 115, 118, 119, 139xsl:processing-instruction 236
xsl:result 134xsl:transform 198xsl:value-of 47xsl:with-param 147
Z
Zeichensatz 145Zusicherung 165