43
Bonn Boston Tobias Trapp XML für ABAP™-Entwickler

XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Bonn � Boston

Tobias Trapp

XML für ABAP™-Entwickler

1362.book Seite 3 Donnerstag, 1. Oktober 2009 11:32 11

Page 2: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

5

Inhalt

Vorwort zur zweiten Auflage .................................................................... 11

In diesem Kapitel lernen Sie die wichtigsten Anwendungsgebiete von XML-Technologien innerhalb und außerhalb der Plattform SAP NetWeaver kennen. 15

1 Einleitung ............................................................................ 15

1.1 Anwendungsgebiete von XML-Technologien ......................... 161.1.1 XML für den Austausch von Daten und

Dokumenten ............................................................. 161.1.2 XML im E-Business ................................................... 181.1.3 XML in der Anwendungsintegration .......................... 19

1.2 XML innerhalb von SAP NetWeaver ...................................... 191.2.1 XML im Datenaustausch ........................................... 191.2.2 XML in ABAP-Anwendungen .................................... 211.2.3 XML in der ABAP-Entwicklung .................................. 221.2.4 XML als Integrationstechnologie ............................... 231.2.5 XML für die Generierung und das Parsen von

Dokumenten ............................................................. 251.2.6 XML in Webanwendungen ....................................... 25

1.3 XML-Verarbeitung durch String-Manipulation ....................... 271.3.1 Verwendung von String-Operationen ........................ 271.3.2 Parsen mit regulären Ausdrücken .............................. 281.3.3 Softwaretechnische Gründe für Application

Programming Interfaces ............................................ 291.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 Einführung in XML ................................................................ 312.1.1 XML-Syntax .............................................................. 322.1.2 XML-Semantik .......................................................... 39

2.2 XML-Vokabulare ................................................................... 402.2.1 Really Simple Syndication ......................................... 402.2.2 WordML, ODF und OOXML ..................................... 422.2.3 XSL Formatting Objects ............................................ 422.2.4 Scalable Vector Graphics ........................................... 442.2.5 XHTML ..................................................................... 452.2.6 XML-Linking ............................................................. 45

2.3 XSL-Transformationen ........................................................... 462.3.1 Lokalisierungen mit XPath ......................................... 48

1362.book Seite 5 Donnerstag, 1. Oktober 2009 11:32 11

Page 3: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Inhalt

6

2.3.2 Template-Verarbeitung mit XSLT .............................. 492.3.3 Stärken und Schwächen von XSLT ............................. 51

2.4 XML-Schemasprachen ........................................................... 512.4.1 Document Type Definitions ...................................... 522.4.2 XML Schema ............................................................. 532.4.3 Schematron ............................................................... 592.4.4 Grundregeln für die Erstellung eigener Vokabulare .... 61

2.5 XML als Basis des Semantic Web ........................................... 622.5.1 Resource Description Framework .............................. 622.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 Einführung ............................................................................. 723.1.1 Erzeugen eines DOM-Baumes ................................... 723.1.2 Filter und Iteratoren .................................................. 74

3.2 Wichtige Interfaces ................................................................ 763.3 Datenquellen ......................................................................... 783.4 DOM-API .............................................................................. 79

3.4.1 Zugriff auf den DOM-Baum ....................................... 793.4.2 Manipulation eines DOM-Baumes ............................ 80

3.5 Rendern von XML-Dokumenten ............................................ 823.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 Unterstützung von Namensräumen ........................................ 863.7.1 Namensraumunterstützung der XML-Library ............. 873.7.2 Elementidentifikation mit Namensräumen ................. 90

3.8 Ereignisbasiertes Parsen ......................................................... 913.8.1 SAX-Schnittstelle ...................................................... 913.8.2 Fallstricke ................................................................. 93

3.9 Service-Schnittstellen zur XML-Library ................................... 94

Sie lernen in diesem Kapitel mit dem SXML-Parser die jüngste XML-Programmierschnittstelle im AS ABAP kennen. Über diese können Sie auch binäre XML-Daten erzeugen. 97

4 SXML-Parser ....................................................................... 97

4.1 Reader- und Writer-Klassen ................................................... 984.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

Page 4: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Inhalt

7

4.2.2 Token-Modus ........................................................... 1044.3 Anwendungsbeispiele ............................................................ 105

4.3.1 Verwendung von Binary XML .................................... 1054.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 mächtigsten Werkzeuge zur Verarbeitung von XML-Dokumenten. 109

5 XSL-Transformationen ........................................................ 109

5.1 Integration von XSLT in die ABAP Workbench ....................... 1105.1.1 Tag Browser .............................................................. 1115.1.2 XSLT-Tester .............................................................. 1115.1.3 Übergabe von Parametern im XSLT-Tester ................ 1125.1.4 XSLT-Debugger ......................................................... 113

5.2 Integration von XSLT in ABAP ............................................... 1145.2.1 Aufruf von XSLT aus ABAP ........................................ 1155.2.2 Aufruf von ABAP aus XSLT ........................................ 1175.2.3 Ausnahmebehandlung bei ABAP-Aufrufen

von XSLT .................................................................. 1225.3 Transformation von ABAP-Daten ........................................... 1235.4 SAP-spezifische Erweiterungen .............................................. 127

5.4.1 Numerische Funktionen ............................................ 1275.4.2 String-Funktionen ..................................................... 1285.4.3 XPath-Operatoren und Pfadausdrücke aus

XPath 2.0 .................................................................. 1295.4.4 Kommandos für Nodesets ......................................... 1305.4.5 Weitere Funktionen .................................................. 1305.4.6 SAP-spezifische Einschränkungen .............................. 133

5.5 XSLT-2.0-Unterstützung ........................................................ 1345.5.1 Definitionen von XPath-Funktionen und bedingte

XPath-Ausdrücke ...................................................... 1345.5.2 Gruppierung von XML-Elementen ............................. 1355.5.3 Mehrere Ein- und Ausgabedokumente ...................... 1395.5.4 Ausgabeformatierung ................................................ 141

5.6 Generierung von Code ........................................................... 1415.6.1 Text-Templates ......................................................... 1425.6.2 Abstrakte Syntaxbäume von XPath-Ausdrücken ........ 144

5.7 Tipps für die Praxis ................................................................ 1455.7.1 Encoding .................................................................. 1455.7.2 Performance ............................................................. 1455.7.3 Erweiterungen .......................................................... 1465.7.4 Modularisierung von Transformationsprogrammen .... 1465.7.5 Konstruktion portabler Transformationen .................. 147

1362.book Seite 7 Donnerstag, 1. Oktober 2009 11:32 11

Page 5: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Inhalt

8

Simple Transformations bezeichnen eine SAP-proprietäre Programmiersprache, die Sie einsetzen sollten, wenn Performanceaspekte wichtig sind oder Sie große XML-Dokumente verarbeiten wollen. Wie das in der Praxis funktioniert, zeigt Ihnen dieses Kapitel. 149

6 Simple Transformations ...................................................... 149

6.1 Grundstruktur ........................................................................ 1506.2 Zugriff auf Datenobjekte ........................................................ 153

6.2.1 Zugriff auf elementare Datenobjekte ......................... 1536.2.2 Datenwurzeln und Datenknoten ............................... 1546.2.3 Attribute ................................................................... 1566.2.4 Strukturen ................................................................. 1566.2.5 Interne Tabellen ........................................................ 1576.2.6 XML-Repräsentation von ABAP-Daten ...................... 160

6.3 Variablen und Parameter ....................................................... 1616.3.1 Zuweisungen von Variablen und Parametern ............. 1616.3.2 Fallunterscheidungen mit Variablen .......................... 162

6.4 Bedingte Transformationen .................................................... 1626.4.1 Optionale Elemente und Attribute ............................ 1636.4.2 Vorbedingungen, Bedingungen und Zusicherungen ... 1656.4.3 tt:cond im Detail ....................................................... 1686.4.4 Fallunterscheidung .................................................... 1716.4.5 Gruppierung ............................................................. 175

6.5 Mappings .............................................................................. 1806.5.1 Mapping-Attribut ..................................................... 1816.5.2 Mapping mit Fallunterscheidungen ........................... 1816.5.3 Bedingte Transformationen mit Variablen ................. 1836.5.4 Struktur-Mappings .................................................... 184

6.6 Modulare Transformationsprogramme ................................... 1856.6.1 Unter-Templates ....................................................... 1866.6.2 Einbindung von Transformationen ............................. 1866.6.3 Aufruf externer ST-Programme .................................. 186

6.7 Weitere Themen .................................................................... 1866.7.1 Literale Inhalte .......................................................... 1876.7.2 Namensräume ........................................................... 1886.7.3 Typisierung ............................................................... 1906.7.4 Best Practices ............................................................ 1936.7.5 Ausblick auf weitere Entwicklungen .......................... 193

Mit XML-Technologien können Sie Systeme und Anwendungen verbinden und die Programmierweisen für neue und innovative Lösungen etablieren. In diesem Kapitel werden Sie dazu die passenden Anwendungsbeispiele kennenlernen – sowohl für XML-Technologien als auch für fortgeschrittene XSLT-Programmiertechniken. 195

7 XML-Anwendungsbeispiele ................................................ 195

7.1 Unit-Tests von XSLT-Programmen ......................................... 1957.1.1 Fallbeispiel: Komplexe Operation auf

Knotenmengen ......................................................... 1977.1.2 Zusammenfassung ..................................................... 201

1362.book Seite 8 Donnerstag, 1. Oktober 2009 11:32 11

Page 6: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Inhalt

9

7.2 Schematron-Implementierung ............................................... 2027.2.1 Speicherung der Schemata in eCATT-Containern ....... 2027.2.2 Ablauf der Generierung ............................................. 2057.2.3 Generierung der Validierungstransformation ............. 2077.2.4 Erzeugung von XSLT-Entwicklungselementen ............ 2107.2.5 Zusammenfassung ..................................................... 211

7.3 XSLT-Erweiterungen durch EXSLT .......................................... 2127.3.1 Überprüfung regulärer Ausdrücke ............................. 2137.3.2 Zusammenfassung ..................................................... 215

7.4 REST-Webservices ................................................................. 2157.4.1 Wiedergabe von Informationen über Kurzdumps ...... 2167.4.2 REST-Webservices in der Praxis ................................. 2187.4.3 Zusammenfassung ..................................................... 221

7.5 Objektserialisierung ............................................................... 2217.5.1 Anwendungsbeispiel Terminverwaltung .................... 2217.5.2 Stärken und Schwächen ............................................ 2257.5.3 Zusammenfassung ..................................................... 226

7.6 Domänenspezifische Sprachen ............................................... 2267.6.1 Anwendungsbeispiel Datumsberechnung .................. 2277.6.2 Zusammenfassung ..................................................... 232

7.7 XML als Dokumentenformat .................................................. 2327.7.1 Parsen von Excel-Dokumenten .................................. 2337.7.2 Erstellung von WordML-Dokumenten ....................... 2357.7.3 Erzeugung von PDF-Dateien mittels XSL-FO ............. 2377.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 können. 239

8 Metadaten und Semantic-Web-Technologien ................... 239

8.1 Realisierung eines RSS-Feeds ................................................. 2418.1.1 Exponieren von ABAP-Kurzdumps als RSS-Feed ........ 2428.1.2 Erzeugung der RSS-Daten ......................................... 2468.1.3 Zusammenfassung ..................................................... 249

8.2 Resource Description Framework .......................................... 2498.2.1 Metainformationen für XML-Transformationen ......... 2508.2.2 Exponieren der Metadaten als REST-Webservice ....... 2588.2.3 Integration von Metadaten in XML-Dokumente ........ 2588.2.4 Zusammenfassung ..................................................... 263

8.3 Ontologien ............................................................................ 2638.3.1 Verwendungen zwischen Transformationen

im AS ABAP .............................................................. 2648.3.2 Reasoning in OWL .................................................... 267

1362.book Seite 9 Donnerstag, 1. Oktober 2009 11:32 11

Page 7: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Inhalt

10

8.3.3 Generierung der Ontologie ....................................... 2698.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 können. 239

Anhang ...................................................................................... 275

A Literaturverzeichnis .......................................................................... 275B Der Autor ........................................................................................ 278

Index ........................................................................................................ 279

1362.book Seite 10 Donnerstag, 1. Oktober 2009 11:32 11

Page 8: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

11

Vorwort zur zweiten Auflage

XML-Technologien haben sich zu Schlüsseltechnologien von SAP NetWeaverentwickelt. 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 undsind Basis fast aller Integrationstechnologien. Auch innerhalb der Anwen-dungen des SAP NetWeaver Application Servers ABAP (AS ABAP) werden sieverwendet, 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 sichauch im Titel dieses Buches widerspiegelt. Standen in der ersten Auflage vorallem Integrationsszenarien im Vordergrund, sollen in dieser Neuauflageviele unterschiedliche Anwendungsgebiete behandelt werden, um die Stär-ken von XML-basierten Lösungen aufzuzeigen. Insbesondere dieser letzteAspekt wird weiter an Bedeutung gewinnen, da der AS ABAP aufgrund sei-ner Robustheit und der Vielzahl seiner Programmierschnittstellen einemächtige Plattform für die Entwicklung von Geschäftsanwendungen ist.

Inhalt, Ziel und Zielgruppen des Buches

Dieses Buch behandelt alle XML-Programmierschnittstellen des AS ABAP.Ihnen wird vermittelt, in welchen Bereichen der AnwendungsentwicklungSie XML-Technologien gewinnbringend einsetzen können. Neben denGrundlagen werden dabei auch fortgeschrittene Programmiertechniken undAnwendungsgebiete vorgestellt.

Dieses Buch richtet sich an ABAP-Entwickler, die die Grundlagen von XMLund auf XML basierenden Technologien verstehen und einsetzen wollen.Damit ist es einerseits für Einsteiger geschrieben, die vielfältige Anwendungenzum Austausch von Daten und Dokumenten sowie die XML-Anwendungs-entwicklung in ABAP an sich kennenlernen wollen. Aber auch XML-Profisund Lösungsarchitekten werden auf den folgenden Seiten eine Vielzahl anAnregungen und Programmiertricks finden, um flexible und zeitgemäßeLösungen zu entwerfen.

1362.book Seite 11 Donnerstag, 1. Oktober 2009 11:32 11

Page 9: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Vorwort zur zweiten Auflage

12

Aufbau des Buches

In Kapitel 1, »Einleitung«, werden Sie die wichtigsten Anwendungsgebietevon 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 wichtigstenStandards der XML-Familie. Die in diesem Kapitel diskutierten Standardswerden 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 Einführung in die The-matik und können auch unabhängig voneinander gelesen werden. Jedes die-ser Kapitel enthält auch softwaretechnische Überlegungen sowie BestPractices zum Einsatz der jeweiligen Technologie, sie bieten damit auch fort-geschrittenen Lesern genügend Anregungen.

Kapitel 7, »XML-Anwendungsbeispiele«, liefert eine Reihe von Anwen-dungsbeispielen für XML-Technologien, während Kapitel 8, »Metadatenund Semantic-Web-Technologien«, den Einsatz von XML-Technologien imBereich des Wissensmanagements beleuchtet und eine Einführung in soge-nannte Semantic-Web-Technologien liefert.

Systemvoraussetzungen

Wenn Sie die in diesem Buch beschriebenen Lösungen testen wollen, solltenSie ein Testsystem aufsetzen. Für Test- und Evaluierungszwecke können Siedie ABAP Trial Version mit Release-Stand 7.0 EhP1 aus dem SAP DeveloperNetwork unter http://sdn.sap.com herunterladen: Folgen Sie dem Menüver-lauf Downloads � SAP NetWeaver Main Releases.

Viele der hier beschriebenen Technologien lassen sich aber auch bereits mitRelease 6.20 des AS ABAP einsetzen. Stehen bestimmte Techniken erst abhöheren Releases zur Verfügung, wird gesondert darauf hingewiesen.

Beispiele und ABAP-Quelltext

Alle Codebeispiele dieses Buches können Sie sich von der Webseite zumBuch 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

Page 10: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Vorwort zur zweiten Auflage

13

Danksagung

An dieser Stelle möchte ich besonders Karsten Bohlmann für seine wertvol-len Hinweise danken. Ebenso danke ich Stefan Proksch von Galileo Press fürdie sehr gute Zusammenarbeit.

Tobias TrappSoftwarearchitekt, AOK Systems GmbH

1362.book Seite 13 Donnerstag, 1. Oktober 2009 11:32 11

Page 11: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

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-Library1 – ist die älteste XML-Pro-grammierschnittstelle des SAP NetWeaver Application Servers ABAP undsteht seit Release 4.6D zur Verfügung. Sie enthält verschiedene Klassen,unter anderem für das Parsen und Rendern von XML-Dokumenten. Da sieim Kernel des AS ABAP implementiert ist, ist sie schnell und speichereffizi-ent: Die Objekte zum Zugriff auf die XML-Elemente werden erst dannerzeugt, wenn auf sie zugegriffen wird.

Die XML-Library besitzt folgende Programmierschnittstellen:

� ParserEs existiert eine Reihe von Parsern: ein eventbasierter, ein tokenbasierterund ein DOM-basierter Parser. Im Paket SIXML des AS ABAP finden SieBeispielprogramme für diese Programmierschnittstellen: T_PARSING_EVENT,T_PARSING_TOKEN und T_PARSING_EVENT.

� RendererNeben dem Lesen von XML-Dokumenten können Sie diese auch erzeu-gen, wobei Sie die Kontrolle über Zeichensätze und Byteordnung besit-zen. Dies wird im Programm T_ENCODING demonstriert.

� Unterstützung von DTDsDie XML-Library kann sowohl gegen XML-Dokumente als auch gegenDocument Type Definitions (DTD) validieren und besitzt auch eine API, umeinem XML-Dokument eine interne DTD hinzuzufügen. Hierfür gibt es imAS 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 für integrated, was bedeutet, dass dieses Softwaremodul inden Kernel integriert ist.

1362.book Seite 71 Donnerstag, 1. Oktober 2009 11:32 11

Page 12: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

XML-Library3

72

Verglichen mit dem SXML-Parser, der in Kapitel 4 vorgestellt wird, besitztdie XML-Library einen größeren Funktionsumfang, unterstützt aber keinBinary XML.

Abschnitt 3.1 dieses Kapitels bietet Ihnen eine allgemeine Einführung in dieXML-Library, in Abschnitt 3.2 folgt eine Einführung in die wichtigsten Pro-grammierschnittstellen der XML-Library. In Abschnitt 3.3 lernen Sie dieDatenquellen der XML-Library kennen und im darauffolgenden Abschnitt3.4 eine Programmierschnittstelle, mit der Sie bequem sowohl XML-Doku-mente lesen als auch erzeugen können. Diese XML-Dokumente liegen ineiner Hauptspeicher-Repräsentation, einem sogenannten DOM-Baum, vor.Wie Sie diesen Baum als Datenstrom ausgeben (rendern), erfahren Sie inAbschnitt 3.5.

Abschnitt 3.6 beschreibt die Validierung eines Dokumentes gegen Docu-ment Type Definitions, die Sie schon in Abschnitt 2.4.1 kennengelernthaben. Im nachfolgenden Abschnitt 3.7 lernen Sie, wie XML-Namensräumevon der XML-Library unterstützt werden. Abschnitt 3.8 behandelt soge-nannte ereignisbasierte Parser, die Sie einsetzen sollten, wenn Sie extremgroße XML-Dokumente verarbeiten. Abschnitt 3.9 schließt das Kapitel mitInformationen zur softwaretechnischen Kapselung der XML-Library, die sichin Ihren Anwendungen als vorteilhaft erweisen werden.

3.1 Einführung

Damit Sie die XML-Library besser kennenlernen, soll zunächst das folgendeDokument 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 Repräsentation 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 derXML-Library über den Aufruf von cl_ixml=>create( ).

1362.book Seite 72 Donnerstag, 1. Oktober 2009 11:32 11

Page 13: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Einführung 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( ) undfügen ein Attribut über set_attribute( ) hinzu. Dieses Element hängenSie über append_child( ) an das Dokument als Wurzelelement an.

4. Ebenso erstellen Sie ein zweites Element child und fügen einen Textinhaltüber die Methode set_value( ) hinzu. Dieses Element hängen 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_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

Page 14: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

XML-Library3

74

3.1.2 Filter und Iteratoren

Als zweites Beispiel für die XML-Library lernen Sie nun Filter und Iteratorenkennen. Auf diese Weise können 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 einschränken können. InListing 3.2 wählen Sie alle Elemente, die im Namensraum urn:filter liegen.

2. Anhand dieses Filters definieren Sie einen Iterator über die Methodecreate_iterator_filtered( ). Über die Methode get_next( ) des Itera-tors können 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 können Sie auch lesbar ausgeben, indem Sie die Methode set_normalizing( ) verwenden. Auf diese Weise werden zusätzliche Whitespaceseingefügt, sodass die hierarchische Struktur des XML-Dokumentes besser erkenn-bar ist.

Tipp: Anzeige von XML-Dokumenten

Für 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

Page 15: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Einführung 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 einXML-Dokument in eine Instanz von IF_IXML_DOCUMENT zu überführen. Siewerden in Abschnitt 3.3, »Datenquellen«, noch weitere Alternativen dazusehen.

In Listing 3.2 wurden die Knoten des Namensraums urn:filter des folgen-den XML-Dokumentes ausgegeben; das waren die Knoten child_1 undchild_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-fälle kennenlernen, werden im folgenden Abschnitt noch zentrale Interfacesvorgestellt.

1362.book Seite 75 Donnerstag, 1. Oktober 2009 11:32 11

Page 16: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

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 Funktionalität einer Schnittstellevon ihrer Implementierung getrennt.

Eine vollständige 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 hierein Einblick in wichtige Programmierschnittstellen gegeben werden. Derverbleibende Teil erschließt sich dann erfahrungsgemäß schnell von selbst.

� Interface IF_IXMLFür Entwickler bietet das Interface IF_IXML den zentralen Zugang zu denbisher vorgestellten Funktionalitäten. Mit ihm lassen sich andere Objekteinstanzieren, zum Beispiel zum Parsen oder Rendern eines XML-Doku-mentes. Das Interface wird über die Klasse CL_IXML implementiert. DieseKlasse ist ein Singleton-Objekt: Mehrfache Aufrufe der Methode cl_ixml=>create( ) liefern immer dasselbe Objekt.

� Interface IF_IXML_DOCUMENTDas Interface IF_XML_DOCUMENT repräsentiert 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 eingeschränktenXPath-Ausdruck identifiziert werden kann.

� Interface IF_IXML_NODEIF_IXML_NODE repräsentiert einen Knoten in der DOM-Darstellung einesDokumentes (siehe Abschnitt 3.3, »Datenquellen«). Der Typ eines Kno-tens kann mit der Methode get_type( ) ermittelt werden: Es kann sichdabei zum Beispiel um einen Kommentar- oder Textknoten handeln. Füreinen vollständigen Überblick über die Knotentypen sollten Sie sich dieAttribute des Interface IF_IXML_NODE anzeigen lassen. Über die Methodeget_name( ) lässt 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 überdie Methode get_attributes( ).

1362.book Seite 76 Donnerstag, 1. Oktober 2009 11:32 11

Page 17: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Wichtige Interfaces 3.2

77

Auf die Kindelemente eines Elementknotens lässt sich über die Methodeget_children( ) zugreifen. Es existieren noch weitere Methoden, wiezum Beispiel die Methode get_gid( ), die eine dem Knoten zugeordneteNummer liefert. Mithilfe dieser Nummer lassen sich umgekehrt über dieMethode find_from_gid( ) Knoten identifizieren.

Die API unterstützt auch Iteratoren, mit denen sich Knotenmengen durch-wandern lassen: Ein Iterator wird mit create_iterator( ) definiert, undmit get_next( ) wird auf das folgende Element zugegriffen. Da alle Teileeines Dokumentes über Objekte, die das Interface IF_IXML_NODE oderdavon abgeleitete Interfaces haben, angesprochen werden können, istdamit eine generische Programmierweise möglich.

� Stream-InterfacesDas Interface IF_IXML_STREAM ist das Basis-Interface für alle Eingabe-und Ausgabeströme 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 Ausgabestromkönnen an eine Datei auf dem Applikationsserver, einen String oder eineinterne Tabelle gebunden sein. Ein Objekt für einen Datenstrom wirddurch eine sogenannte Factory über das Interface IF_IXML_STREAM_FACTORY instanziert.

� Interface IF_IXML_PARSERDer Parser der XML-Library baut entweder einen DOM-Baum aus einemXML-Eingabestrom auf, oder er arbeitet rein ereignisbasiert. Im zweitenFall ist es erforderlich, ein Objekt mit dem Interface IF_IXML_EVENT zuerstellen. Zuvor müssen die Ereignisse, die abgefangen werden sollen,beim Parser angemeldet werden.

In den folgenden Abschnitten werden Sie anhand einiger Programmbei-spiele die Einsatzmöglichkeiten des XML-Parsers kennenlernen, sich mit derDOM- und SAX-API, mit der Validierung gegen eine Document Type Defini-tion und mit Namensraumaspekten beschäftigen. Für weitergehende Detailswie 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 HelpPortal verwiesen.

1362.book Seite 77 Donnerstag, 1. Oktober 2009 11:32 11

Page 18: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

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 Mög-lichkeit besteht darin, dieses Interface über die Methode create_istream_uri( ) von IF_IXML_STREAM_FACTORY zu erzeugen und dem Datenstrom eineDatei auf dem Applikationsserver zuzuweisen; ein Dateipfad auf dem Präsen-tationsserver oder eine URL sind nicht zulässig. Diese Vorgehensweise ist inListing 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 temporäres Dokument für das Parsenlr_tmpdoc = lr_ixml->create_document( ).

* Erzeuge ein Stream-Factory-Objektlr_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 Anwendungsfällen liegen die XML-Dokumente nicht alsDateien auf dem Applikationsserver vor, sondern als Strings oder Bytefol-gen, die aus verschiedenen Datenquellen stammen können, wie beispiels-weise transparente Tabellen oder Datenquellen, die über das Internet Com-munication Framework zur Verfügung stehen. Mit diesem Aspekt beschäftigtsich Abschnitt 7.4, »REST-Webservices«.

Liegt der Inhalt eines Dokumentes in einem String vor, können Sie diesenmit der Methode create_istream_xstring( ) übergeben, was in Listing 3.4beschrieben ist.

* Erzeuge das Haupt-XML-Library-Factory-Objektlr_ixml = cl_ixml=>create( ).

1362.book Seite 78 Donnerstag, 1. Oktober 2009 11:32 11

Page 19: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

DOM-API 3.4

79

* Erzeuge ein temporäres Dokumentlr_tmpdoc = lr_ixml->create_document( ).

* Erzeuge ein Factory-Objekt für 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 möglich, Unicode zuverarbeiten.2 Jedoch besteht das Risiko, dass einige Zeichen nicht korrektdargestellt werden. Umgekehrt ist es aber auch erlaubt, XML-Dateien zumBeispiel in UTF-8 zu erzeugen, was im folgenden Abschnitt gezeigt wird.

3.4 DOM-API

Das Document Object Model (DOM) bietet eine API für das Parsen und Mani-pulieren von XML-Dokumenten in Baumstrukturen. DOM basiert auf einerReihe 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 Übermengevon Level 1 (http://www.w3.org/TR/DOM-Level-1) inklusive Namensraumun-terstützung implementiert.

3.4.1 Zugriff auf den DOM-Baum

DOM-basierte Interfaces werden beispielsweise für Konfigurationsdateienverwendet: Ein XML-Dokument wird mithilfe der DOM-API in den Haupt-speicher geladen und liegt dort in einem sogenannten DOM-Baum vor. DieseTechniken können natürlich auch zur bequemen Auswertung von Header-Elementen eines XML-Dokumentes verwendet werden.

2 Interne Konvertierungen von UTF-16 zur SAP-Codepage sind häufig ein Grund für schlechtePerformanz während der XML-Verarbeitung.

Document Object Model ist eine standardisierte Schnittstelle

Ein DOM-Baum ist auch ein Modell für ein XML-Dokument. Leider sind die Modellefür 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 Glück nur in wenigen Fällen Probleme bereiten.

1362.book Seite 79 Donnerstag, 1. Oktober 2009 11:32 11

Page 20: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

XML-Library3

80

Die API stellt Methoden für einen Zugriff auf beliebige Teile des Dokumen-tes zur Verfügung, unter Level 1 und Level 2 allerdings nicht mit vollständi-ger XPath-Unterstützung. Trotzdem verfügt das Interface IF_IXML_DOCUMENTüber die Möglichkeit, auf Elemente mittels eines Pfadausdrucks zuzugreifen,was im Folgenden an einem Beispiel vorgeführt wird. Für eine vollständigeDokumentation 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 Geschäfts-nachrichten (siehe Abschnitt 2.5, »XML als Basis des Semantic Web«). Einesolche Nachricht besitzt ein Wurzelelement cXML mit den KindelementenHeader 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 einDokument als Treeview ausgeben und einen bestimmten Knoten selektierenkönnen und den Pfad im Dokument als Rückgabewert erhalten. Die dafürbenötigte Service-Schnittstelle werden Sie in Abschnitt 3.9, »Service-Schnitt-stellen zur XML-Library«, kennenlernen.

Abbildung 3.1 Aufbau einer cXML-Beispielnachricht

Ausgangspunkt für die Manipulation eines XML-Dokumentes mit denMethoden der XML-Library ist ein Dokument in der in Abbildung 3.1 darge-stellten Struktur. Zu dieser Eingangsnachricht soll eine Quittungsnachrichterstellt werden. Hierzu gehen Sie wie folgt vor:

1362.book Seite 80 Donnerstag, 1. Oktober 2009 11:32 11

Page 21: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

DOM-API 3.4

81

1. Sie löschen die Elemente Header und Request unter dem Wurzelelementund fügen 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 löschenden Ele-mente über die Methode find_from_path_ns( ) identifizieren, überremove_node( ) löschen und dann über die Methoden append_child( )und set_attribute( ) die Elemente und Attribute hinzufügen.

* Lies einen Knotenlr_element = lr_document->find_from_path_ns( default_uri = `` path = `/cXML/Header`).lr_element->remove_node( ).

* Lies einen Knotenlr_element = lr_document->find_from_path_ns( default_uri = `` path = `/cXML/Request`).* Lösche den alten Payloadlr_element->remove_node( ).

* Ermittle das Wurzelelementlr_cxml = lr_document->find_from_path_ns( default_uri = `` path = `/cXML`).

* Erzeuge ein Antwortelementlr_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 mitNamensräumen (siehe Abschnitt 3.6, »Validierung gegen Document TypeDefinitions«) noch eingegangen.

1362.book Seite 81 Donnerstag, 1. Oktober 2009 11:32 11

Page 22: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

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 können.

Im folgenden Beispiel wird davon ausgegangen, dass das Eingabedokumentim 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 können Sie Listing 3.6 entnehmen: Sie erzeugenzuerst einen Eingabestrom für Strings über eine Stream-Factory, dann erstel-len Sie ein Eingabedokument vom Typ IF_IXML_DOCUMENT, das Sie mit einemEingabestrom (hier nur ein Wurzelelement) befüllen. Nach dem Parsengeben Sie es in einen Ausgabestrom vom Typ IF_IXML_OSTREAM aus, wobeiSie mit der Methode create_encoding( ) die Ausgabeoptionen festlegen.Beachten Sie, dass erst mit der Methode render( ) der Ausgabe-Stringbefüllt 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.

* Befülle den String lv_xmldatalv_xmldata = `<root/>`.

* Erzeuge das zentrale Factory-Objektlr_ixml = cl_ixml=>create( ).

* Erzeuge ein Factory-Objekt für Datenströmelr_streamfactory = lr_ixml->create_stream_factory( ).

* Erzeuge ein Objekt für den Eingabestromlr_istream = lr_streamfactory->create_istream_string( string = lv_xmldata ).

1362.book Seite 82 Donnerstag, 1. Oktober 2009 11:32 11

Page 23: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

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 plattformabhängiger 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( ).

* Schließe 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 Möglichkeit, XML-Doku-mente während des Parsens gegen DTDs zu validieren. Die Validierung lässtsich über die Methode set_validating( ) aktivieren und deaktivieren.Dabei sind folgende Werte möglich:

1362.book Seite 83 Donnerstag, 1. Oktober 2009 11:32 11

Page 24: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

XML-Library3

84

� IF_IXML_PARSER=>CO_NO_VALIDATIONDiese Einstellung aktiviert die Validierung und gibt die Fehlermeldungunexpected symbol: '<DOCTYPE' aus, wenn ein Verweis auf eine DTD imXML-Dokument enthalten ist.

� IF_IXML_PARSER=>CO_VALIDATIONDiese 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 Verweiserfolgen.

� Beim internen Verweis erfolgt die Document Type Definition im Doku-ment, wie im Beispiel von <!DOCTYPE rss [ ]>, wobei in den eckigenKlammern die Strukturbeschreibung des Wurzelelementes rss des Doku-mentes erfasst ist. Listing 3.7 zeigt ein XML-Dokument mit einer internenDTD 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 einPfad auf dem Applikationsserver angegeben werden.

1362.book Seite 84 Donnerstag, 1. Oktober 2009 11:32 11

Page 25: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

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 ABAPlauffähig ist, vorgenommen werden. Über die Konstante IF_IXML_PAR-SER=>CO_VALIDATE_IF_DTD können Sie angeben, dass eine Validierung vor-genommen werden soll, sofern eine DTD spezifiziert ist, die in diesem FallTeil des XML-Dokumentes ist. Im Anschluss geben Sie die Fehler und War-nungen aus.

* Erzeuge den XML-Parserlr_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 DokumentIF lr_parser->parse( ) <> 0.* Zähle 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 einenexternen 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

Page 26: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

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). Dafür muss der Code in Lis-ting 3.8 vor dem Aufruf der Methode parse( ) ausgeführt 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:

<!DOCTYPE rss SYSTEM "rss.dtd"> <rss version="2.0"> <channel>... </channel></rss>

3.7 Unterstützung von Namensräumen

Namensräume dienen der Unterscheidung von Elementen und Attributen,die denselben Namen, aber unterschiedliche Bedeutung haben. Über URI-Namen ist es beispielsweise möglich, verschiedene XML-Vokabulare ausein-anderzuhalten. Hierdurch werden auch die Vokabulare der XML-basiertenSpezifikationen XML Schema und XSLT eindeutig identifizierbar.

Namensräume sind ebenso notwendig für die Erstellung modularer Daten-austauschspezifikationen: Sie können Bibliotheken von Datentypen erstellenund diese mithilfe von Namensräumen zusammenfassen, sodass sie überSoftwaresysteme erkennbar sind. Diese Bibliotheken können Sie in Daten-austauschspezifikationen wiederverwenden. Auf diese Weise werden Daten-typen standardisiert. Die Standardisierung macht Datenaustauschspezifikati-onen besser verständlich, da sie Mehrfachdefinitionen vermeidet. Ebensolassen sich dadurch Transformationsprogramme wiederverwenden.

Wie schon in Abschnitt 2.1, »Einführung in XML«, angesprochen, lässt dieW3C-Spezifikation »Namespaces in XML« (http://www.w3.org/TR/REC-xml-names) unterschiedliche Möglichkeiten zur Bindung eines XML-Elementesan einen Namensraum zu und macht die Identifizierung eines Namensraumsbeim Parsen schwieriger als erwartet. In den folgenden Abschnitten werdendie damit in Verbindung stehenden Probleme detailliert diskutiert. Zunächst

1362.book Seite 86 Donnerstag, 1. Oktober 2009 11:32 11

Page 27: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Unterstützung von Namensräumen 3.7

87

werden äquivalente XML-Dokumente präsentiert, deren Elemente auf unter-schiedliche Weise mit Namensräumen versehen sind, die aber alle gültig inBezug auf dasselbe XML Schema sind. Dann lernen Sie ein ABAP-Programmkennen, das zu geparsten XML-Dokumenten bezüglich der verschiedenenParser-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 Namensraumunterstützung der XML-Library

Die Namensraumunterstützung des Parsers lässt 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. DerModus co_namespace_unaware ignoriert die Existenz eines Namensraumsvollständig und behandelt Namensraumattribute wie alle anderen Attribute.Da auf diese Weise die Namensraumpräfixe dem Elementnamen zugeschla-gen werden, ist dieser Modus für die weitere Betrachtung uninteressant.

Sie können das ABAP-Programm aus Listing 3.9 verwenden, um ein XML-Dokument zu parsen. Mit dem Unterprogramm aus diesem Listing könnenSie Namen, Namensraum und Attribute des DOM-Baumes anzeigen, nach-dem Sie das Dokument mit der Anweisung lr_node ?= lr_document einemKnoten 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 für 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: / 'Namensraumpräfix : ', lv_prefix. ENDCASE.

1362.book Seite 87 Donnerstag, 1. Oktober 2009 11:32 11

Page 28: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

XML-Library3

88

* Behandle den nächsten Knoten lr_node = lr_iterator->get_next( ). ENDWHILE.

Listing 3.9 Ausgabe der Namensrauminformationen für den Knoten iv_node

Im Folgenden werden drei XML-Dokumente betrachtet, die sich nur in derArt der Namensraumdefinition unterscheiden, im Übrigen aber denselbenInhalt haben.

� Das folgende XML-Dokument definiert im Element Wurzel zwei Namens-raumpräfixe, die in den Kindelementen verwendet werden:

<Wurzel xmlns:nr1="urn:Namensraum1" xmlns:nr2="urn:Namensraum2" > <nr1:Element/> <nr2:Element/> <Element/></Wurzel>

Für beide betrachteten Parser-Modi – co_prefix_aware und co_

namespace_aware – sind die Ausgaben des Unterprogramms in Listing 3.9für dieses XML-Dokument identisch und werden in Tabelle 3.1 darge-stellt.

� Das folgende XML-Dokument ist äquivalent zum vorangegangenen, eswurden lediglich die Namensraumpräfixe im Element Wurzel umdefiniert:

<Wurzel xmlns:nr1="urn:Namensraum2" xmlns:nr2="urn:Namensraum1" xmlns:empty=""> <nr2:Element/> <nr1:Element/> <empty:Element/></Wurzel>

XML-Element Namensraumpräfix URI

Wurzel

Element nr1 urn:Namensraum1

Element nr2 urn:Namensraum2

Element

Tabelle 3.1 Ausgabe bei Namensraumdeklaration mit Präfixen

1362.book Seite 88 Donnerstag, 1. Oktober 2009 11:32 11

Page 29: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Unterstützung von Namensräumen 3.7

89

Wieder erzeugen beide Parser-Modi dasselbe Resultat, die Namensraum-präfixe unterscheiden sich aber verglichen mit Tabelle 3.1 (siehe Tabelle 3.2).

Verzichten Sie auf explizite Namensraumpräfixe und definieren Default-Namensräume für jedes Element Element, sieht das XML-Dokument fol-gendermaßen aus:

<Wurzel> <Element xmlns="urn:Namensraum1"/> <Element xmlns="urn:Namensraum2"/> <Element xmlns=""/></Wurzel>

Das Ergebnis ist wieder für beide Parser-Modi identisch, und es fehlen,wie erwartet, die Namensraumpräfixe (siehe Tabelle 3.3).

� Im letzten Fall definieren Sie für jedes Element Element ein eigenesNamensraumpräfix:

<Wurzel> <nr1:Element xmlns:nr1="urn:Namensraum1"/> <nr2:Element xmlns:nr2="urn:Namensraum2"/> <empty:Element xmlns:empty=""/></Wurzel>

XML-Element Namensraumpräfix URI

Wurzel

Element nr2 urn:Namensraum1

Element nr1 urn:Namensraum2

Element empty

Tabelle 3.2 Ausgabe bei Redefinition der Namensraumdeklaration

XML-Element Namensraumpräfix URI

Wurzel

Element urn:Namensraum1

Element urn:Namensraum2

Element

Tabelle 3.3 Ausgabe bei Namensraumdeklaration ohne Präfixe

1362.book Seite 89 Donnerstag, 1. Oktober 2009 11:32 11

Page 30: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

XML-Library3

90

Auch hier ist das Resultat für beide Parser-Modi identisch (siehe Tabelle 3.4).

Für die Namensraumunterstützung der XML-Library kann damit folgendesFazit gezogen werden: Wollen Sie ein XML-Element anhand seines Namensund seines Namensraums identifizieren, müssen diese unterschiedlichenMöglichkeiten der Definition des Namensraums beachtet werden.3 Sie sehenan diesen Beispielen, dass nur die Namensraum-URI verlässliche Auskunftüber den Namensraum geben kann, da Namensraumpräfixe beliebig gewähltwerden können. Gerade in Datenaustauschverfahren mit externen Partnernwerden Sie häufig nicht wissen, welche Namensraumdefinition gewähltwird.

3.7.2 Elementidentifikation mit Namensräumen

Über die Methode find_from_path_ns( ) lässt sich ein Element im DOM-Baum eines geparsten XML-Dokumentes mit einem eingeschränkten XPath-Ausdruck suchen. Betrachten Sie dazu noch einmal das Beispiel mit einemElement Wurzel, das ohne Namensraum definiert ist:

<Wurzel xmlns:nr1="urn:Namensraum1" xmlns:nr2="urn:Namensraum2" > <nr1:Element/> <nr2:Element/> <Element/></Wurzel>

XML-Element Namensraumpräfix 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 denverschiedenen APIs wie DOM und SAX wurde schnell die Namensraumunterstützung nach-gezogen, allerdings in uneinheitlichen Notationen, was in der XML-Library vermiedenwurde. In der Spezifikation von XML Schema wurde das Thema Namensräume wiederangegangen.

1362.book Seite 90 Donnerstag, 1. Oktober 2009 11:32 11

Page 31: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

Ereignisbasiertes Parsen 3.8

91

Bei der Parser-Einstellung co_namespace_aware lässt sich das Elementnr1:Element mit der folgenden Anweisung identifizieren:

l_var_node = document->find_from_path_ns( default_uri = '' path = '/Wurzel/urn:Namensraum1:Element' ).

Da Namensraumpräfixe im XML-Dokument beliebig definiert werden kön-nen, wird hier konsequenterweise mit URIs gearbeitet. Diese werden entwe-der explizit vor den Elementnamen geschrieben oder für alle nicht qualifi-zierten Elemente im Parameter default_uri spezifiziert. Wenn die URIeinen Schrägstrich (/) enthält, müssen Sie den ganzen Ausdruck (Namens-raum-URI und Elementname) in Anführungszeichen setzen, beispielsweisefür das Ansprechen der Wurzel root eines Dokumentes im Namensraumhttp://www.example.org:

'/"http://www.example.org:root"'

3.8 Ereignisbasiertes Parsen

Eine Schwäche von DOM zeigt sich bei der Hauptspeicherdarstellung einesXML-Dokumentes, da die Größe ein Vielfaches des ursprünglichen Doku-mentes beträgt. Für die Verarbeitung großer XML-Dokumente eignen sichereignisbasierte Verarbeitungsmethoden. SAP bietet hierfür eine Umsetzungder Simple API for XML (SAX) an.

Verglichen mit der Java-Implementierung dieser API, wie sie zum Beispielim 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 behält die Kon-trolle über das Parsen, indem über die Methode parse_event( ) das nächsteEreignis im XML-Eingabestrom abgefragt wird. Dies wird nun im Detailbeschrieben.

3.8.1 SAX-Schnittstelle

Beim ereignisbasierten Parsen geht der XML-Parser sequenziell über dasXML-Dokument und meldet sogenannte Events, die dem Parser vorher mit-geteilt werden müssen. 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 für den Start des Dokumentes, fürVerarbeitungsanweisungen, Elemente, Attribute, DTD-Bereiche, Textinhalte

1362.book Seite 91 Donnerstag, 1. Oktober 2009 11:32 11

Page 32: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

XML-Library3

92

etc. Für jeden dieser Inhalte existiert ein korrespondierendes, von IF_IXML_NODE abgeleitetes Interface, mit dem auf den Inhalt des entsprechendenXML-Knotens zugegriffen werden kann, der durch ein Ereignis gemeldetwurde.

Im Programmbeispiel in Listing 3.10 wird nur das Ereignis co_event_element_pre2 behandelt. In der Hauptverarbeitungsschleife werden überdie 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, können Sie auf den Elementnamen und dieAttribute zugreifen, aber nicht auf den Text. Eine solche Vorgehensweise istbei attributorientierter Codierung von XML-Daten ausreichend: Elementeenthalten 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 für den Eingabestromlr_factory = lr_ixml->create_stream_factory( ).* Erzeuge den Eingabestromlr_istream = lr_factory->create_istream_string( string = l_var_xmldata ).* Erzeuge ein temporäres 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(

1362.book Seite 92 Donnerstag, 1. Oktober 2009 11:32 11

Page 33: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

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 nächste 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 derVaterelemente bis hin zum Wurzelelement über lr_node->get_parent( )zugegriffen werden.

3.8.2 Fallstricke

Die XML-Spezifikation sieht vor, dass Sie spezielle Abschnitte definierenkönnen, in denen Zeichen wie das kaufmännische Und (&) oder das Kleiner-Zeichen (<) nicht mehr mit &amp; oder &lt; codiert werden müssen. DieseAbschnitte beginnen mit <![CDATA[ und enden mit ]]>:

<![CDATA[ Hier können beliebige Zeichen stehen, aber auch <Element> ]]>.

Diese Texte müssen über die Events co_event_cdata_section_pre undbeim Event co_event_cdata_section_post, bearbeitet über die MethodegetValue( ), gelesen werden.

Die SAX-Spezifikation sieht grundsätzlich nicht vor, dass ein zusammenhän-gender Text genau durch ein Ereignis co_event_text_pre und co_event_text_post eingeleitet bzw. abgeschlossen wird, obwohl die meisten Parserdies 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 häufiger wird dieser Fall vorkommen: Ein Textinhalt eines

1362.book Seite 93 Donnerstag, 1. Oktober 2009 11:32 11

Page 34: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

XML-Library3

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 können Sie erkennen, dass die Verwen-dung der XML-Library mit einem programmiertechnischen Overhead ver-bunden ist. Das betrifft die immer wiederkehrenden Standardoperationenzum Erzeugen von Stream-Objekten.

Um nicht ständig diese wiederkehrenden Operationen entwickeln zu müs-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 demWorkflow-XML-Framework des AS ABAP. Hier hat SAP eine Reihe von Stan-dardfunktionen für wiederkehrende Operationen entwickelt, sodass derZugriff auf die XML-Library völlig gekapselt ist.

Es kann die Programmierung sehr vereinfachen, wenn für die Zugriffe aufXML-Dokumente auf dieselbe Weise vorgegangen und, wie in Abbildung 3.2beschrieben, der Zugriff verschalt wird: Eine Instanz der Klasse ZCL_GENERIC_DOCUMENT repräsentiert ein XML-Dokument und stellt gleichzeitigeine Reihe von Methoden zur Verfügung:

� Die Methode export_to_file( ) ermöglicht den Download auf denApplikations- oder Präsentationsserver.

� Die Methode parse_string( ) instanziert das Objekt, indem ein String indas Attribut m_cl_ixml_document (eine Instanz von IF_IXML_DOCUMENT)gelesen wird.

� Die Methode import_form_file( ) realisiert die Instanzierung durcheinen Upload vom Applikations- oder Präsentationsserver.

� Die Methode find_node( ) dient der Identifizierung eines XML-Elementes.

� Die Methode get_node_name( ) liefert den Namen eines XML-Elementes.

Prüfung nach Wohlgeformtheit

Beachten Sie, dass die XML-Library nicht in voller Strenge die Wohlgeformtheitvon XML-Dokumenten überprüft, zum Beispiel lässt sie doppelte Attributnamen ineinem XML-Element zu.

1362.book Seite 94 Donnerstag, 1. Oktober 2009 11:32 11

Page 35: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

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( ) fügt ein anderes Dokumentunterhalb eines Knotens als Kind ein.

Abbildung 3.2 Mögliche Service-Klassen zum Zugriff auf XML-Dokumente

Diese an die Klasse CL_XML_DOCUMENT_BASE angelehnte Klasse kann fürbestimmte Dokumententypen abgeleitet werden. In Abbildung 3.2 wurdediese Klasse abgeleitet, um spezielle Funktionen für EDI-Dokumente (KlasseZCL_EDI_MESSAGE und Unterklassen) und in XML-codierte Testfälle (KlasseZCL_TESTCASE) umzusetzen.

Eine solche Vorgehensweise ist expliziter und sauberer als die Verwendungder nicht freigegebenen Klasse CL_XML_DOCUMENT des AS ABAP, zumal vieleder dortigen Funktionen wie die Persistenzmethoden load( ) oder save( )rein workflowspezifisch sind.

()()

()()

()

+ validate()

()

1362.book Seite 95 Donnerstag, 1. Oktober 2009 11:32 11

Page 36: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

279

Index

A

ABAPKurzdump 242Proxy 218

ABAP Debugger 99ABAP Serialization XML � asXMLABAP Unit 193Abnahmeklasse

CX_INVALID_TRANSFORMATION 117

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

231CX_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 77Architektur, serviceorientierte 218asXML 33, 39, 123, 160, 224Asynchronous JavaScript and XML 15,

25Attributwert-Template 120Ausdruck, regulärer 28, 56, 213, 220Ausnahme, verkettete 123

B

BAPI 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 20Business Server Page � BSP

C

CALL TRANSFORMATION 75, 115, 125, 151

Canonical XML 39CDA 17, 58CDATA

Abschnitt 94CDATA-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

1362.book Seite 279 Donnerstag, 1. Oktober 2009 11:32 11

Page 37: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

280

Index

CL_GUI_TEXTEDIT 232CL_HTTP_CLIENT 243CL_IXML 72, 76CL_IXML_OSTREAM 139CL_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, 258Content-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 18Datenintegration 239Datenstrom, XDF 261Datentyp

komplexer 54XSDBOOLEAN 125XSDDATETIME_Z 125XSDLANGUAGE 125XSDUUID_CHAR 126

Deserialisierung 151DNS 37DocBook, Format 47Doctype, Deklaration 86Document Object Model � DOMDocument Type Definition � DTDDokumententyp, Deklaration 33DOM 72, 79, 82

Baum 72, 79, 87, 139, 145, 150Domain Name System 37domänenspezifische Sprache 226DSL � domänenspezifische 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 145End-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, 260großes XML-Dokument 101group-adjacent() 139group-by() 139group-ending-with() 139group-starting-with() 139gXML 18

1362.book Seite 280 Donnerstag, 1. Oktober 2009 11:32 11

Page 38: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

281

Index

H

Handler-Klasse 242Head-Body-Pattern 106, 259HL7 Messages 19HTML 32, 45HTTP-Request 242Hülle, transitive 267, 274

I

ICF 24, 78, 215, 258Handler 215, 216, 242

IDoc, Schnittstelle 19Impact-Analyse 264indirekte Verwendung 263Individualdruck 237Inferenzmaschine 274Inhaltsmodell

gemischtes 104, 260nicht deterministisches 57, 160

Inside-out 24Intelligenz, künstliche 274Interface

IF_HTTP_CLIENT 242IF_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 Framework � ICF

Internet Connection Framework � ICFISO

8601 618859-1 36

Item 129iXML, Library 71

J

Java 148JavaScript, ABAP 246JSON 26

K

kanonische XML-Repräsentation 33Knoten, aktueller 153Kollektion 160komplexer Datentyp 54künstliche Intelligenz 274Kurzdump 242

L

Legacy System Migration Workbench 142

Link, einfacher 45literaler Text 162, 187LSMW 142

M

Makro, Verwendung 27Markup 18, 28, 35Mashup 62Massendaten 150Medientyp 242Memory Inspector 22Metadaten 239Metainformation 240, 249modellgetriebene Programmierung 232Muster 168, 173

1362.book Seite 281 Donnerstag, 1. Oktober 2009 11:32 11

Page 39: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

282

Index

N

Namensraum 34, 37, 39, 55, 86, 87, 91, 130, 188, 258Achse 130Attribut 34Knoten 49Präfix 38, 65, 89, 188URI 37

Newsreader 41nicht deterministisches Inhaltsmodell

57, 160Nodeset 129

O

OASIS Open Document Format for Office Applications 42

ODF 42ODT 42, 237Online Text Repository 131Ontologie 63, 263, 264, 273

Generierung 269OOXML 237Open World Assumption 68OpenDocument-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, 237Pretty 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 256Visualisierung 257

RDFS 63Reader-Klasse 98Really Simple Syndication � RSSReasoner 240, 267Reasoning 264Records Modeler 21Redirect 258regexp, test() 213regulärer Ausdruck 28, 56, 213, 220Rekursion 101rekursive Programmierung 100Relax NG 58Representational State Transfer 24Resource Description Framework � RDFRessource 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

1362.book Seite 282 Donnerstag, 1. Oktober 2009 11:32 11

Page 40: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

283

Index

RSS-Reader 241Ruby on Rails 219

S

S_MEMORY_INSPECTOR 22SAP NetWeaver 19SAP NetWeaver Process Integration 20SAP Records Management 21SAP Smart Forms 23, 261SAP XML Toolkit for Java 91SAPlink 23SAX 91

Spezifikation 93Schemasprache 31Schematron 58, 60, 202, 232Schnittstelle � InterfaceSCI 250Semantic Web 63, 239, 240Semantic Wiki 240semantischer Webservice 250semistrukturierte Daten 18, 21Sequenz 129Serialisierung 33, 151serviceorientierte Architektur 218Simple API for XML � SAXSimple Transformations 107, 149, 242,

269ABAP-Struktur 156Attribut 156Ausdrucksstärke 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, 179Symmetrie 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, 186tt: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, 181tt: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, 183tt:with-parameter 186tt:with-root 186tt:write 162, 181Unter-Template 152Variable 161Vorbedingung 165, 166Whitespace 187Wiederholungsgruppe 177Zusicherung 166

Singleton-Objekt 76SLG1 241SM02 241

1362.book Seite 283 Donnerstag, 1. Oktober 2009 11:32 11

Page 41: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

284

Index

SM13 241SM58 241SM66 241SOA 218SOAMANAGER 24SOAP, Webservice 23, 218Sprache, domänenspezifische 226SpreadsheetML 233SRMREGEDIT 22ST01 241ST02 241ST22 242Standard-Codepage 36, 82Standardserialisierung 172Start-Tag 34, 35, 39Streaming Transformations for XML 30String-Operation 27Stylesheet Level 147SVG 17, 44, 259

svg:line 45svg:rect 45svg:svg 45svg:text 45

SWEL 241SXML

Knoten-Parser 103Parser 97, 101Reader 99Writer 99

SXML-API, Vorteil 105symmetrische Fallunterscheidung 173Syntaxbaum, abstrakter 144Systemnachricht 241Systemprotokoll 241

T

TABLES-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 105Transaktion

SCI 250SLG1 241SM02 241SM13 241SM58 241SM66 241SOAMANAGER 24SRMREGEDIT 22ST01 241ST02 241ST22 242SWEL 241WE07 241

Transformation 31, 254, 262, 263AS ABAP 264Fakten 270Generierung 207

transitive Hülle 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

253Vorbedingung 165

1362.book Seite 284 Donnerstag, 1. Oktober 2009 11:32 11

Page 42: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

285

Index

W

W3C 31WE07 241Web 2.0, Anwendung 25Web Dynpro 25Web Ontology Language � OWLWeb Services Description Language 23,

56Weblog 41Webservice 24

REST 24semantischer 250SOAP 23

Whitespace 34, 74, 77, 142Wissensmanagement 240Wissensrepräsentation 240, 274Wohlgeformtheit 35, 36, 94WordML 42, 235Workprozess-Status 241World Wide Web Consortium 31Writer-Klasse 98WSDL 23, 56Wurzelelement 35, 54, 82

X

XDF-Datenstrom 261XHTML 45, 66, 258XLink 45, 220

xlink:actuate 46xlink:href 46xlink:show 46xlink:type 46

XML 15ABAP-Anwendung 21ABAP-Entwicklung 22Anwendungsintegration 19Datenaustausch 19Deklaration 32, 37, 144Header 116Information Set 39Integration von Metadaten 258Integrationstechnologie 23Kommentar 35Serialisierung 25Tag 34Ursprung 16

Version 32Vokabular 17, 40

XML Encryption 30XML Schema 30, 53, 79, 125, 134, 160,

259einfacher Datentyp 56Familienkonzept 261gemischtes Inhaltsmodell 260Modularisierung 58, 61, 260xs:annotation 54xs:any 55, 259xs:anyAttribute 57xs:restriction base 56xs:sequence 54xs:string 56

XML Signature 30XML-Dokument

Erzeugung 27großes 101Parsen 29Processing Instruction 104

XML-Library 71Datenstrom 78DOM 79DOM-API 79ereignisbasiertes Parsen 91Filter 74Iterator 74, 87Namensraumunterstützung 90Parser-Modus 88SAX-API 91Validierung 83XPath-Unterstützung 80

xmlnsAttribut 37

XML-Repräsentationkanonische 33

XPath 48, 59, 76, 79, 90, 110, 129, 272Achse 49Funktion 49, 134Prädikat 49sap:abs 127, 147sap:acos 127sap:asin 127sap:atan 127sap:column 111sap:concat 142sap:cos 127sap:ends-with 128

1362.book Seite 285 Donnerstag, 1. Oktober 2009 11:32 11

Page 43: XML f¼r ABAP-Entwickler (PDF) - SAP PRESS

286

Index

sap:escape-uri 129sap:exp 127sap:find-first 128sap:find-first-of 129sap: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 130sap: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 139sap: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 43fo:root 43

XSLT 46, 109, 250, 270, 273ABAP-Erweiterung 117, 146asXML-Repräsentation 123Aufruf aus ABAP 115Ausgabeformatierung 141, 142Ausnahmebehandlung 122benanntes Template 101, 145, 197Debugger 112dynamischer Template-Aufruf 196

function-available() 133Integration 97Java-Erweiterung 148Konformität in Version 2.0 109, 127,

134, 135, 139, 141, 147plattformunabhängige Transformation

147rekursive Programmierung 100sap:call-external 118, 119, 120sap:callvalue 119sap:callvariable 120sap:external-function 118, 121, 122,

215SAP-Prozessor 133SAP-spezifische Erweiterung 127Tester 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 133xsl: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 236xsl:result 134xsl:transform 198xsl:value-of 47xsl:with-param 147

Z

Zeichensatz 145Zusicherung 165

1362.book Seite 286 Donnerstag, 1. Oktober 2009 11:32 11