XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet
Transcrição
XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet
Seminar 1905 Thema 9 [FernUniversität Hagen] XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Wintersemester 2000/2001 16. März 2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Dieser Seminarbeitrag soll mögliche Vorgehensweisen und verschiedene Modelle beschreiben mit denen die XML-Technologie für Datenbankanwendungen im Internet genutzt werden kann. Es wird eine Übersicht gegeben, welche Hersteller von Standarddatenbanken XML unterstützen und einige konkrete Beispiele gegeben. Inhaltsverzeichnis Inhaltsverzeichnis .......................................................................................................................2 1 Einführung ...............................................................................................................................3 1.1 Themenbeschreibung/Motivation.........................................................................................3 1.2 Vorteile von XML ................................................................................................................3 1.3 XML-Einsatzmöglichkeiten (Architekturmodelle) ..............................................................4 1.4 Auf der Suche nach Standards für XML und Datenbanken ..........................................9 2 Grundlagen ............................................................................................................................11 2.1 Abbildung XML <-> Datenbank-Strukturen......................................................................11 2.2 Datenbankexport nach XML ..............................................................................................20 2.3 XML-Import in Datenbanken .............................................................................................24 2.4 Java und XML-Parser.........................................................................................................27 2.5 XML-Darstellung ...............................................................................................................29 2.6 Datenbank-Benutzeranfragen .............................................................................................30 2.7 XML-Dokumente mit gemischtem Inhalt (BLOB,CLOB) ................................................31 2.8 XML Query ........................................................................................................................32 3 XML-Einsatz in Datenbanken-Applikationen.......................................................................34 3.1 Übersicht Datenbank-Hersteller und -Produkte .................................................................34 3.1.1 IBM DB2 XML Extender................................................................................................35 3.1.2 Oracle 8i/9i, XML SQL Util, XSQL ...............................................................................37 3.1.3 Microsoft SQL Server, Access ........................................................................................38 3.1.4 Tamino XML Database ...................................................................................................38 3.1.5 Verschiedene Datenbank-Hersteller ................................................................................39 3.2 Microsoft SQL 2000 ...........................................................................................................40 3.2.1 Begriffe ............................................................................................................................40 3.2.2 Lesezugriffe DB->XML ..................................................................................................43 3.2.3 Schreibzugriffe XML->DB .............................................................................................46 3.2.4 Stylesheets .......................................................................................................................51 3.2.5 Security............................................................................................................................54 3.2.6 Performance.....................................................................................................................55 3.2.7 Entwicklung/AddOns ......................................................................................................56 3.2.8 Einsatz in Linux-/Unix-Umgebungen .............................................................................56 3.3 Oracle 8i/9i XML-SQL Utility (XSU) ...............................................................................57 3.3.1 XSU Funktionsprinzip.....................................................................................................58 3.3.2 XSU Command Line Front End ......................................................................................63 3.3.3 XSU Java API..................................................................................................................65 3.3.4 XSU PL/SQL...................................................................................................................71 3.4 Bewertung...........................................................................................................................73 4 Demo .....................................................................................................................................75 4.1 Microsoft SQL 2000 ...........................................................................................................75 4.2 Oracle XSQL Servlets ........................................................................................................75 Literaturverzeichnis ..................................................................................................................76 Seite 2 von 2 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 1 Einführung In diesem Kapitel wird eine kurze Einführung in das Thema im Hinblick auf die Vorteile und die Einsatzmöglichkeiten von XML in Datenbankanwendungen im Internet gegeben 1.1 Themenbeschreibung/Motivation 1.2 Vorteile von XML 1.3 XML-Einsatzmöglichkeiten (Architekturmodelle) 1.4 Auf der Suche nach Standards für XML und Datenbanken 1.1 Themenbeschreibung/Motivation XML (eXtensible Markup Language) ist ein von dem WorldWideWeb-Consortium (W3C) entwickelter Standard, eine Metasprache, mit der man Auszeichnungen (Markups) zu Dokumenten hinzuzufügen kann, um deren Struktur zu beschreiben. Das Ziel dieser Bemühungen ist nicht die Präsentation, sondern die Abbildung semantischer Hierarchien. XML ermöglicht es, als ein für den Informationsaustausch nutzbares Format, interne Unternehmensdaten, über Systemgrenzen und Plattformen hinweg, im Internet nutzbar zu machen. Im Prinzip soll es also der Standard der Zukunft sein um reine Informationen in einfacher strukturierter Form für das Internet verfügbar zu machen. Es liegt also nahe XML im Zusammenhang mit der Darstellung von Datenbankinformationen in Internetbasierten Anwendungen zu verwenden. Dies haben auch diverse Hersteller von Standard-Datenbanken erkannt und unterstützen mehr oder weniger direkt XML (u.a. Microsoft, IBM und Oracle). Dieser Seminarbeitrag soll mögliche Vorgehensweisen und verschiedene Modelle beschreiben mit denen die XML-Technologie für Datenbankanwendungen im Internet genutzt werden kann. © 2001Ute Stegmann 1.2 Vorteile von XML Grundsätzlich sprechen folgende Gründe für den Einsatz von XML: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. XML ist ein offener Standard mit hoher Akzeptanz. XML ermöglicht eine klare Trennung zwischen Daten und Präsentation. XML ist textorientiert. XML ist erweiterbar. XML ist selbstbeschreibend. XML ist internationalisierbar. XML ist plattform- und programmiersprachenunabhängig. XML ist maschinell verarbeitbar. XML ist geeignet für langfristige Datenablage. XML ist leicht transformierbar. In [FM1] ist über den Vorteil durch den XML-Einsatz in Verbindung mit Datenbankanwendungen im Internet folgendes zu lesen: "Gegenüber allen bisher angesprochenen Verfahren und Möglichkeiten weist die XML-Technologie einige bemerkenswerte Vorteile bei der Veröffentlichung von Datenbankinhalten in Netzwerken auf: Seite 3 von 3 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 1. Der gravierendste Vorteil ist die Geschwindigkeit. XML ist deutlich schneller, da viele Aufgaben vom Client-Rechner bearbeitet werden und den Datenbankserver spürbar entlasten. Der Server empfängt die Abfrage und sendet seine Antwort nahezu in Rohdaten zurück. Es ist keinerlei CPU-Zeit des Servers für die aufwendige Umrechnung der Daten in das vom Client zur Anzeige benötigte HTML-Format notwendig. Die Formatierung eines einzigen HTMLDokuments ist zwar keine besonders aufwendige Sache. Wenn aber mehrere Tausend Dokumente formatiert werden müssen, geht jedem Server früher oder später die Leistung aus. Wenn diese Aufgabe dagegen von jedem einzelnen Client-Rechner parallel übernommen wird, ist die Arbeit gleichmäßig und in geringerem Umfang auf die jeweiligen Prozessoren verteilt. Selbst leistungsstarke Server profitieren von dieser gleichmäßigen Lastverteilung. 2. XML ist als offener Industriestandard eine hervorragend dokumentierte, häufig genutzte und weit verbreitete Technologie, für die es eine Vielzahl Third-Party Produkte und Unterstützung gibt: Software, Bücher, technische Unterlagen und vieles mehr. Das Erlernen wie auch die Nutzung von XML geschieht mit diesen Hilfsmitteln so einfach, problemlos und schnell wie bei keiner anderen der hier vorgestellten Technologien. Darüber hinaus wird der Datenaustausch zwischen Individuen, Unternehmen, Händlern, Kunden, Partnern und deren Datenbanken zu einer leichten Übung – die Verwendung der gleichen Technologie macht es möglich. XML ist übergreifende Plattform, Datenbank und Programmsprache in einem. XML kann daher .. .. eingesetzt werden, ohne dass Probleme beim Datenaustausch zwischen den Systemen auftreten. 3. Ein zusätzlicher Vorteil von XML in heterogenen Welten wie dem Internet ist, dass XMLDokumente zum größten Teil selbstbeschreibend sind. Wenn zum Beispiel eine Seite die Zeichenfolge <person> <last> Naeve </last> <first> Andrea </first> </person> enthält, erkennen wir sofort den Vornamen „Andrea“ und den Nachnamen „Naeve“ einer Person, die in einer Datenbank gespeichert ist. Mit einem Schema wie DTD oder entsprechenden Kommentaren wird die Identifizierung solcher Zeichenketten bzw. Daten noch eindeutiger. Weniger flexible Formate wie HTML oder Tabulator-orientierter Text weisen solche Möglichkeiten nicht auf." © 2001Ute Stegmann 1.3 XML-Einsatzmöglichkeiten (Architekturmodelle) Nachfolgend sehen Sie einen Überblick möglicher XML-Architekturen, wie sie in [Quin] dargestellt sind. Zusammen mit den bereits in Kapitel 1.2. dargestellten Vorteilen von XML werden damit die vielfältigen Einsatzmöglichkeiten von XML im Zusammenhang mit Datenbankanwendungen im Internet deutlich. XML zur Datensicherung und für den Datentransport Seite 4 von 4 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann XML als Hub Format XML zum Datenaustausch mit anderen Organisationen Seite 5 von 5 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann XML für Publikationen XML zum Datenaustausch zwischen Anwendungen Seite 6 von 6 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann XML als ein Format zur Darstellung von Informationen in Web-Seiten Seite 7 von 7 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Anwendungsbeispiel: XML-Daten werden durch mehrere Instanzen bearbeitet Quelle: Software AG Anwendungsbeispiel: XML-Data-Warehouse Quelle: Internet © 2001Ute Stegmann Seite 8 von 8 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 1.4 Auf der Suche nach Standards für XML und Datenbanken Ein Vorteil von XML ist, wie bereits erwähnt, dass es sich um einen Standard handelt. Bei der Informationsbeschaffung für diesen Seminarbeitrag haben wir festgestellt, dass XML von fast allen wichtigen Datenbankherstellern in irgendeiner Form unterstützt wird. Wobei in nächster Zeit noch einige Veränderungen bezüglich Integrationstiefe zu erwarten sind oder gerade umgesetzt werden. Was wir nicht gefunden haben, ist ein einheitlicher Standard, der bei allen Datenbanken in gleicher Weise funktioniert. Dies ist sicherlich einerseits darauf zurückzuführen, dass XML noch nicht alt ist. Andererseits scheint hier das Bestreben der kommerziellen Datenbankhersteller eher in die Richtung zu gehen sich von der Konkurrenz abzusetzen und ihre XML-Unterstützung als die bessere Variante zu verkaufen. Für profesionelle Softwareentwickler, die verschiedene Datenbankplattformen unterstützen müssen, ist also der Einsatz universeller XML-Parser, die verschiedene Datenbanken bedienen können, zur Zeit wohl noch der bessere Weg. Abschließend möchte ich zu diesem Thema bezüglich der Definitionen von Standards durch das WWW-Konsortiums zu XML-Query (oder heißt es nun XQL?), der als Standard gedachten Abfragesprache für XML-Dokumente (kleines Beispiel siehe 2.1.), noch einen von mir anonymisierten Auszug aus einer öffentlichen Newsgroup wiedergeben, den ich eher zufällig gefunden habe. (Hinweis: die Einträge sind von unten nach oben zu lesen) Meine Fragen und alle in diesem Zusammenhang getroffenen Aussagen bezogen sich ausschliesslich auf die proprietäre XMLAnfragesprache der Software AG (X-Query). Für die unbewusste Verwendung des falschen Begriffes und die dadurch möglicherweise entstandene Verwirrung bitte ich um Entschuldigung! -----Ursprüngliche Nachricht----Von: Deutschsprachige XML Liste [mailto:[email protected]] ..... Gesendet: Mittwoch, 15. November 2000 18:22 An: [email protected] Betreff: Re: XML-Query in Tamino > > Gibt es eine Möglichkeit, mit XML-Query 'komplexe' Unterabfragen zu stellen > > wie: > > Gib mir dasjenige Land, in welchem der Gesamtumsatz höher ist als in allen > > anderen Ländern. Ich möchte klar stellen, daß mit "XML Query" [tm?] stets die Seite 9 von 9 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann in Enticklung befindliche XML Anfragesprache des W3C gemeint ist. Andere Sprachen wie X-Query (Software AG) oder XQL (z.B. Software AG, eXcelon, GMD-IPSI) sind proprietäre Anfragesprachen. Das W3C kann, wie im Standard-Disclaimer klar ausgesagt, keine Rücksicht auf frühe Implementationen und Produkte nehmen. Es kann sein oder es kann nicht sein, das "XML Query" Ähnlichkeit mit X-Query, XQL o.ä. hat. Aussagen darüber dürfen nicht öffentlich gemacht werden (W3C nondisclosure agreement). Das betrifft alle Aspekte von Syntax, Semantik und Funktionsumfang. > dito > > > Ist es überhaupt möglich, diese Fragen mit XML-Query zu formulieren? > Ja und bald kriegt man auch die Antwort, die man verdient Die offiziellen Antworten finden sich auf: http://www.w3.org/XML/Query (non-member) http://www.w3.org/XML/Group/Query (W3C-member) Alles andere ist spekulativ bzw. produktspezifisch. ..... Anmerkungen: Eine kurze Vorstellung der Tamino XML Database finden Sie übrigens in Kapitel 3.1]. © 2001Ute Stegmann Seite 10 von 10 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 2 Grundlagen In diesem Kapitel versuchen wir einen Überblick über die im Zusammenhang mit dem XML-Einsatz in Datenbank-Anwendungen relevanten Techniken bzw. Technologien zu geben. 2.1 Abbildung XML <-> Datenbank-Strukturen 2.2 Datenbankexport nach XML 2.3 XML-Import in Datenbanken 2.4 Java und XML-Parser 2.5 XML-Darstellung 2.6 Datenbank-Benutzeranfragen 2.7 XML-Dokumente mit gemischtem Inhalt (BLOB,CLOB) 2.8 XML Query Anmerkung: Für weitere Grundlagen über Datenbanken und Internet verweisen wir an dieser Stelle auf die anderen Seminarbeiträge (S1905 WS 2000/2001 FernUni Hagen). 2.1 Abbildung XML <-> Datenbank-Strukturen Bevor ich zu der Frage komme, wie sich XML-Strukturen in Datenbank-Strukturen abbilden lassen oder anders gesagt Informationen aus XML-Dokumenten in Datenbankinhalte überführt werden können - und umgekehrt, sollen zunächst zwei grundsätzliche Punkte geklärt werden. • • Welche strukturellen Gemeinsamkeiten bestehen zwischen XML-Dokumenten und Datenbanken? Lassen sich XML-Dokumente auf Grund typischer Merkmale in verschiedene Klassen einteilen und welchen Einfluß hat das auf die Art der Abbildung der Daten in Datenbanken? Der erste Frage läßt sich recht einfach beantworten in dem man sich ein paar Stichpunkte klar macht. Sowohl in Datenbanken als auch in XML-Dokumente werden Informationen in strukturierter Form gespeichert. [ROBOU1] zählt weitere Punkte auf. Es gibt beschreibende Schemata zu den Informationen. Für XML sind das z.B. die Document Type Definitions (DTD) und als Beispiel in relationalen Datenbanken sind die Strukturen unter anderem in Tabellen festgelegt. Es gibt Abfragesprachen wie SQL für relationale Datenbanken und XML Query Language für XML. Und auch Programmierschnittstellen wie SAX oder DOM für XML verdeutlichen die Gemeinsamkeiten mit Datenbanken. [ROBOU1] stellt sogar die Frage "Is XML a Database" und beantwortet sie so: "In strictest sense -- .. -- it is no. .. In more liberal sense – that is, when "XML" means an XML Document and all surrounding XML tools and technologies – then the answer is yes, but .. .. but because it lacks many of things found in real databases: efficient storage, indexes, security, transaction and data integrity, multi-user access triggers ... So while it may be possible to use XML as a database in envirenments with not too much data, few users, and modest performance requirements, it will be fail in most production environments, which have many users, strict data integrity requirements, and the need for good performance. Furthermore, given the low price and ease of use of databases like dBase and Access, there seems little reason to use XML as a database even in the first case. Seite 11 von 11 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Die Diskussion, ob man XML-Dokumente als Datenbank nutzen kann, habe ich auch einmal in einer Newgroups gefunden. Auch dort war man der Meinung "..ja, aber wozu?". Als kleines frei erfundenes Beispiel am Rande möchte ich zur Motivation des Themas das nachfolgende Beipiel geben. Gegeben sei folgendes "Mini-Lexikon mit Büchertips" einer kleinen Buchhandlung, die sich auf bestimmte Bücher spezialisiert hat und alle 3 Monate ein XML-Dokument an Interessenten versendet: <BOERSENLEXIKON> <EINTRAG> <BEGRIFF>Aktie</> <ERKLAERUNG>Anteil an einer Aktiengesellschaft .. </ERKLÄRUNG> </EINTRAG> <EINTRAG> <BEGRIFF>Börse</> <ERKLAERUNG>Handelsplatz für den Ankauf und Verkauf von.. </ERKLÄRUNG> </EINTRAG> .. <BOERSENLEKIKON> <BUECHERLISTE> <BUCH> <ISBN>XX-XXX-XXX</ISBN> <TITEL>Aktien und Optionsscheine.. </ERKLÄRUNG> <BESCHREIBUNG>Eine kompakte Zusammenfassung zum Handel mit Aktien und.. </BESCHREIBUNG> <AUTHOR>Börsenguru</AUTHOR> <PREIS>999,99 DM</PREIS> </BUCH> .. <BOERSENLEKIKON> Man kann sich nun in diesem Fall vorstellen, das ein solches Lexikon mit einem XML-Editor zu pflegen und dann die Datei komplett weiterzugeben, da der Inhalt sich nur selten ändert. Für die Interessenten bzw. Nutzer stellt sich allerdings die Frage nach einer Anwendung mit der sie bestimmte Leseanfragen durchführen können. Sie würden vielleicht gerne die Ergebnisse in Form einer Liste angezeigt bekommen, daraus Ergebnisse auswählen und diese dann lesen und ausdrucken. Man könnte sich z.B. folgende Anfragen vorstellen: Anzeige aller Bücher zum Thema Aktie sortiert nach Preis: SELECT * FROM BUECHERLISTE WHERE BESCHREIBUNG CONTAINS "Aktie" Anzeige Erklärungen zum Begriff Aktie: SELECT * BORSENLEXIKON WHERE BEGRIFF ="Aktie" (oder mit einer XML-Query etwa so: BOERSENLEXIKON/BEGRIFF = ‘Aktie‘ ) Seite 12 von 12 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Hätte die Buchhandlung also z.B. ein JAVA-Aplet mitgeliefert, daß solche Anfragen auf das XMLDokument umsetzt, so würde sich das ganze System für den Benutzer als Datenbank darstellen ohne daß er im Besitz einer Datenbanksoftware sein müßte. Er könnte die Anwendung ganz einfach offline in einem Browser laufen lassen. Die Verbindungen zwischen XML- und Datenbank-Strukturen dürften damit verständlich geworden sein. Nun zur Frage der typischen Merkmale von XML-Dokumenten und dem Einfluß auf die Art der Abbildung der Daten in Datenbanken. [Quin] zählt zur Abgrenzung der XML-Daten gegenüber Daten in Datenbanken die folgende Punkte auf: "The main ways that an XML document differs from the sort of data you find in "typical" relational databases include: • • • • • Fields and data are normaly intermixed (mixed content). Any document can have ist own schema, or DTD. Fields do not have length restriction. Fields can nest arbitrarily. Fields have a sequence" Am Ende dieses Abschnitt werden wir noch kurz auf die zu beachtenden Datentypen in XMLDokumenten näher eingehen. Zunächst komme ich nun aber zur Struktur von XML-Dokumenten. [ROBOU1] erläutert hierzu, der wichtigste Faktor bei der Auswahl einer Datenbank ist die Frage, ob man die Datenbank benutzt um Daten oder Dokumente zu speichern. Er unterscheidet dabei zwischen datenorientierten Dokumenten ("Data-Centric"), deren Schwerpunkt auf den Inhalten der einzelnen Strukturen liegt und dokumentorientierten Dokumenten ("Document-Centric"), bei denen das Dokument als ganzes betrachtet wird. Bei Dokument-orientierten XML-Dateien ist die Granularität das Dokument, bei Daten-orientierten XML-Dateien sind es Elemente, Attribute und Zeichenketten. Daten-orientiertes XML sind ferner durch eine relativ regelmäßige Struktur gekennzeichnet und ihre Strukturen sind normalerweise für die maschinelle Verarbeitung entworfen worden. Im Gegensatz dazu sind Dokument-orientierte XML-Dateien eher für den menschlichen Benutzer gemacht. Wir wollen die Aussageen an zwei Beispielen nachvollziehen. Beispiel 1: (Data-Centric Document aus [ROBOU1]) <Orders> <SalesOrder SONumber="12345"> <Customer CustNumber="543"> <CustName>ABC Industries</CustName> <Street>123 Main St.</Street> <City>Chicago</City> <State>IL</State> <PostCode>60609</PostCode> </Customer> <OrderDate>981215</OrderDate> Seite 13 von 13 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann <Line LineNumber="1"> <Part PartNumber="123"> <Description> <p><b>Turkey wrench:</b><br /> Stainless steel, one-piece construction, lifetime guarantee.</p> </Description> <Price>9.95</Price> </Part> <Quantity>10</Quantity> </Line> <Line LineNumber="2"> <Part PartNumber="456"> <Description> <p><b>Stuffing separator:<b><br /> Aluminum, one-year guarantee.</p> </Description> <Price>13.27</Price> </Part> <Quantity>5</Quantity> </Line> </SalesOrder> </Orders> Note that in the XML world, many prose-rich documents are, in fact, data-centric. For example, consider a page on Amazon.com that displays information about a book. Although the page is largely text, the structure of that text is highly regular, much of it is common to all pages describing books, and each piece of page-specific text is limited in size. Thus, the page could be built from a simple, data-centric XML document -- containing page-specific text retrieved from the database -and an XSL stylesheet that adds the boilerplate text. In general, any Web site that dynamically constructs HTML documents today by filling a template with database data can probably be replaced by data-centric XML documents and one or more XSL stylesheets. For example, the following lease document: <Lease> <Lessee>ABC Industries</Lessee> agrees to lease the property at <Address>123 Main St., Chicago, IL</Address> from <Lessor>XYZ Properties</Lessor> for a term of not less than <LeaseTerm TimeUnit="Months">18</LeaseTerm> at a cost of <Price Currency="USD" TimeUnit="Months">1000</Price>. </Lease> could be built from the following XML document and a simple stylesheet: <Lease> <Lessee>ABC Industries</Lessee> <Address>123 Main St., Chicago, IL</Address> <Lessor>XYZ Properties</Lessor> <LeaseTerm TimeUnit="Months">18</LeaseTerm> <Price Currency="USD" TimeUnit="Months">1000</Price> </Lease> Seite 14 von 14 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Beispiel 2: (Document-Centric Document aus [ROBOU1]) <Product> <Name>Turkey Wrench</Name> <Developer>Full Fabrication Labs, Inc.</Developer> <Summary>Like a monkey wrench, but not as big.</Summary> <Description> <Para>The turkey wrench, which comes in both right- and left-handed versions (skyhook optional), is made of the finest stainless steel. The Readi-grip rubberized handle quickly adapts to your hands, even in the greasiest situations. Adjustment is possible through a variety of custom dials.</Para> <Para>You can:</Para> <List> <Item><Link URL="Order.html">Order your own turkey wrench</Link></Item> <Item><Link URL="Wrenches.htm">Read more about wrenches</Link></Item> <Item><Link URL="catalog.zip">Download the catalog</Link></Item> </List> <Para>The turkey wrench costs just $19.99 and, if you order now, comes with a hand-crafted shrimp hammer as a bonus gift.</Para> </Description> Im ersten Beispiel kann man sich z.B. eine dazu passende Tabelle einer realtionalen Datenbank vorstellen. Bei der dokumentorientierten XML-Struktur wäre dies nicht so ohne weiteres eingängig und auch nicht unbedingt sinnvoll. Hier könnte man sich eher vorstellen das XML-Dokument als ganzes in einer Datenbank zu speichern. [ROBOU1] vertritt hierzu die These, daß der Einsatz von Content Management Systemen (CMS) im zweiten Fall allerdings wesentlich sinnvoller wäre. Nun zur eigentlichen Frage dieses Kapitels, der Abbildung der XML-Strukturen auf Datenbankstrukturen. Grundsätzlich kann man dabei zwischen der Template-gesteuerten und Modellgesteuerte Abbildung unterscheiden: Template-gesteuerte Abbildung Hierbei gibt es keine vordefinierte Zuordnung zwischen der Struktur des XML-Dokuments und der Datenbank-Struktur. Stattdessen werden entsprechende Kommandos in ein Template eingebettet, die dann von der für den Datentransport verantwortlichen Middleware verarbeitet werden. Seite 15 von 15 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Beispiel 3: (aus [ROBOU1]) For example, consider the following template (not used by any real product), in which SELECT statements are embedded in <SelectStmt> elements: <?xml version="1.0"?> <FlightInfo> <Intro>The following flights have available seats:</Intro> <SelectStmt>SELECT Airline, FltNumber, Depart, Arrive FROM Flights</SelectStmt> <Conclude>We hope one of these meets your needs</Conclude> </FlightInfo> When processed by the data-transfer middleware, each SELECT statement might be replaced by its results, formatted as XML: <?xml version="1.0"?> <FlightInfo> <Intro>The following flights have available seats:</Intro> <Flights> <Row> <Airline>ACME</Airline> <FltNumber>123</FltNumber> <Depart>Dec 12, 1998 13:43</Depart> <Arrive>Dec 13, 1998 01:21</Arrive> </Row> ... </Flights> <Conclude>We hope one of these meets your needs</Conclude> </FlightInfo> Diese Art der Abbildung kann sehr flexibel eingesetzt werden. [ROBOU1] schreibt hierzu: "For example, some products allow you to place result set values wherever you want in the result set -including using them as parameters in a subsequent SELECT statement -- rather than simply formatting the results themselves, as is shown above. Others support programming constructs such as for loops and if statements. And still others support parameterization of SELECT statements, such as through HTTP parameters." Template-gesteurte Abbildungen werden derzeit nur für die Überführung von Daten aus relationale Datenbanken in XML-Dokumente genutzt. Weitere Informationen hierzu finden Sie unter 2.2. und 2.6. Modell-gesteuerte Abbildung Bei einer Modell-gesteuerten Abbildung gibt es ein konkretes Modell nach dem die XML-Struktur implizit oder explizit auf die Datenbank-Struktur abgebildet wird. Zwei bekannte Modelle sind das Table Modell, bei dem ein XML-Dokument auf einzelne oder mehrere Tabellen einer realtionalen Datenbank abgebildet wird, und das datenspezifische ObjektModell, bei dem der XML-Baum direkt auf eine objektorientierte oder hierarchische Datenbank abgebildet wird. Seite 16 von 16 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Beispiel 4: Table Modell (aus [ROBOU1]) <database> <table> <row> <column1>...</column1> <column2>...</column2> ... </row> ... </table> ... </database> The term "table" is loosely interpreted to mean a single result set (when transferring data from the database to XML) or a single table or updateable view (when transferring data from XML to the database). If data from more than one result set is desired (when transferring data from the database) or the XML document contains more deeply nested elements than those necessary to represent a set of tables (when transferring data to the database), then the transfer is simply not possible Beispiel 5: Objekt-Modell (aus [ROBOU1]) (tree bezieht sich auf Beispiel 1) Vorbemerkung: Der Dokumentenbaum (tree) eines XML-Dokuments stellt die Einsatzreihenfolge der in der zugehörigen DTD definierten Elemente der XML-Struktur übersichtlich dar. For example, the sales order document shown above could be viewed as a tree(*) of objects from five classes -- Orders, SalesOrder, Customer, Line, and Part -- as shown in the following diagram: Orders | SalesOrder / | \ Customer Line Line | | Part Part [ROBOU1] schreibt weiter über das Objekt-Modell: "..is a tree of data-specific objects, in which element types generally correspond to objects and content models, attributes, and PCDATA correspond to properties. This model maps directly to object-oriented and hierarchical databases and can be mapped to relational databases using traditional object-relational mapping techniques or SQL 3 object views. Note that this model is not the Document Object Model (DOM); the DOM models the document itself, not the data in the document, and is used to build content managment systems over relational databases.. ..When modelling an XML document as a tree of data-specific objects, there is no requirement that elements necessarily correspond to objects. For example, if an element contains only PCDATA, such as the CustName element in the sales order document, it can be reasonably viewed as a property because, like a property, it contains a single, scalar value. Similarly, it is sometimes useful to model elements with mixed or element content as properties. An example of this is the Description element in the sales order document: although it has mixed content in the form of XHTML, it is more useful to view the Seite 17 von 17 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann description as a single property because its component pieces are meaningless by themselves." Weil einfache Bilder oft Zusammenhänge viel besser erklären als komplizierte Erläuterungen, möchte wir an dieser Stellen noch eine Illustration aus [Quin] zeigen, die die Abbildung einer XML-Struktur in eine relationale Datenbanktabelle veranschaulicht: Seite 18 von 18 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Abschließend wollen wir noch kurz auf die verschiedenen Datentypen und Informationen einer XMLStruktur und die Art und Weise wie sie in Datenbanken abgebildet werden können eingehen. Datentypen und Datenhaltung in XML-Strukturen Die nachfolgenden Beschreibungen sind wieder [ROBOU1] entnommen.Bei der realen Umsetzung hat man allerdings oft wenig Einfluß daruf, wie die für die XML-Unterstützung gewählte Datenbank oder die Software manche Dinge konkret umsetzt. Datentypen "XML does not support data types in any meaningful sense of the word. Except for unparsed entities, all data in an XML document is text, even if it represents another data type, such as a date or an integer. Generally, the data transfer middleware will convert data from text (in the XML document) to other types (in the database) and vice versa. However, the number of text formats recognized for a particular data type are likely to be limited, such as to those supported by a given JDBC driver. Dates are most likely to cause problems, as the range of possible formats is enormous. Numbers, with their various international formats, might cause problems as well." Binärdaten "There are two common ways to store binary data in XML documents: unparsed entities and Base64 encoding (a MIME encoding that maps binary data to a subset of US-ASCII). For relational databases, both can prove problematic, as the rules governing how binary data is sent to or retrieved from the database can be quite strict and can cause problems for the middleware. In addition, there is no standard notation for indicating that an element contains Base64-encoded data, so the middleware might not recognize this encoding at all. Finally, the notation associated with an unparsed entity or Base64 encoded element is one of those things that might be discarded by the middleware when storing data in the database. Therefore, if binary data is important to you, be sure to check that your middleware supports it." "Null"-Daten "In the database world, null data means data that simply isn't there. This is very different from a value of 0 (for numbers) or zero length (for a string). For example, suppose you have data collected from a weather station. If the thermometer isn't working, a null value is stored in the database rather than a 0, which would mean something different altogether. XML also supports the concept of null data through optional element types and attributes. If the value of an optional element type or attribute is null, it simply isn't included in the document. As with databases, empty elements or attributes containing zero length strings are not null: their value is a zero-length string. When mapping the structure of an XML document to the database and vice versa, you should be careful that optional element types and attributes are mapped to nullable columns and vice versa. The result of not doing so is likely to be an insertion error (when transferring data to the database) or invalid document (when transferring data from the database). Because the XML community is likely to have a more flexible notion of what is meant by null than the database community -- in particular, many XML users are likely to consider empty elements or attributes containing zero-length strings to be "null" -- you should check how your chosen middleware handles this situation. Some middleware may offer the user the choice of defining what constitutes "null" in an XML document." Zeichenketten "By definition, an XML document can contain any Unicode character except some of the control characters. Unfortunately, many databases offer limited or no support for Unicode and require special configuration to handle non-ASCII encodings of character data. If your data contains non-ASCII characters, be sure to check how and if both your database and middleware handle these characters." Seite 19 von 19 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Verarbeitungsanweisungen "Processing instructions are not part of the "data" of an XML document and it is likely that most middleware cannot handle them. The problem is that, especially with a strict mapping of the XML document structure to database structure, processing instructions simply do not fit because they can occur virtually anywhere in the document. Thus, it is hard for middleware to know where to store them and when to retrieve them. If processing instructions and "round-tripping" of documents are important to you, be sure to check how your middleware handles this." Speicherung von Markups "As was mentioned in section ..., it is sometimes useful to store elements with element or mixed content in the database without further parsing. The most common way to do this is simply to store the markup itself in the database. Unfortunately, this leads to a problem when retrieving the data: it is impossible to determine whether such markup in the database is, in fact, true markup or was originally an entity that represented a markup character, such as can be done with the lt and gt entities. For example, if the following description: <description> <b>Confusing example:</b> <foo/> </description> is stored in the database as: <b>Confusing example:</b> <foo/> the database cannot tell whether and are markup or text. There are several possible solutions to this, such as flagging markup in some way or using entities for non-markup markup characters, but you must be careful that these are acceptable to your other applications that use the data. For example, if you want to search for a less-than sign ("<") and an lt entity ("<") is stored in the database, you need to be aware of this." © 2001Ute Stegmann 2.2 Datenbankexport nach XML Das grundsätzliche Vorgehen beim Exportieren von Datenbank-Informationen in XML-Strukturen bzw. -Dokumente ist im Prinzip einfach. Es sind nur folgende Schritte notwendig: • • • Festlegung des Mappings (siehe Kapitel 2.1) Selektieren der gewünschten Datensätze aus der Datenbank Erzeugen XML-Struktur gemäß Mapping und Speichern als XML-Dokument Auch wenn das Prinzip so einfach scheint, die Frage ist dennoch, wie geht das nun konkret. Genauer also die Fragen: • • • Wo und wie wird das Mapping festgelegt? Werden und wenn ja wie DTDs unterstützt? Gibt es ein allgemeingültiges Konzept für die konkrete Syntax (Standard)? Wir hatten es bereits angedeutet, aus unserer Sicht gibt es keine herstellerunabhängigen Antworten auf diese Fragen. Deshalb gehen wir auf die konkrete Umsetzung auch erst in Kapitel 3 genauer ein. Auf den nachfolgenden Seiten dieses Abschnitts folgen allgemeine Beispiele für die Gruppe der realionalen Datenbanken. © 2001Ute Stegmann Seite 20 von 20 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 2.2 Datenbankexport nach XML [Darstellungsansätze] Es existieren eine Vielzahl an Möglichkeiten, den Inhalt einer Datenbank in XML "zu verpacken". Um ein Gefühl dafür zu bekommen, wie diese XML-Darstellung aussehen kann, folgende Grundüberlegung: Man nehme eine bel. Tabelle einer Datenbank und vereinfache das Anschauungsmodell auf "natürlichsprachige" Inhalte, d.h. Binärobjekte und andere spezielle Datentypen fallen "unter den Tisch" (Hinweis: für solche Fälle gibt es in XML ja auch die Auszeichnung mit CDATA...). Dann liegt es nahe, den Tabellennamen als Element aufzufassen und jede Tabellenzeile (also den Inhalt) diesem Element unterzuordnen: Unterstellt man folgende Datenbanktabelle Tabelle: "franchisers" bezeichnung plz ort Friedhelm Meier 42477 Radevormwald Franziskus GmbH 99999 In den Bergen dann kann findet man in der Literatur oft folgende Umsetzung: <franchisers> <row> <bezeichnung>Friedhelm Meier</bezeichnung> <plz>42477</plz> <ort>Radevormwald</ort> </row> <row> <bezeichnung>Franziskus GmbH</bezeichnung> <plz>99999</plz> <ort>In den Bergen</ort> </row> </franchisers> Das ist die "schöne" und ausführliche Umsetzung. Da XML - in ungepackter Form - ein sehr ausuferndes Dateiformat ist, sollte man Vereinfachungen vornehmen und abstrahiert beispielsweise folgendes: Auszeichnung der Tabellenfelder als Elemente <franchisers> <bezeichnung>Friedhelm Meier</bezeichnung> <plz>42477</plz> <ort>Radevormwald</ort> </franchisers> <franchisers> <bezeichnung>Franziskus GmbH</bezeichnung> <plz>99999</plz> <ort>In den Bergen</ort> </franchisers> Seite 21 von 21 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Eine Alternative kann aber auch so aussehen: Auszeichnung der Tabellenfelder als Attribute <franchisers bezeichnung="Friedhelm Meier" plz="42477" ort="Radevormwald" /> <franchisers bezeichnung="Franziskus GmbH" plz="99999" ort="In den Bergen" /> Da es (noch) keinen Standard gibt, wie dies am besten umgesetzt werden sollte, entwickelt hier derzeit jeder Hersteller sein eigenes Süppchen. Aus meinen bisherigen Erfahrungen gibt es für beide Ansätze gute Gründe, die ich hier nachfolgend einmal zur Diskussion stellen möchte: Aufstellung einiger potentieller Vorteile der Verkapselung von Tabellenfeldern als Elemente als Attribute einfacher lesbar platzsparendes Format "multivalue"-Felder sind intuitiv umsetzbar eindeutige Feldstruktur Feldtypen in den Attributen der Elemente möglich Feldtypbeschreibungen in getrennter DTD Die Vorteile des einen Formatierungsansatzes sind gleichzeitig in negierter Form die Nachteile des anderen, bzw. umgekehrt. Bei der Programmentwicklung dürfte es belanglos sein, welche Auszeichnung benutzt wird, da die XPath-Funktionalität sowohl mit Elementen, als auch mit Attributen umgehen kann. Beim Transfer zwischen verschiedenen Anwendungen sollte man derartige Konventionen aber frühzeitig zueinander abstimmen. © 2001Thorsten Rood 2.2 Datenbankexport nach XML [1:n-Beziehungen] Während man sich in relationalen Datenbanken bei der Abbildung der Beziehungen zwischen einzelnen Datensätzen selber Gedanken über die notwendigen Zeiger machen muss (und nur bei der Erhaltung der Integrität anschließend durch das RDBMS unterstützt wird), gestaltet sich die "klassische" 1:n-Beziehung in einem XML-Datensatz völlig intuitiv. franchisers RDBMS-Tabellen: locations Id ort plz 1 Radevormwald 42477 2 In den Bergen bezeichnung ort_id Friedhelm Meier 1 Friedrich Müller 1 Franziskus GmbH 2 99999 Seite 22 von 22 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann XML-Datensatz (hier am Beispiel der Auszeichnung durch Attribute): <locations name="Radevormwald" plz="42477"> <franchisers bezeichnung="Friedhelm Meier" /> <franchisers bezeichnung="Friedrich Müller" /> </locations> </locations name="In den Bergen" plz="99999"> <franchisers bezeichnung="Franziskus GmbH" /> </locations> © 2001Thorsten Rood 2.2 Datenbankexport nach XML [Informationsmix] Schlussendlich verwischt XML auch die physikalische Trennung von Datenpools, die man in Datenbanken zwangsläufig (schon aus technischen Gründen) vornehmen muss. So ist es kein Problem, Informationen unterschiedlichster Herkunft in ein einzelnes XML-Dokument zu speichern. <customer> <personal_data bezeichnung="Friedhelm Meier" plz="42477" ort="Radevormwald" /> <billing_information type="credit_card" ref="Eurocard" number="47110815" /> <orders item="XML-Kochbuch" price="DEM 98,90" ref="11426992" /> <orders item="XPath Quick-Tour" price="DEM 48,99" ref="6625341" /> </customer> <result last_action="ok" detail="Artikel wurde Ihrem Warenkorb hinzugefügt" /> <cross_selling> <book title="XML in 21 Tagen" ref="888451228" /> <book title="XML für Dummies" ref="3342192" /> <cdrom title="XML-Examples" ref="776352533" dvd="yes" /> </cross_selling> Ausblick: 1. Durch die Anwendung verschiedener Stylesheets (z.B. interaktiv in Abhängigkeit vom Benutzer) kann man Daten, Erfolgs- und Fehlermeldungen sowie Statusinformationen in einem einzigen XML-Datensatz abwickeln und je nach Bedarf entsprechend die Informationen anzeigen oder verbergen. 2. Durch XPath erhält man eine leistungsfähige Navigations- und Selektionstechnik, nur die notwendigen Informationen aus einem "bunt gemischten" XML-Datensatz zu extrahieren. © 2001Thorsten Rood Seite 23 von 23 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 2.2 Datenbankexport nach XML [eigene Programme] Auch wenn wir uns in diesem Seminarbeitrag hauptsächlich mit Datenbanken mit XML-Unterstützung beschäftigen, kann es sehr wohl sinnvoll den Export von Datenbank-Informationen mit eigenen Prozeduren / Programmen oder zumindest mit DB-neutralen Tools durchzuführen. Gründe dafür könnten sein: • • • Die geplante Applikation soll möglichst unabhängig von der eingesetzten Datenbank sein (z.B. weil diese noch nicht feststeht oder ein Wechsel der DB-Produkte später möglich sein soll) Die geplante Internet-Applikation hat verschiedene Datenquellen (siehe hierzu auch Kapitel 1.3 XML als Hub Format) Die Datenquelle ist eine Datenbank, die XML nicht unterstützt und geeignette Middleware soll nicht angeschaft werden In diesen Fällen kann es also sinnvoll sein die am Anfang dieses Kapitels beschriebenen Abläufe selbst zu Programmieren. Hierfür können im Prinzip verschiedene teilweise bereits in den Seminarbeiträgen 1 - 8 beschriebene Techniken genutzt werden (z.B. CGI). Wir gehen in unserem Seminarbeitrag auf die Möglichkeiten von Java im Zusammenhang mit XML näher ein (siehe hierzu Kapitel 2.4). © 2001Matthias Knop 2.3 XML-Import in Datenbanken Das Importieren bzw. genauer die Übernahme neuer, geänderter oder gelöschter Informationen aus XML-Strukturen in Datenbanken ist komplizierter als das Exportieren. Hierbei müssen zunächst einmal die DB-Strukturen (z.B. Tabelleinformationen, Feldinformationen bei relationalen Datenbanen) ermittelt werden. Dabei ist das zugrunde liegende Mapping (Abbildung) zu berücksichtigen wie es in 2.1 und 2.2 bereits beschrieben wurde. Anschließend müssen diese Informationen mit den Informationen aus den XML-Strukturen zu den entsprechenden Datenbankanweisungen (z.B. als SQLKommandos) zusammengefügt werden. Dabei sind natürlich gewisse Plausibilitäten notwendig auf die ich hier nicht genauer eingehen werden. Jeder kann sich aber vielleicht vorstellen, das mindestens die Art des Feldinhaltes geprüft werden sollte und auf die Eindeutigkeit bestimmter Indizes zu achten ist. Es wäre dabei auch möglich, nicht alle Feldinhalte in dem XML-Dokument anzugeben. Z.B. könnten eindeutige IDs bei der Übernahme automatisch vergeben werden oder einige Felder nicht gefüllt werden (NULL-Wertel), weil sie später mit anderen Anwendungen gepflegt werden sollen. Das konkrete Vorgehen und die Syntax solcher Funktionen ist abhängig vom eingesetzten Datenbanksystem (siehe Kapitel 3). Über die Techniken der DB-Ansteuerung lesen ebenfalls in den Nachfolgenden Abschnitten bzw. Kapitel mehr. Ein mögliches Vorgehen bei einer relationalen könnnte vereinfacht beispielsweise etwa so aussehen: Seite 24 von 24 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann • Einfügen von Daten (Insert) 1. Die Rohform eines Insert-Statement für die gewünschte Datenbank-Tabelle wird generiert. 2. Je einzufügendem Datensatz wird aus dem XML-Dokument die Belegung der Feldinhalte extrahiert und der Insert durchgeführt. Beispiel 1: Die Tablle einer relationalen Datenbank wurde mit folgendem Statement angelegt:Create Table Auftragstabelle (Auftragsnummer NUMBER, Auftragsdatum DATE, ArtikelNummer NUMBER, BestellMenge NUMBER) Der Insert aus folgender XML-Struktur <Auftragstabelle> <Row> <Auftragsnummer>1</Auftragsnummer> <AuftragsDatum>21.02.2001</OrderNumber> <ArtikelNummer>120565</ArtikelNummer> <BestellMenge>10</BestellMenge> </Row> <Row> <Auftragsnummer>2</Auftragsnummer> <AuftragsDatum>02/02/2001 0:0:0</OrderNumber> <ArtikelNummer>120568</ArtikelNummer> <BestellMenge>4</BestellMenge> </Row> </Auftragstabelle> kann durch folgende zwei SQL-Statements ausgeführt werden: INSERT INTO Auftragstabelle (Auftragsnummer, Auftragsdatum, ArtikelNummer , BestellMenge) VALUES ('1', '02/21/2001 0:0:0', '120565','10') INSERT INTO Auftragstabelle (Auftragsnummer, Auftragsdatum, ArtikelNummer , BestellMenge) VALUES ('2', '02/01/2001 0:0:0', '120568','4') • Ändern von Daten (Update) Ein Update kann im Prinzip genauso umgesetzt werden wie ein Insert. Wichtig ist allerdings. das aus dem XML-Dokument die eindeutige Identifikation eines zugeordnetten Datensatzes in der Datenbank hervorgeht (Außnahme: Komplexer Update über mehrere Datensätze). Wenn nur einzelne Feldinhalte geändert werden sollen, ist natürlich für den Update auch eine XMLStruktur denkbar, die nicht alle Feldnamen enthält. Beispiel 2: Betrachten wir noch einmal obiges Insert-Beispiel. Eine nachträgliche Änderung der Bestellmenge von 4 auf 5 des Auftrages Nummer 2 könnte als Update mit folgender XMLStruktur als Eingabe ausgeführt werden: <Auftragstabelle> <Row> <Auftragsnummer>2</Auftragsnummer> <BestellMenge>4</BestellMenge> </Row> </Auftragstabelle> UPDATE Auftragstabelle SET BestellMenge = '10' WHERE Auftragsnummer = '1' Seite 25 von 25 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann • Löschen von Daten (Delete) Für das Löschen von Datensätzen gilt wie beim Ändern, dass er über die XML-Struktur eindeutig identifizierbar sein muss. Dies kann wiederum durch Angabe des eindeutigen Keys in der XML-Struktur geschehen. Beispiel 3: In Anlehnung an die Beispiele 1 und 2 würde das spätere Löschen des 2. Auftrages über den Delete aus folgender XML-Struktur ausgeführt: <Auftragstabelle> <Row> <Auftragsnummer>2</Auftragsnummer> </Row> </Auftragstabelle> resultierendes SQL-Statement Delete Auftragstabelle WHERE Auftragsnummer = '2' Bleibt abschließend zu bemerken, dass Datenbankänderungen natürlich auch sehr viel komplexer sein können. Änderungen können sich z.B. auch auf mehrere Datenbanktabellen beziehen. Grundsätzlich ist dies dann eine Frage des Designs der Anwendung bzw. der Festlegung sauberer Schnittstellen. Wichtig ist dabei vor allem, dass das Mapping zwischen XML und der jeweiligen Datenbank vorher genau festgelegt wird. Alle Fragen, die im Zusammenhang mit der Datenkonsistenz, Multiuserbetrieb,Transaktionen, etc. sind natürlich auch bei Änderungsfunktionen mittels XML zu bedenken. © 2001Ute Stegmann 2.3 XML-Import in Datenbanken [eigene Programme] Wir haben in dem vorherigen Kapitel 2.2 bereits darauf hingewiesen, warum es unter gewissen Umständen sinnvoll sein kann die XML-Unterstützung möglichst unabhängig von der verwendeten Datenbank bzw. dessen Hersteller zu halten. Dies gilt natürlich nicht nur für den Datenexport sondern sogar verstärkt für den Import. Insbesondere sind die Möglichkeiten eigener Entwicklungen bzw. plattformneutraler Produkte oft weitreichender und können besser speziellen Anforderungen angepaßt werden. Für die Übernahme (Einfügen,Ändern und Löschen) von XML-Informationen in Datenbanken müssen im ersten Schritt wie wir gesehen haben zunächst einmal die XML-Strukturen analysiert werden um daraus später Datenbank-Zugriffe zu erzeugen. Hierfür benötigt man sogenante XML-Parser. Wir beschäftigen uns im nächsten Kapitel "Java und XML-Parser" mit den in Java bestehenden Möglichkeiten und geben Hinweise auf bereits bestehende Lösungen. © 2001Matthias Knop Seite 26 von 26 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 2.4 Java und XML-Parser Quelle:[OBJMID1] (OBJEKT SPEKTRUM 5/99) Die Aufgabe: Ein XML-Dokument soll Verarbeitet werden. Welche Programmiersprache und welche Werkzeuge stehen zur Verfügung? Java ist hier das Mittel der Wahl, zumal es hier leistungsfähige und frei verfügbare java-basierte Werkzeuge gibt. Zu den Herstellern von Java-Software für XML zählen unter anderem so bekannte Namen wie JavaSoft, Microsoft, Oracle und IBM. XML wurde unter anderem für den Einsatz im Web als Antwort auf die Beschränkungen von HTML entwickelt. Auch Java zählt zu den wichtigen Web-Technologien. Ein weiteres gemeinsames Merkmal ist der Unicode. So wie XML auf die Kodierung von UnicodeZeichen ausgelegt ist, so bietet auch Java Unterstützung an. Im Quelltext sind Unicode-Zeichen erlaubt und der Datentyp char sowie zahlreiche Klassen in der Standardbibliothek erlauben die Verarbeitung von Unicode. Es gibt noch weitere strukturelle Analogien: • • • • Eine Java-Klasse legt die Struktur und alle Merkmale der daraus erzeugten Objekte fest. Bei XML definiert die DTD (Dokument Type Definition) die Struktur der damit ausgezeichneten Dokumente und die Charakteristika der erlaubten Elemente. Wie bei Java zwischen einer Klasse und den von ihr erzeugten Exemplaren unterschieden wird, spricht man auch bei XML von der DTD und den Exemplaren einer DTD. Aus der Baumhierarchie der Bestandteile eines XML-Dokuments kann ein Baum von Java-Objekten generiert werden. Die Attribute eines Elementknotens können auf Attribute einer Java-Klasse abgebildet werden, die dieses Element repräsentiert(sogenannte XML-Beans). XML-Dokumente durchlaufen üblicherweise folgenden Zyklus: 1. Erstellung einer DTD: Dadurch wird die Stuktur der Dokumente festgelegt. 2. Erstellung eines Dokumentes: Dieses Dokument entspricht der festgelegten Struktur. Diese Dokumente werden in Analogie zur OOP Exemplare ihrer DTD genannt. Seite 27 von 27 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3. Analysieren des Dokuments mit einem Parser: Hierbei baut der Parser einen ParseBaum auf, dessen Knoten die Bestandteile des Dokuments repräsentieren. Bei XML wird zwischen validierenden und nicht-validierenden Parsern unterschieden. Validierende Parser bekommen neben dem Dokument auch die DTD als Eingabe und prüfen das Dokument auf Konformität mit der DTD. Nicht-validierende Parser beschränken sich dagegen auf die Generierung des Parse-Baumes. Sie kommen dann zum Einsatz, wenn davon ausgegangen werden kann, dass die zu verarbeitenden Dokumente korrekt sind, und wenn es darauf ankommt, den Parse-Baum möglichst schnell aufzubauen. Entsprechend den verschiedenen Teilen, aus denen ein XML-Dokument besteht, gibt es verschiedene Knotentypen ( für die DTD, Elemente, Attribute, Entitäten usw.). Ein einzelner Knoten kann das Vorkommen eines in der DTD definierten Strukturelements (Kapitel, Absatz, Aufzählung usw.) repräsentieren oder auch einen Unicode-String enthalten (etwa den Titel eines Kapitels) 4. Verarbeitung des Parse-Baums: Dies geschieht in der sogenannten Applikation, die die eigentliche Verarbeitungslogik enthält. eine Applikation könnte ein Konverter nach HTML oder ind das Portable Document Format (PDF) sein oder auch eine Datenbank, die XML-Dokumente speichert. Für die letzen beiden Stufen sind java-basierende Werkzeuge verfügbar. Bei der Entwicklung von XML-Applikationen hat man es vorwiegend mit zwei Programmierschnittstellen zu tun: DOM und SAX. DOM Beim DocumentObject Model (DOM) handelt es sich um einen vom WorLd Wide Web Consortium (W3C) standardisierten Satz von Schnittstellen für die einzelnen Knotentypen des Parse-Baums. So gibt es ein Interface Element, das einen Elementknoten repräsentiert. Element hat unter anderem eine Methode getTagName(), mit der der Name des Elements abgerufen werden kann. Für DOM existieren verschiedene Java-Implementierungen. Einige Parser, wie z. B. "XML4J" von IBM, "XP" von James Clark oder "Project X" von JavaSoft verfügen über eine DOM-Implementierung. Insgesamt sind die Funktionen von DOM recht einfach gehalten; bei komplexeren Applikationen benötigt man oft zusätzliche Funktionen, die die verschiedenen Parser bieten. DOM ist daher nur als kleinster gemeinsame Nenner zu betrachten. Bei der Parser-Auswahl ist auch darauf zu achten, welche Möglichkeiten die einzelnen Pakete über die reine Implementierung von DOM hinaus bieten. Ortmals sind solche Funktionen essentiell für eine Anwendung und somit ausschlaggebend für die Auswahl des Werkzeugs. Wenn der Zugriff auf den Parse-Baum nur über die DOMInterfaces erfolgt, hat man zwar den Vorteil, daß die Applikation vollständig unabhängig von den Parsern und ihrer DOM-Implementierung ist. Nachteil ist allerdings, daß die Möglichkeiten der Applikation hinsichtlich des Zugriffs auf den Parse-Baum und seine Inhalte eingeschränkt und mitunter recht umständlich sind. Die zusätzlichen Funktionen der Parser bieten hier mehr Komfort. Seite 28 von 28 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann SAX Die Simple API for XML (SAX) wurde von David Megginson entwickelt und definiert einen einheitlichen Zugriff auf den Parser. Ähnlich wie DOM besteht SAX zum größten Teil aus Interfaces, die parser-spezifisch durch sogenannte SAX-Treiber implementiert werden. Bei den Parsern von IBM, JavaSoft und James Clark wird ein SAX-Treiber mitgeliefert. Für andere Parser, wie z. B. "msxml" von Microsoft, sind Treiber von Drittanbietern verfügbar. SAX definiert beispielsweise eine Methode parse(), mit der der Parser veranlaßt wird, ein Dokument zu analysieren. Darüber hinaus spezifiziert SAXInterfaces und Klassen, mit denen eine XML-Applikation beim Eintritt bestimmter Ereignisse während der Baumtraversierung Callbacks erhalten kann, z. B. beim Erreichen des Anfangs oder des Endes eines Elements im Dokument. © 2001Matthias Knop 2.5 XML-Darstellung Die Darstellung der XML-Syntax entspricht nicht unbedingt einer idealen, übersichtlichen Darstellung für den Anwender. Dafür sollten vielmehr ansprechende Internet-Seiten angezeigt werden. Das XMLFormat enthält aber keine Informationen darüber, wie die Daten dargestellt werden sollen. Dafür sind die Style Sheets oder Skripte zuständig – sie bestimmen das Aussehen der fertigen Web-Seite und die dort erfolgende Anzeige der einzelnen Elemente. Es gibt mehrere Möglichkeiten, XML-Daten zu formatieren. Cascading Style Sheets (CSS) sind die derzeit am häufigsten genutzte und gleichzeitig einfachste Form hierfür. Mit einer Einschränkung: Die erzielbaren Formatierungen sind im Vergleich zu anderen Verfahren eher geringer. Die Extensible Style Language (XSL) ist zwar etwas komplexer, dafür aber auch um einiges leistungsfähiger. Aber auch in diesem Fall gibt es eine Einschränkung: Noch nicht alle Browser unterstützen XSL-Formatierungen. Allerdings wird die Unterstützung durch Third-Party Produkte von Tag zu Tag besser. Eine weitere Technik ist das Document Object Model (DOM), das in Verbindung mit einer Skriptsprache wie JavaScript oder VBScript eingesetzt wird. Zwar mit deutlich höherer Komplexität, aber dafür andererseits mit einer Vielfalt an Methoden zum Formatieren und Editieren von XML-Daten oder deren Umwandlung in HTML und umgekehrt. Die Verknüpfung eines Style Sheets oder Skriptes mit den aktuell von einer Datenbank zurückgelieferten Daten ist denkbar einfach, selbst wenn das betreffende Style Sheet von einem anderen Web-Server angefordert werden muss. Alle bisher beschriebenen Formatierungsvarianten haben nämlich einen gemeinsamen Vorteil: Die Formatierungsinformationen sind in einer separaten, von den Daten getrennten Datei abgelegt. Datenbankdesigner und Entwickler brauchen daher nicht auf vertrauten Tools zu verzichten, um Style Sheets zu entwerfen oder Skripte zu schreiben. Mit einer guten Vorausplanung vor Beginn des Datenbankdesigns ist es möglich, viele unterschiedliche Datenbankabfragen mit einigen wenigen Style Sheets oder Skripten zu ermöglichen. Lesen Sie bitte die Grundlagen über XML, XSL etc. im Beitrag Thema 8 "XML-Grundlagen". © 2001Ute Stegmann, Thorsten Rood Seite 29 von 29 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 2.5 XML-Darstellung [Fortsetzung] Oft steckt der Teufel im Detail. Sobald man mit XSL-Techniken beginnt, sollte man sich zuerst von dem Irrglauben befreien, dass HTML eine Teilmenge von XML sei. Der Umstand, dass HTML beispielsweise nicht wohlgeformt sein muss, hat auch in der Entwicklung von Webbrowsern dazu geführt, dass an bestimmten Stellen Probleme auftauchen, sobald kritische HTML-Anweisungen dann doch einmal in wohlgeformter Syntax auftauchen. Das fällt zwar in der Mehrheit der Fälle in die Kategorie "Programmfehler", dennoch kann man die bereits installierte Basis nicht einfach ignorieren... Besonderheiten: • • • HTML-Anweisungen in einem XSL-Stylesheet müssen immer wohlgeformt sein, auch wenn es nach W3C eigentlich nicht notwendig vorgegeben ist. Sonst meldet nämlich der XSLT-Prozessor einen Syntaxfehler (die XML-Daten sind dann ja fehlerhaft) und traversiert die Dokumente nicht oder nicht zu Ende. HTML-Code kann nicht einfach von bestehenden Produkten zum Site-Design "kopiert" werden, da ein Nachpflegen der Wohlgeformtheitsklauseln i.d.R. länger dauert als direkt gültigen HTML-Code zu entwickeln. "kurze" HTML-Elemente werden nicht von jedem Browser verstanden. So sind <textarea></textarea> und <textarea /> XML-syntaktisch gleichwertig, bei letzterem steigen jedoch ältere Browser aus... Zur Darstellung des Template-Matching bei XSLT verweise ich auf die Demo des MSSQL2K im Rahmen dieses Referatthemas. Ein absolut unverzichtbarer Aspekt zur Aufbereitung eines XML-Dokuments in das HTML-Format ist ein Grundlagenverständnis in XPath - einer Terminologie zur Navigation in einem beliebig komplexen XML-Dokument und zur Selektion definierter Elemente und Attribute zur weiteren Verarbeitung. Ein guter Einstieg findet sich in [STMU1] sowie [MIBA1] und wird aus Komplexitätsgründen hier nicht weiter verfolgt. Nur soviel (stark vereinfacht) vorweg: Wer einen relativen Pfadnamen im Dateisystem bilden kann, ist auch in der Lage, eine Kurznotation von Elementen bzw. Attributen in einem hierarchischen XML-Dokument zu formulieren. Allerdings trägt dies dem Leistungsumfang von XPath nicht Rechnung, dieser geht weit darüber hinaus... © 2001Thorsten Rood 2.6 Datenbank-Benutzeranfragen Natürlich braucht man eine definierte Schnittstelle, um Datenbankoperationen (i.d.R. SQLAnweisungen) über das Internet verfügbar zu machen. In der Vergangenheit sind eine Vielzahl von Produkten entstanden, die versuchen, eine Brücke vom Web in die Datenbank zu bieten (Schablonentechniken, Servlets, usw.) Streng genommen entsteht in Zusammenhang mit der XML-Technik hier auch "nur" ein weiteres Produkt in diesem Umfeld, schließlich ist XML erst einmal nur eine Transporthülle um beliebige Daten. Nun sind diese Daten eben SQL-Anfragen. Eine Norm zur Realisierung ist aber (noch) nicht in Sicht, so dass hier die von den einzelnen Seite 30 von 30 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Herstellern eingeschlagenen Wege stark voneinander abweichen. Ich glaube, dass hier noch einiges passieren wird, denn immerhin bei der Auswertung von XML-Datensätzen (also dem Ergebnis der Datenbankabfragen) scheint man sich auf gemeinsame Nenner einigen zu können (XPath, XPointer). Der Weg "raus" aus dem Datenbanksystem in Abhängigkeit von benutzerdefinierten Parametern, d.h. der Export von Informatioen in XML-konforme Datenpakete dürfte von jedem Hersteller, der zum heutigen Zeitpunkt mit XML-Features wirbt, gewährleistet sein. Unterschiedlich leistungsfähig fallen dagegen Schnittstellen und Mechanismen zum Import der XML-Daten aus. Die Wunschliste ist lang im Idealfall schickt man einfach einen formatierten XML-Datensatz an das RDBMS und alle notwendigen Tabellen werden automatisch auf den neuesten Stand gebracht... In den nachfolgenden Kapiteln wird vielleicht deutlich, dass das zwar funktioniert, aber längst nicht so einfach realisiert ist, wie es klingt. © 2001Thorsten Rood 2.7 XML-Dokumente mit gemischtem Inhalt (BLOB,CLOB) Bisher haben wir uns hauptsächlich mit der Abbildung von Datenorientierten XML-Dokumenten (siehe 2.1) in relationale, objekt-relationale oder objektorientierte Datenbanken beschäftigt, bei denen die XML-Strukturen relativ eindeutig (z.B. XML-Tags sind einem Tabellennamen oder einem Feld einer DB-Tabelle zugeordnet) zugeordnet werden. Bisher ging es also um klar struktierte Daten, die sinnvoll in klassischen Datenbanken abgelegt werden können. Wir kommen nun noch zu einer anderen Art Datentypen. Die Integration der Typen Binary Large Object (BLOB) und Character Large Object (CLOB) ermöglicht die Verwaltung großer Objekte in einer Datenbank. Insbesondere Anwendungen wie "Digitale Bibliotheken" nutzen diese Datentypen. Durch die Verwaltung großer Objekte in der Datenbank kommt der Retrieval-Funktionalität hier eine wachsende Bedeutung zu. Neben den unstrukturierten Textobjekten existiert eine Dokumentenkategorie, die eine implizite Struktur aufweist, die aber aufgrund der Heterogenität nicht durch ein Datenbankschema beschrieben werden kann. Was hat das mit XML zu tun? Nun, wir erinnern uns an die Dokumentoriententen XMLDokumente, also XML-Daten mit vermischtem Inhalt, bei denen die direkte Abbildung in die klassischer Feldtypen eines Datenbank-Schemas nicht sinnvoll erscheint. Ein Beispiel: <PHOTOARCHIV> <ORT>MADEIRA</ORT> <AUTOR>ANNA STEGMANN</AUTOR> <REISEBERICHT>Eine schöne Insel ... ..sehr empfehlenswert sind ... ..und dann haben wir noch den höchsten Berg und da lag doch tatsächlich Schnee .. man sagte die Kinder hatten so etwas noch nie gesehen .. ...auch mit dem Linienbus kann man .. .. <REISEBERICHT> <BILD1> [hier digitale Bilddaten] </BILD1> <BILD2> [hier digitale Bilddaten] </BILD2> ... <BILD214> [hier digitale Bilddaten] </BILD214> <PHOTOARCHIV> Seite 31 von 31 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Diese XML-Struktur wird man sicher nicht in klassische Datenbankstrukturen bzw. -Typen abbilden, sondern hier kommen die oben genannten Typen BLOB bzw. CLOB zum tragen. [Quin] beschreibt zwei Strategien zur Speicherung solcher Strukturen in einer Datenbank. Entweder man speichert die komplette XML-Struktur als ganzes in einen BLOB oder man zerteilt die Hauptstruktur in sinnvolle Unterstrukturen, die dann wiederum als BLOB oder CLOB gespeichert werden. In unserem Beispiel könnte man also REISEBERICHT als CLOB und BILD1 bis BILD214 als BLOB speichern. Die Zielrichtung solchen Vorgehens dürfte auch klar sein. Es geht darum, diese Daten strukturiert abzulegen, um später gezielt nach bestimmten Inhalten suchen bzw. sie darstellen zu können. Derzeit gibt es zwar noch keine ausgereiften Möglichkeiten in Bildquellen nach bestimmen Inhalten zu suchen, aber wer wünscht sich nicht für die Zukunft auch in Bilddateien gezielt z.B. nach Landschaften suchen zu können. Wie Datenbank-Hersteller solche Anforderungen konkret umsetzten, werden wir in Teil 3 sehen. Meiner Meinung nach sind reine XML-Datenbanken wie z.B. Tamino (siehe 3.1.4) dazu am Besten geeignet. © 2001Ute Stegmann 2.8 XML Query Effizientes und skalierbares Datenmanagement für XML benötigt die Unterstützung durch Datenbanken. Heutige Losungen basieren auf relationaler oder objektorientierter Technologie, die der semi-strukturierten Struktur von XML nur unzureichend gerecht werden. Daher wird unter Obhut des World-Wide-Web-Consortium W3C (siehe [W3CI1]) derzeit an der auf XML zugeschnittenen, deklarativen Anfragesprache "XML Query" gearbeitet. Die Ziele dieser Bemühungen werden vom [W3CI1] so beschrieben: "The mission of the XML Query working group is to provide flexible query facilities to extract data from real and virtual documents on the Web, therefore finally providing the needed interaction between the web world and the database world. Ultimately, collections of XML files will be accessed like databases. Specifications: o o o o o XML Query Requirements, last release 16 February 2001 XML Query Use Cases , first release 16 February 2001 XML Query Data Model, last release 16 February 2001 The XML Query Algebra, last release 16 February 2001 XQuery: A Query Language for XML, first release 16 February 2001" Das Datum der letzen Änderung läßt schon ahnen, dass es noch keine Datenbank gibt, die eine XMLQuery-Sprache nach der neuesten Beschreibung des W3C unterstützt. Das ist auch der Grund, warum wir hier nicht genauer auf die Inhalte dieser Beschreibungen eingehen. Allerdings gab es in jüngster Vergangenheit, sehrwohl solche Art Sprachen die zum Zeitpunkt ihres entstehens den damals aktuellen Stand der Bemühungen des W3C unterstützten. Zunächst wurde dafür z.B. der Begriff XQL (z.B. von Software AG, eXcelon, GMD-IPSI) verwendet, heute gibt es z.B. XQuery von der Software AG für eben die erwähnte Tamino-XML-Datenbank. Wir haben in Kapitel 1.4. bereits darauf hingewiesen. Die Sprache der Software AG basiert laut Hersteller-Angaben auf XPATH. Seite 32 von 32 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Beispiel: Hier noch einmal das kleine Beispiel aus 2.1 zur Verdeutlichung des Prinzips: BOERSENLEXIKON/BEGRIFF = 'Aktie' Dies könnte etwa angewandt auf eine relationale Datenbank folgender SQL-Anfrage entsprechen: SELECT * BORSENLEXIKON WHERE BEGRIFF ="Aktie" Sprachen gemäß XML Query dürfen allerdings auch auf reine XML-Dokumente angewandt werden (siehe obige Beschreibung der Ziele der "XML Query working group"). © 2001Ute Stegmann Seite 33 von 33 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3 XML-Einsatz in Datenbanken-Applikationen In diesem Kapitel wird nun die Unterstützung von XML durch Standarddatenbanken näher untersucht. Unter DB-Produkte wird dabei zunächst eine Übersicht (Kurzvorstellungen) von Datenbankprodukten gegeben. Wir beschränken uns dabei im wesentlichen auf einige uns wichtig erscheinende relationale Standard-Datenbanken wie IBM DB2, Oracle 8i/9i und Microsoft SQL Server. Als Beispiel aus der Katagorie der reinen XML Datenbanken wird die Tamino XML Database der Software AG kurz beschreiben. MS SQL Server 2000 und Oracle 8i werden in 3.2 bzw. 3.3 dann konkret vertieft. Abschließende wird versucht eine Bewertung der vorgestellten Technologien und Produkte durchzuführen. 3.1 Übersicht Datenbank-Hersteller und -Produkte 3.2 Microsoft SQL 2000 3.3 Oracle 8i/9i XML-SQL Utility(XSU) 3.4 Bewertung 3.1 Übersicht Datenbank-Hersteller und -Produkte In [ROBOU2] findet man unter der Überschrift "XML und Databases" einen Recht gut strukturierten Überblick von Produkten zum Thema XML und Datenbanken. [ROBOU2] schreibt "I have divided products into the following seven categories. Please note that the boundaries between some of these categories, especially XML-Enabled Databases, Native XML Databases, XML Servers, and XML Application Servers, is somewhat arbitrary. Middleware: Software you call from your application to transfer data between XML documents and databases. For data-centric applications. XML-Enabled Databases: Databases with extensions for transferring data between XML documents and themselves. Primarily for data-centric applications. Native XML Databases: Databases that store XML in "native" form. The term is not well defined, but these are designed to maintain the structure of XML documents. For dataand document-centric applications. XML Servers: Platforms that serve data -- in the form of XML documents -- to and from distributed applications, such as e-commerce and business-to-business applications. Primarily for data-centric applications. XML Application Servers: Web application servers that serve XML -- usually built from dynamic Web pages -- to browsers. For data- and document-centric applications. Content Management Systems: Systems for managing fragments of human-readable documents and include support for editing, version control, and building new documents from existing fragments. Primarily for document-centric applications. Persistent DOM Implementations: DOM implementations that use a database for speed and to avoid memory limits. For data- or document-centric applications. In general, you have to write code to integrate Middleware, XML-Enabled Databases, Native XML Databases, XML Servers, and Persistent DOM implementations with your applications. XML Application Servers require you to do some scripting, and Content Management Systems need to be configured, which may be a non-trivial task in itself." Seite 34 von 34 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Die Nachfolgenden Kurzvorstellungen beziehen sich hauptsächlich auf "XML-Enabled Databases" wobei wir uns auf einige uns wesentlich erscheinende Standard-Datenbanken beschränken wie IBM DB2, Oracle 8i, Microsoft SQL Server, Filemaker und zusätzlich als Beispiel aus der Katagorie der "Native XML Databases" die Tamino XML Database kurz beschreiben. Um die Brücke zu den JAVA XML-Parsern (siehe Kapitel 2 Grundlagen XML-Parser) zu schlagen, werden wir außerdem die beiden Oracle-Produkte "XML SQL Utility for Java" und "XSQL Servlet" auszugsweise vorstellen. (MS SQL Server 2000 und Oracle 8i werden in Kapitel 3.2 und 3.2 vertieft) Übersicht der Datenbankhersteller/-produkte: 3.1.1 IBM DB2 XML Extender 3.1.2 Oracle 8i/9i, XML SQL Util, XSQL 3.1.3 Microsoft SQL Server, Access 3.1.4 Tamino XML Database 3.1.5 Verschiedene Datenbank-Hersteller Anmerkung: Unter Verschiedene Datenbank-Hersteller finden Sie noch ein paar DB-Produkte, die im Rahmen der Seminararbeit nicht näher untersucht wurden, aufgelistet. © 2001Ute Stegmann 3.1.1 IBM DB2 XML Extender Der DB2 XML Extender von IBM ist eine DB2 UDB Erweiterung, die die Möglichkeit zum Speichern und Aufrufen von XML-Dokumenten und zum Generieren von XML-Dokumenten aus vorhandenen relationalen Daten sowie zum Unterteilen (Zerlegen, Speichern nicht markierter Elemente oder Attributinhalte) von XML-Dokumenten in relationale Daten bietet. XML Extender bietet dafür neue Datentypen, Funktionen und gespeicherte Prozeduren (stored procedures) zum Verwalten von XMLDaten in DB2. Der XML Extender ist für die Betriebssysteme Windows NT, AIX, Sun Solaris und LINUX verfügbar. Im einzelnen werden in [DB2EXT] die Möglichkeiten wie folgt beschrieben: " Speicher- und Zugriffsmethoden XML Extender bietet zwei Speicher- und Zugriffsmethoden für die Integration von XML-Dokumenten in DB2: XML-Spalte und XML-Objektgruppe. Diese Methoden werden sehr unterschiedlich verwendet; sie können jedoch in derselben Anwendung eingesetzt werden. XML-Spalte Diese Methode ermöglicht das Speichern intakter XML-Dokumente in DB2. XMLSpalte eignet sich gut zum Aktivieren von Dokumenten. Die Dokumente werden in Spalten eingefügt, die für XML aktiviert sind und aktualisiert, abgerufen und durchsucht werden können. Element- und attributive Daten können DB2-Tabellen (Seitentabellen) zugeordnet werden; diese wiederum können für eine schnelle strukturelle XML-Objektgruppe Diese Methode ermöglicht das Zuordnen von XML-Dokument-strukturen zu DB2Tabellen, so daß Sie entweder XML-Dokumente aus vorhandenen DB2-Daten Seite 35 von 35 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann zusammensetzen oder XML-Dokumente in DB2-Daten zerlegen (nicht markierte Element- oder Attributinhalte speichern) können. Diese Methode eignet sich gut für Anwendungen zum Datenaustausch, besonders wenn der Inhalt der XML-Dokumente häufig aktualisiert wird. DTD-Repository Der XML Extender bietet ein XML DTD-Repository (Document Type Definition), eine Gruppe von Deklarationen für XML-Elemente und -Attribute. Beim Aktivieren einer Datenbank für XML wird eine DTD-Referenztabelle (DTD_REF) erstellt. Jede Zeile dieser Tabelle stellt eine DTD mit zusätzlichen Metadaten-Informationen dar. Die Benutzer können auf diese Tabelle zugreifen, um ihre eigenen DTDs einzufügen. Die DTDs in der Tabelle DTD_REF werden zum Überprüfen von XML-Dokumenten verwendet. Dokumentzugriffsdefinitionen (Document Access Definitions, DADs) Sie geben in einer Dokumentzugriffsdefinition (Document Access Definition, DAD) an, wie strukturierte XML-Dokumente verarbeitet werden sollen. Die DAD ist selbst ein formatiertes XML-Dokument. Sie ordnet bei Verwendung von XML-Spalten oder XML-Objektgruppen eine XML-Dokumentstruktur einer DB2-Datenbank zu. Die Struktur der DAD ist bei der Definition einer XML-Spalte anders als bei einer XMLObjektgruppe. DAD-Dateien werden über die Tabelle XML_USAGE verwaltet; diese Tabelle wurde beim Aktivieren einer Datenbank für XML erstellt. Verwaltungs-Tools Die Verwaltungs-Tools zum XML Extender erleichtern das Aktivieren der Datenbank und der Tabellenspalten für XML und das Zuordnen der XML-Daten zu den relationalen DB2-Strukturen. Der XML Extender bietet verschiedene VerwaltungsTools, je nachdem, ob Sie eine Anwendung entwickeln oder einfach mit einem Assistentenprogramm (Wizard) arbeiten wollen. Sie können die Verwaltungs-Tasks für den XML Extender mit den folgenden Tools ausführen: · Die XML Extender Verwaltungsassistenten bieten eine grafische Benutzerschnittstelle für die Verwaltungs-Tasks. · Der Befehl dxxadm bietet eine Befehlszeilenoption für Verwaltungs-Tasks. · Die gespeicherten Prozeduren des XML Extender für die Verwaltung enthalten Optionen für die Anwendungsentwicklung zu VerwaltungsTasks." Ein kurzes einführendes Beispiel findet man auf den IBM-Internetseiten unter XML Extender Administration and Programming/Getting startet . Ferner bietet IBM auch eine Trialversion und Dokumentationen zum Download an. © 2001Ute Stegmann Seite 36 von 36 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3.1.2 Oracle 8i/9i, XML SQL Util, XSQL Oracle bietet eine sehr ausgereifte Unterstützung von XML. In Kapitel 3.3 gehen wir noch konkret daruf ein. Ein kompakte Zusammenfassung der Möglichkeiten zitieren wir aus [ROBOU2] : " Oracle 8i can store XML documents in three different ways: in the Internet File System (iFS), using the XML SQL Utility for Java, and as a BLOB that can be searched using the Oracle Intermedia XML Search. Oracle 8i also includes a number of other XML-related tools, the most interesting of which is the XML Class Generator, which can generate Java classes from a DTD. With iFS, one or more type definition (mapping) files defines how to map an XML document as a tree of data-specific objects. iFS uses these mapping files both to construct tables in which the XML document can be stored, and to transfer data between XML documents and the database. Of interest, iFS can return data from the database directly as objects instead of XML documents, which is useful to many applications. iFS also supports content management features such as check-in/checkout and versioning. The XML SQL Utility for Java was described .."(siehe unten)" When it is used with Oracle 8i, it models XML documents as a tree of data-specific objects, since Oracle 8i supports SQL 3 object views. Oracle Intermedia XML Search is a utility that can, "Automatically index and search XML Documents and Document Fragments of any size up to 4 Gigabytes each. [It has] powerful XML document searching including hierarchical element containership, doctype discrimination, and searching on XML attributes." Oracle 9i (announced 2 Oct, 2000) includes "Native XML Database Support (XDB)", which introduces a new object data type (XMLType) and "features ... 'navigational' access and search for XML documents." XML SQL Utility for Java is a set of Java classes for transferring data between a relational database and an XML document. These classes may be used through one of the provided front ends or in a user-written application. The product is model-driven. If the database supports SQL 3 object views, it models the document as a tree of dataspecific objects; otherwise it models the document as a single table. When transferring data from the database to XML, the user provides either a SELECT statement or a JDBC result set; the results are returned as an XML document or DOM Document. When transferring data from XML to the database, the user provides an XML document or DOM Document. Options include specifying some of the tags used in the output document. XSQL Servlet is a Java servlet that uses the XML SQL Utility for Java to transfer data from a relational database to an XML document. The servlet is template-driven, with SELECT statements embedded in the template as elements; when processed, these are replaced by the result of the query, formatted as XML. Support for passing query parameters through HTTP and for processing the output document with XSL are provided. " © 2001Matthias Knop, Ute Stegmann Seite 37 von 37 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3.1.3 Microsoft SQL Server, Access SQL Server 2000 Der Microsoft SQL Server 2000 unterstützt XML direkt. Dabei gibt es verschiedene Varianten, die in Kapitel 3.2 ausführlich beschrieben werden. In Kapitel 4 wird außerdem eine kleine Applikation "Party-Service" vorgestellt, die mit MS Sql server 2000 umgesetzt wurde. Der MS SQL Server 2000 ist für das Betriebssystem Microsoft Windows 2000 (Server) verfügbar, kann aber auch noch unter NT 4.0 betrieben werden. Access Microsoft Access bietet keinen direkten XML-Support. Es ist aber möglich z.B. über Microsoft Active Server Pages (ASP) XML zu nutzen. In dem Buch "Web-Datenbanken Schritt für Schritt" aus der Microsoft-Press-Reihe [MS1] wird dies in Kapitel E "Datenaustausch mit XML" beschrieben. Da Access eine weit verbreitete Datenbank ist (insbesondere haben auch viele Privatanwender diese Datenbank) und zumindest für Anwendungen mit kleinerem Datenvolumen durchaus interessant ist, wollten wir dies hier nicht unerwähnt lassen. © 2001Ute Stegmann 3.1.4 Tamino XML Database Die Software AG bietet mit Tamino neben einer reinen XML-Datenbank, die laut [ROBOU2] hierarchisch ist, eine ganze Reihe von Werkzeugen und Entwicklungsumgebungen für XMLArchithekturen an. Der Hersteller Software AG ([SAG1]) sagt über Tamino: • • • • • • • • "Tamino ... ist der Information-Server für Electronic Business ... basiert auf der nativen XML-Technologie der Software AG (X-Machine) ... greift auf beliebige Datenquellen zu (X-Node) ... ermöglicht Datenaustausch zwischen Unternehmen auf der Basis von XMLDokumenten ... wurde von Grund auf für Internet-Anwendungen entwickelt ... unterstützt XQL aber auch SQL für strukturierte Daten ... basiert auf anerkannten Standards (XML, HTTP, TCP/IP) ... unterstützt NT, Unix und Mainframe-Systeme" Wer Tamino ausprobieren möchte kann derzeit ein sogenanntes Tamino Starterkit als 90-Tage-Version per Internet bei der Software AG ([SAG2]) bestellen, wenn man sich dort regristrieren läßt (aber Achtung: Man benötigt ausreichend Speicher - 256 MB - und ein Apache-Web-Server muß installiert werden). Das Starterkit umfaßt - soweit wir das in der Kürze beurteilen konnten - neben der XML Datenbank sämtliche Tamino XML-Werkzeuge. Ein ausführlich vorgestelltes Beipiel für eine Anwendung, die die Tamino XML-Datenbank nutzt, haben wir Ausgabe 3.2001 März der Zeitschrift "Java Magazin" ([JAVA1]) in dem Artikel "Tamino: Die Pur-XML-Datenbank für ein Medizin-Forum" gefunden. © 2001Ute Stegmann Seite 38 von 38 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3.1.5 Verschiedene Datenbank-Hersteller Informix "Informix supports XML through its Object Translator and through the Web DataBlade. The Object Translator generates object code, including the ability for objects to transfer their data to and from the database. It also supports functionality such as transactions and optimistic and pessimistic locking. XML support is provided through generated methods that transfer data between objects and XML documents. Users map XML documents to a tree of data-specific objects (and the database) with a GUI tool. Version 2.0 of the Object Translator (beta expected in Sept. 2000) is expected to support SOAP as well as be able to generate XML DTDs from object schema and relational schema. The Web DataBlade is an application that creates XML documents from templates containing embedded SQL statements and other scripting language commands. It is run from a Web server and supports most major Web server APIs." (aus [ROBOU2] ) Filemaker FileMaker Pro stellt XML über den FileMaker Web Companion zur Verfügung. Hier ein Auszug aus der der Hersteller-Beschreibung "XML Overview": "Mit FileMaker Pro lassen sich Daten in drei unterschiedliche XML-Formate konvertieren. Es handelt sich dabei um: • FMPDSORESULT (Datenbankabhängig) • FMPXMLRESULT (Datenbankabhängig) • FMPXMLLAYOUT FMPDSORESULT und FMPXMLRESULT sind alternative XML-Vokabularien zur Beschreibung von Datensätzen und Feldern einer FileMaker Pro Datenbank. Die Auswahl hängt davon ab, ob Sie ein einheitliches XML-Format für alle Datenbanken nutzen möchten oder ob verschiedene Datenbanken mit spezielleren – und somit unterschiedlichen – XML-Vokabularien arbeiten sollen. Das FMPDSORESULT-Format verwendet Elemente, deren Namen denjenigen der Datenbankfelder entsprechen. Das bedeutet, dass Sie gleichen Datenbankfeldern unterschiedliche stilistische Regeln mit mehreren CSS zuordnen können. Dabei muss allerdings für jede Datenbank, mit der Sie arbeiten möchten, ein separates Style Sheet entworfen werden. Die FMPXMLRESULT-Grammatik verwendet ein Vokabular mit Elementen, die Datensätze, Felder, Ergebnisse etc. repräsentieren. Mit diesen Elemen-ten lässt sich jede Datenbank hinreichend beschreiben, sie sind jedoch etwas gewöhnungsbedürftig. So wird ein Buchtitel mit dem gleichen Daten-Tag (DATA) beschrieben, das auch für den Namen des Autors, ISBN-Nummern, Preisangaben und andere Felder verwendet wird. Hierdurch wird die Zuord-nung von unterschiedlichen Stilen zu verschiedenen Feldern durch CSS schwierig. XSL Style Sheets sind dagegen flexibler und verstehen sich deut-lich besser mit einer von Datenbanktabellen unabhängigen Grammatik anstatt der Verwendung von namenlosen Hinweisen wie es beispielsweise Elementbeschreibungen sind. Kommen wir nun zur FMPXMLLAYOUT-Grammatik. Diese dient zur Beschreibung der semantischen Vereinbarungen und nicht der Daten einer Tabelle – sagt also etwas über die Gültigkeit von Werten im Rahmen einer Werteliste aus. " Weitere Produkte finden Sie bei [ROBOU2] . © 2001Ute Stegmann Seite 39 von 39 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3.2 Microsoft SQL 2000 Nach vielen Überlegungen zu Möglichkeiten und Anforderungen zur XML-Integration in Datenbanksystemen soll hier ein Einblick gegeben werden, in welchem Umfang die aktuelle Version des SQL Server 2000 von Microsoft derartige Features bereit stellt. Die Ausführungen beziehen sich auf die SQL 2000 Server Enterprise Edition (wobei sich lt. Produktdatenblatt die sog. StandardEdition in Bezug auf XML-Support identisch verhalten soll), nachfolgend nur noch mit MSSQL2K bezeichnet. Auch wenn der Produktname es nicht unbedingt vermuten lässt, kann man den MSSQL2K auch noch unter Windows NT 4.0 betreiben, im Zusammenhang mit Internettechnologien empfielt Microsoft allerdings den Einsatz unter Windows 2000 (höhere Performance des IIS). Ein Betrieb direkt unter Unix-OS ist nicht möglich; ein Betrieb in heterogener Umgebung aber realisierbar. Mit Hinblick auf das grundlegende Seminarthema "Datenbanken in Internetumgebungen" wurde eine Beispielanwendung erstellt, welche eine fiktive Datenbank anstatt über traditionelle ScriptingTechnologien nun weitestgehend über XML/XSL-Architektur des MSSQL2K "ins Web bringt". Zuerst aber eine Vertiefung der XML-Features und der Philosophie, die der MS-Lösung zugrunde liegt. Themenüberblick: 3.2.1 Begriffe 3.2.2 Lesezugriffe DB->XML 3.2.3 Schreibzugriffe XML->DB 3.2.4 Stylesheets 3.2.5 Security 3.2.6 Performance 3.2.7 Entwicklung/AddOns 3.2.8 Einsatz in Linux-/Unix-Umgebungen © 2001Thorsten Rood 3.2.1 Begriffe Bei der Beschreibung der XML-Architektur des SQL-Server besteht leicht die Möglichkeit, im Laufe des Textes in FLAs (four-letter-acronyms) und TLAs (three-letter-acronyms) zu verfallen und damit den Leser unmittelbar zu vergraulen. Da sich einige spezifische Abkürzungen nicht wirklich vermeiden lassen, folgt nun erst eine kleine Erklärung der Dienste, die einen Server auf WindowsBasis ans Internet ankoppeln (Firewall bleibt zur Vereinfachung unberücksichtigt). I. Internet Information Server Der Webserver der Microsoft Plattform ist der Internet Information Server [kurz: IIS], der aus getrennten Diensten für die Protokolle http(s) und ftp besteht. Seite 40 von 40 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann II. Plugin-Technologie Um nachträglich Funktionen in den Webserver bereitstellen zu können, ist das Internet Services Application Programming Interface [kurz: ISAPI] zu benutzen. Dies erlaubt es, http(s)-Anfragen in Abhängigkeit von Protokoll, URL bzw. URL-Pfad und/oder Dateinamenserweiterung durch entsprechende (genormte) Zusatzprogramme verarbeiten zu lassen. Dabei werden die notwendigen Module beim ersten Aufruf permanent in den Speicher geladen, so dass kein Performanceeinbruch entsteht. Der prominenteste Vertreter der Plugins ist das Modul für Active Server Pages [kurz: ASP], also die serverseitige Skriptsprache von Microsoft. In frühen Produktversionen (v3) war ASP tatsächlich noch gesondert zu installieren, seit IIS4 ist es serienmäßig "an Bord". Inzwischen existieren u.a. ISAPI-Module für PHP4, Perl, Phyton und die MS-Outlook WebOberfläche des Exchange Server 2000. III. Multi-Tier ...ist kein MS-spezifischer Ausdruck, aber dennoch wichtig zu wissen: Nur, weil man - rein technisch betrachtet - einige hundert Funktionalitäten auf einen einzigen Server packen kann, heißt das noch lange nicht, dass man das auch so realisieren sollte. Unter hoher Lastanforderung bzw. differenzierter Sicherheitsbedürfnisse muss man Dienste und Rechenlast auf mehrere Server verteilen und zwar u.a. eine Verteilung unter funktionalen Gesichtspunkten (z.B. Trennung von Web- und Datenbankserver). Man gelangt so zu einer n-tier-Architektur. Eine gängige Unterteilung für Internet-Anwendungen ist die 3-Tier-Architektur, d.h. • • • 1st-Tier: Client (Javascript oder "passiv") 2nd-Tier: Webserver (Server-Side Scripting) 3rd-Tier: Datenbankserver (SQL stored procedures) IV. Virtual Directories ...sind keine Erfindung von MS, sondern gängige Praxis in der Verwaltung eines Webservers. Über ein Alias, welches sich in der URL für den Benutzer wie ein Verzeichnis auf dem Webserver darstellt, können Daten aus dem nachgelagerten (und von außen damit eigentlich nicht erreichbaren) Netzwerk im Internet publiziert werden. Mit diesen Informationen sollte das nachfolgende Schaubild zur Implementation verständlich sein. Der XML-Support des MSSQL2K wird durch ein ISAPI-Plugin realisiert, welches sich in den IIS einklinkt und für jede entsprechend freigegebene SQL-Datenbank ein virtuelles Verzeichnis - relativ zum Root-Folder der selektierten Web-Site - konfiguriert. Über dieses Alias können die Datenbankzugriffe abgewickelt werden. Seite 41 von 41 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Abb301: Verteilung der Funktionen für den XML-Support im MSSSQL2K Durch die neue Technologie ergeben sich Veränderungen und Besonderheiten für die einzelnen Ebenen: 1st-Tier: Client Wünschenswert ist es nach meiner Meinung, dass der Endanwender von der neuen Technologie nicht negativ beeinflusst wird, d.h. nicht zum "Zwangs-Nachrüsten" genötigt wird. Damit bleibt die Möglichkeit des Exports von XML-Rohdaten über die http(s)-Schnittstelle nur speziell angepassten Anwendungen vorbehalten; für Browser muss eine Möglichkeit gefunden werden, den "üblichen" HTML-Output zu erzeugen. Während in einem Corporate Network kaum Bedenken gegen den Einsatz von Javascript vorherrschen dürften, muss für den Einsatz im Internet (z.B. in Shopping-Portalen, Ordersystemen im B2B, Informationssystemen, usw.) eine Möglichkeit existieren, dass der Benutzer auch mit deaktiviertem Javascript die Site ohne Einschränkungen benutzten kann. Auf die benötigte Technik der XSL-Stylesheets und des Skripting wird in nachfolgenden Kapiteln noch eingegangen. 2nd-Tier: IIS und SQLXML.DLL Der Middleware kommt die Aufgabe zu, die Datenbankstruktur nach außen hin abzuschirmen (vgl. nachfolgende Kapitel: Template-Technik) und ggf. eine Transformation des XML-Datenstroms in HTML-Code durchzuführen (vgl. nachfolgende Kapitel: XSL-Stylesheets). Außerdem besteht die Möglichkeit, die Datenstruktur der XML-Information an sich "on-the-fly" durch zusätzliche Schemabeschreibungen und -definitionen zu verändern [DTD, annotated schema]. Auf diese Technik wird aus Komplexitätsgründen nicht vertieft eingegangen. Nähere Informationen finden sich in [MSSQ1]. 3rd-Tier: SQL-Server Der SQL-Server wurde für die XML-Unterstützung mit neuen Funktionen ausgestattet. Neben der Fähigkeit des Streaming (weniger Zeitverzögerung bei Anfragen über http) sind zwei neue Schlüsselwörter in den SQL-Sprachdialekt [Transact-SQL] eingefügt worden: Seite 42 von 42 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann • • "select for xml" ist eine Erweiterung des Query-Befehls für Leseoperationen aus der Datenbank und sorgt (in Abhängigkeit weiterer Parameter) für eine Strukturierung der Datensätze als XML-Information anstatt als "klassisches Row-Set" (vgl. nachfolgendes Kapitel: Lesezugriffe DB->XML). "OpenXML" ist ein dynamischer Tabellenplatzhalter, der es gestattet, auf XML-Daten wie eine SQL-Tabelle zugreifen zu können (vgl. nachfolgendes Kapitel: Schreibzugriffe XML->DB). © 2001Thorsten Rood 3.2.2 Lesezugriffe DB->XML Der MSSQL2K unterstützt für Leseoperationen die bereits in den Grundlagen vorgestellten Technologien URL-SQL, URL-Template und URL-Template mit XPath. Natürlich sind auch Schreibzugriffe über diese Schnittstellen möglich, da die Mehrheit aller Befehle des Transact-SQL zur Verfügung steht - diese wären dann aber nur auf "eindimensionale" Eingabeparameter beschränkt und nicht auf die Verarbeitung eines komplexen Datenelements anwendbar. Die XPath-Funktionalität im Rahmen des virtuellen Verzeichnisses geht (in dieser Version des MSSQL2K) allerdings nicht so weit wie XPath-Anweisungen im Rahmen von XSL-Templates. Bei der Erstellung der Demoanwendung ist mir dies nicht als Einschränkung aufgefallen, da hauptsächlich XSL-Stylesheets gebraucht wurden. Bei neu entwickelten Anwendungen, welche direkt mit XMLDaten arbeiten können, mag das Fazit anders ausfallen. Ich glaube allerdings, dass die Mehrheit der XPath-Anweisungen auch über Selektionskriterien in den zugrunde liegenden Datenbankoperationen abzubilden ist. Das hätte dann zusätzlich den Vorteil, dass von vorneherein weniger Daten zur Verarbeitung übrig blieben - bei gleichem Ergebnis. Die drei erwähnten Schnittstellen können einzeln aktiviert bzw. deaktiviert werden. Beim Zugriff über alle Schnittstellen ist gemeinsam, dass im Ergebnis ein XML-Datensatz erwartet werden soll, so dass zwingend ein Statement der Art "select ... for xml ..." auftauchen wird. Diese Befehlserweiterung kennt drei verschiedene Parameter: • select ... for xml raw Der XML-Datensatz wird "ohne Gimmicks" transferiert, d.h. jeder Datensatz wird durch ein mit "row" benanntes Element ausgegeben. Dies ist nur bei eindimensionalen Datenbankabfragen sinnvoll. • select ... for xml auto Der XML-Datensatz wird "hübsch" formatiert, d.h. jedes Element wird so benannt wie die zugehörige Tabelle und Elemente aus einer 1:n-Relation bei geschickter Wahl der Tabellenfelder und deren Reihenfolge in der Abfrage auch "passend" hierarchisch geschachtelt. • select ... for xml explicit Hier stehen (fast) alle Möglichkeiten offen, d.h. der Programmierer/Designer muss die XML-Struktur selber definieren [DTD]. Eine detaillierte Beschreibung würde den Umfang des Seminars sprengen und findet sich in [MSSQ1]. Seite 43 von 43 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Unterstellt man folgende Datenbanktabelle Tabelle: "franchisers" bezeichnung plz ort Friedhelm Meier 42477 Radevormwald Franziskus GmbH 99999 In den Bergen dann sehen die XML-Datensätze so aus: select * from franchisers for xml raw <base> <row bezeichnung="Friedhelm Meier" plz="42477" ort="Radevormwald" /> <row bezeichnung="Franziskus GmbH" plz="99999" ort="In den Bergen" /> </base> select * from franchisers for xml auto <base> <franchisers bezeichnung="Friedhelm Meier" plz="42477" ort="Radevormwald" /> <franchisers bezeichnung="Franziskus GmbH" plz="99999" ort="In den Bergen" /> </base> Anmerkung: Die XML-ISAPI des MSSQL2K kann bei Leseoperationen auf der obersten Ebene des XML-Datensatzes nur ein eindimensionales Element verwalten [hier: <base>] - eine Erklärung liefert MS dafür nicht (wahrscheinlich vereinfacht es die Behandlung von "leeren" Abragen?). © 2001Thorsten Rood 3.2.2 Lesezugriffe DB->XML [URL-SQL] Eine Möglichkeit, per http(s) auf SQL-Daten zuzugreifen, ist der SQL-Query [URL-SQL], d.h. das SQL-Statement wird direkt in die URL verpackt. Mit einer solchen Methode wird natürlich die Struktur der Datenbank nach außen unmissverständlich offengelegt. Eine Kontrolle, welche Transact-SQL-Anweisungen möglich sind, wird nur noch über das verwendete Benutzerkonto, also die Sicherheitsstruktur im SQL-Server selbst, möglich (vgl. nachfolgendes Kapitel "Security"). Außerdem werden Hyperlinks sehr lang und unübersichtlich, so dass mir eine Verwendung nur im frühen Entwicklungsstadium einer Web-Applikation oder im Zuge einer ausgefeilten Sicherheitsstruktur und einer eigens erstellten Anwendung, welche die Befehle nicht mehr dem Benutzer preisgibt, sinnvoll erscheint. Sofern die URL-SQL-Schnittstelle freigeschaltet ist, akzeptiert das virtuelle IIS-Verzeichnis der Datenbank verschiedene Parameter: • • • sql=Transact-SQL-Anweisung in internet-konformer Notation root=Name des Parent-Elements xsl=Name des XSL-Stylesheets, d.h. Datenstrom wird auf das Stylesheet umgelenkt und entsprechend modifiziert (vgl. nachfolgendes Kapitel "Template-Matching") Seite 44 von 44 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Beispiele: http://demo.server.intranet/my_database?sql=select+*+from+franchisers+for+xml+auto&root=base http://demo.server.intranet/my_database?sql=exec+my_storedprocedure&root=base (my_storedprocedure: select * from franchisers for xml auto) © 2001Thorsten Rood 3.2.2 Lesezugriffe DB->XML [URL-Template] Eine typische Internet-Site mit Datenbankanbindung ist mit Sicherheit dadurch gekennzeichnet, dass sich die Datenbankabfragen ähneln und deshalb "nach Schema F" immer einheitlich ablaufen, abgesehen von situationsspezifischen Parametern (Produktnummern, Kundennummer, Ordernummer, usw.). In solchen Fällen bietet es sich an, diese Anweisungen in ein sog. Template zu speichern. Als Hyperlink bleibt ein Dateiname - ggf. mit Parametern - übrig. Da die Übergabe von Parametern nicht durch herstellerspezifische Erweiterungen erfolgt, sondern vom W3C genormt vorgegeben ist, kann man ein solches Template auch als "action"-URL eines Formular angeben. Beispiel: my_template.xml <base xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:header> <sql:param name="suche"></sql:param> </sql:header> <sql:query> select * from franchisers where ort=@suche for xml auto </sql:query> </base> http://demo.server.intranet/my_database/my_template.xml?suche=Radevormwald <base> <franchisers bezeichnung="Friedhelm Meier" plz="42477" ort="Radevormwald" /> </base> Die XML-ISAPI des MSSQL2K erkennt und verwaltet einen eigenen Namensraum sql, in den die Anweisungen und Parameterdefinitionen verkapselt werden müssen. Da es als XML-Datei den üblichen Syntaxanforderungen entsprechend muss, sind Vergleichsoperatoren in einer SelectAnweisung ggf. in Sonderzeichen zu deklarieren, d.h. select * from franchisers where min <= @numof and max >= @numof for xml auto Seite 45 von 45 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann wird zu select * from franchisers where min <= @numof and max >= @numof for xml auto da sonst der XML-Parser einen Fehler wegen Verletzung der Wohlgeformheitsanforderung melden wird. Der Vorteil der Lösung auf Template-Basis dürfte offensichtlich sein: Der Anwender sieht nichts mehr von der Datenbankstruktur, denn das XML-Template wird (ähnlich ASP-Skripts) nicht mehr an den Browser geliefert, sondern über das IIS-Plugin nur noch intern gelesen und verarbeitet. Der Client (z.B. Webbrowser) erhält nur noch das Abfrageergebnis. Auf diese Weise wird die Datenbanksicherheit und der Dateninhalt nicht durch Manipulationen von außen gefährdet. (Jedenfalls nicht mehr, als es die Templates in sich bereits zulassen.) Anmerkung: Das <root>-Element [hier: <base>] wird aus dem XML-Template übernommen. Natürlich können auch mehrere SQL-Anweisungen in mehreren <sql:query>-Abschnitten benutzt werden. © 2001Thorsten Rood 3.2.3 Schreibzugriffe XML->DB Einzelne Datensätze könnten prinzipiell auch über die im vorhergehenden Kapitel beschriebene Verkapselung durch XML-Templates angelegt und/oder aktualisiert werden, akzeptieren diese doch beliebige benutzerdefinierte Parameter und können Befehle wie INSERT und UPDATE ausführen. Dennoch gibt es Anwendungsszenarien für den XML-Import: Stellt man eine Schnittstelle zur Verfügung, welche eine "Massenverarbeitung" zulässt, so ist das Speichern eines einzelnen Datensatzes nur ein Spezialfall daraus. Die Erstellung und der Transport von Datensätzen kann "offline" erfolgen und ein späteres Zusammenführen über dieselbe Schnittstelle erfolgen wie im "online"-Betrieb. In Summe muss man also nur noch eine Schnittstelle pflegen und kann damit eine Vielzahl von Anwendungsszenarien abdecken... Um die Hürde von einer strukturierten (evtl. hierarchischen) XML-Datenstruktur zu einer für RDBMS typischen "flachen" Tabellenstruktur zu nehmen, stellt der MSSQL2K das Schlüsselwort OPENXML (mit entsprechenden Parametern) zur Verfügung. OPENXML ist ein sog. "Rowset-Provider", d.h. an jeder Stelle, an der die Transact-SQL-Sprachsyntax die lesende Benutzung einer Datenbanktabelle erlaubt, kann OPENXML eingesetzt werden. Seite 46 von 46 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Abb302: Interpretation von XML-Daten als Tabellenform mit OpenXML Was passiert hier? Nun, zuerst noch eine Anmerkung: Die Verarbeitung eines XML-Dokuments kann sehr komplex werden, so dass der Zugriff über OPENXML mehrfach notwendig wird. Würde nun bei jedem Aufruf der XML-Datensatz neu analysiert und bereitgestellt werden, so wäre die Performance rasch "im Keller". Deshalb kann man OPENXML nicht ohne "Vorbereitungen" einsetzen - mit zwei internen stored procedures sp_xml_preparedocument und sp_xml_removedocument muss die Benutzung von OPENXML explizit verkapselt werden. Dadurch wird die XML-Struktur nur einmal geprüft und im Speicher aufgebaut. Mit dem OPENXML-Platzhalter wird aus einem hierarchischen XML-Dokument eine "flache" Datenbanktabelle. Mit Rückgriff auf bekannte Beispiele nun ein etwas komplizierterer XMLDatensatz: <base> <locations name="Radevormwald" plz="42477"> <franchisers bezeichnung="Friedhelm Meier" unique_key="76" /> <franchisers bezeichnung="Friedrich Müller" unique_key="10056" /> </locations> </locations name="In den Bergen" plz="99999"> <franchisers bezeichnung="Franziskus GmbH" unique_key="429" /> </locations> </base> Seite 47 von 47 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Um die hier vorliegenden Informationen verarbeitbar zu gestalten, muss das XML-Dokument als Datenbankzeilen interpretiert werden; ein "Cursor" muss für die <franchisers> auf der X-Path-Ebene "/base/locations/franchisers", für <locations> auf der X-Path-Ebene "/base/locations" durch die Dokumentstruktur laufen. Außerdem muss dem OPENXML-Platzhalter die gewünschte Struktur der Datensätze und die Zuordnung von Tabellenfeldern zu XML-Attributen und -elementen beigefügt werden ("with"-Klausel). Eine mögliche OPENXML-Syntax wäre also: exec sp_xml_preparedocument @xml_dom, OUTPUT, @xml_input ... ... ... select * from OPENXML (@xml_dom, '/base/locations/franchisers', 2) with (bezeichnung varchar(30) '@bezeichnung', plz varchar(5) '../@plz', ort varchar(30) '../@name', id int '@unique_key') ... ... ... select * from OPENXML (@xml_dom, '/base/locations', 2) with (plz varchar(5) '@plz', ort varchar(30) '@name') ... ... ... exec sp_xml_removedocument @xml_dom OPENXML /base/locations/franchisers bezeichnung plz ort Friedhelm Meier 42477 Radevormwald 76 Friedrich Müller 42477 Radevormwald 10056 Franziskus GmbH 99999 In den Bergen id 429 OPENXML /base/locations plz ort 42477 Radevormwald 99999 In den Bergen Ein berechtigter Einwand wäre jetzt "Hey, da wird ja gar nichts in die Datenbank gespeichert!". Stimmt - in diesem Beispiel (noch) nicht. Nun dürfte aber nachvollziehbar sein, was über OPENXML eigentlich zurückgeliefert wird. © 2001Thorsten Rood Seite 48 von 48 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3.2.3 Schreibzugriffe XML->DB [Fortsetzung] Nun komme ich zum eigentlichen Update. Nicht ohne Grund enthält die fiktive Datenbanktabelle <franchisers> einen Primärschlüssel "id", schließlich muss ein Mechanismus existieren, die Datensätze eindeutig zu identifizieren. So kommt man zur Aktualisierung von Datensätzen: exec sp_xml_preparedocument @xml_dom, OUTPUT, @xml_input ... ... ... update franchisers set franchisers.bezeichnung = my_input.bezeichung, franchisers.plz = my_input.plz, franchisers.ort = my_input.ort from OPENXML (@xml_dom, '/base/locations/franchisers', 2) with (bezeichnung varchar(30) '@bezeichnung', plz varchar(5) '../@plz', ort varchar(30) '../@name', id int '@unique_key') as my_input where franchisers.id = my_input.id ... ... ... exec sp_xml_removedocument @xml_dom Wahrscheinlich ist die hier verwendete Syntax nicht so bekannt, deshalb folgende Erläuterung: Die Aktualisierung eines einzelnen Datensatzes kennt man in der SQL-Notation update <table> set (<field1>,<field2>,...,<field_n>) values (<value1>,<value2>,...,<value_n>) where <table>.<any_field> = <expression> um einen einzelnen Datensatz zu aktualisieren. Zulässig in Transact-SQL ist aber auch die Verwendung einer weiteren Datenbanktabelle, um eine "Massenverarbeitung" zuzulassen: update <table1> set <table1>.<field1> = <table2>.<field1>, <table1>.<field2> = <table2>.<field2>, ... <table1>.<field_n> = <table2>.<field_n> from <table2> where <table1>.<any_field> = <table2>.<any_field> Fügt man in der letzteren Syntax statt <table2> die OPENXML-Technologie ein, erhält man das oben angegebene Beispiel. Natürlich wird die ganze Angelegenheit noch etwas komplizierter, wenn man auch auf der Seite der SQL-Datenbank eine relationale Anordnung der Daten unterstellt. Dies würde Seite 49 von 49 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann aber den hier vorgestellten Rahmen deutlich sprengen und fällt auch eher in das Themengebiet "SQLSprachsyntax und -dialekte"... Die einfachsten Dinge benötigen oft mehr Erklärung als im Kern eigentlich passiert. So auch hier. Bisher war nur von Transact-SQL-Anweisungen die Rede. Bleibt noch zu (er)klären, wie die Brücke vom Internet hin zu OPENXML zu nehmen ist. Die Lösung wurde schon im Rahmen der Lesezugriffe dargestellt: URL-Templates. So sieht dann das fertige "Kochrezept" für OPENXML aus: 1. Aufbau eines XML-Datensatzes durch Javascript im Webbrowser, durch Übergabe der entsprechenden Felder an eine ASP-Seite, welche diesen Datensatz serverbasiert erzeugt oder durch eine spezifische Anwendung, die mit http-Aufrufen umgehen kann. 2. Aufruf eines URL-Templates, welches den XML-Datensatz als Parameter akzeptiert und als SQL-Anweisung eine benutzerdefinierte stored procedure ansteuert. 3. Definition einer benutzerdefinierten stored procedure, welche die OPENXMLTechnologie benutzt. Vollständige Lösung: my_template.xml <base xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:header> <sql:param name="datensatz"></sql:param> </sql:header> <sql:query> exec my_xmlupdate @datensatz </sql:query> </base> stored procedure my_xmlupdate create procedure [dbo].[my_xmlupdate] @xml_input ntext as exec sp_xml_preparedocument @xml_dom, OUTPUT, @xml_input update franchisers set franchisers.bezeichnung = my_input.bezeichung, franchisers.plz = my_input.plz, franchisers.ort = my_input.ort from OPENXML (@xml_dom, '/base/locations/franchisers', 2) with (bezeichnung varchar(30) '@bezeichnung', plz varchar(5) '../@plz', ort varchar(30) '../@name', id int '@unique_key') as my_input where franchisers.id = my_input.id exec sp_xml_removedocument @xml_dom go Seite 50 von 50 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann http(s)-Aufruf http://demo.server.intranet/my_database/my_xmlupdate.xml?datensatz=<base><locations>...</locations></base> Auf diese Weise wird die Rechenlast auf dem Web-Server deutlich reduziert, da sämtliche Datenbankoperationen unmittelbar auf dem SQL-Server ausgeführt werden. Zudem sind stored procedures vorcompiliert, so dass die Verarbeitung insgesamt schneller erfolgt als bei einer Lösung, welche die Daten im Rahmen eines serverbasierten Skripts in der Datenbank aktualisiert. © 2001Thorsten Rood 3.2.4 Stylesheets Für speziell angepasste Anwendungen ist die XML-Schnittstelle zur Kommunikation ausreichend. Ein (i.d.R. anonymer) Anwender im Internet stellt "höhere" Anforderungen; hier muss die Darstellung der HTML-Syntax genügen. Zu diesem Zweck gibt es die Möglichkeit, das "XML-Ergebnis" einer URL-SQL-Abfrage bzw. eines URL-Templates einem XSLT-Prozessor zu übergeben. Dieser traversiert unter Zuhilfenahme eines XSL-Stylesheets die XML-Quelledaten in ein neues Dokument. Bei geschickter Wahl der Ersetzungsregeln entsteht ein HTML-Dokument. Diese Umformungen geschehen auf dem Webserver selbst und funktionieren demnach auch mit "uralten" Browsern. Anwendung von XSLT: URL-SQL Aufruf http://demo.server.intranet/my_database?sql=select+*+from+franchisers+for+xml+auto&root=base &xsl=my_stylesheet.xsl URL-Template Aufruf http://demo.server.intranet/my_database/template.xml template.xml <base xmlns:sql="urn:schemas-microsoft-com:xml-sql" sql:xsl="my_stylesheet.xsl"> <sql:query> select * from franchisers for xml auto </sql:query> </base> Seite 51 von 51 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Bei der Erstellung des XSL-Stylesheets und der zugehörigen X-Path-Navigation ist zu berücksichtigen, dass in der Microsoft-Implementation für den XML-Datensatz aus den Tabellenbezeichnungen die Elementnamen und aus den Feldbezeichnungen die Attributnamen gebildet werden, sofern nicht durch ein benutzerdefiniertes Schema (im Rahmen dieses Referats nicht weiter besprochen) die Struktur gänzlich anders aufgebaut wird. Ein einfaches Beispiel: Die auf der vorhergehenden Seite beschriebenen Datenbankabfragen erzeugen (intern) folgenden Datensatz: <base> <franchisers bezeichnung="Friedhelm Meier" plz="42477" ort="Radevormwald" /> <franchisers bezeichnung="Franziskus GmbH" plz="99999" ort="In den Bergen" /> </base> Bei Benutzung des folgenden Stylessheets my_stylesheet.xsl <?xml version='1.0' encoding='utf-8'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output media-type="text/html"/> <xsl:template match="/"> <html> <head><meta http-equiv="Content-type" content="text/html; charset=utf-8"/></head> <body> <table> <tr> <td><b>bezeichnung</b></td> <td><b>plz</b></td> <td><b>ort</b></td> </tr> <xsl:apply-templates select="base/franchisers"/> </table> </body> </html> </xsl:template> <xsl:template match="franchisers"> <tr> <td><xsl:value-of select="@bezeichnung"/></td> <td><xsl:value-of select="@plz"/></td> <td><xsl:value-of select="@ort"/></td> </tr> </xsl:template> </xsl:stylesheet> entsteht dieses HTML-Ergebnis: bezeichnung plz ort Friedhelm Meier 42477 Radevormwald Franziskus GmbH 99999 In den Bergen Seite 52 von 52 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Vorsicht, Falle: Selbst wenn der Web-Browser in der Lage ist, XML-Daten darzustellen (z.B. MS Internet Explorer ab v5), reicht es nicht aus, die notwendigen HTML-Informationen zu ergänzen, es muss außerdem der MIME Content Type (um)definiert werden, da der Browser sonst trotzdem einen Anzeigemodus wählt, der die Informationen strukturiert darstellt. Zu diesem Zweck wird ein Element output im xsl-Namensraum zur Verfügung gestellt: <?xml version='1.0' encoding='utf-8'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output media-type="text/html"/> <xsl:template match="/"> ... </xsl:template> </xsl:stylesheet> © 2001Thorsten Rood Seite 53 von 53 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3.2.5 Security Mit der Freigabe einer Datenbank im Internet geht i.d.R. auch die Frage nach Sicherheitsmechanismen einher. Selbst wenn der Datenbankinhalt einen öffentlichen Charakter besitzt, so muss dennoch die Integrität und Struktur der Daten vor unbefugter Benutzung geschützt werden. Im Zusammenhang mit XML-Technologie ist diese Frage besonders bedeutsam, handelt es sich doch um ein offenes und meist selbsterklärendes Datenformat. Zu klären ist (min.) die Fragestellung "wer kann wie und von wo in welchem Umfang auf welche Daten der Datenbank zugreifen"? 1. wer? Die Freigabe der Datenbank geschieht unabhängig bzw. ergänzend zur der Rechtestruktur des Web-Servers, auf dem das virtuelle Verzeichnis für den XML-Support eingerichtet wird. Beim anonymen Zugriff wird das virtuelle Verzeichnis so konfiguriert, dass alle Datenbankzugriffe über ein einheitliches Benutzerkonto abgewickelt werden (welches dann inkl. Passwort auf dem IIS konfiguriert wird). Andernfalls wird beim ersten Zugriff (genauer: bei Initialisierung der ersten IIS-Session pro Client) eine Kombination von Benutzername und Passwort angefordert. Wichtig: An dieser Stelle wird nur die Kombination von Benutzer und Passwort geklärt, mehr nicht! 2. von wo? Da der XML-Support als IIS-ISAPI realisiert ist, müssen alle Anfragen an die Datenbank über den IIS geleitet werden. Deshalb erbt die XML-Freigabe die Rechtestrukturen des IIS bezogen auf den angesprochenen Web-Server. Dazu gehört z.B. die Definition der zulässigen IP-Adressbereiche (also beispielsweise eine Einschränkung auf die Rechner des Corporate Network eines Unternehmens). Ebenfalls über den IIS wird geregelt, ob als Zugriffsprotokoll http oder https gewählt/notwendig ist. 3. in welchem Umfang auf welche Daten? Die eigentliche Verwaltung und Einhaltung der Rechtestruktur obliegt ausschließlich dem SQL-Server, d.h. der Benutzer erhält genau den Zugriffsumfang, welcher dem Benutzerkonto aus 1) auf dem SQL-Server eingeräumt wurde. Gängige Unterscheidungen sind Lese-, Schreib- und DBO-Rechte (DBO=Database owner).; eine sehr viel granularere Unterscheidung ist natürlich (bis auf Feldebene) möglich... 4. mit welchen Techniken? Eine generelle Voreinstellung der XML-Freigabe unterscheidet zusätzlich zwischen Zugriffen durch URL-SQL, URL-Template, URL-XPath und http-post. Diese können getrennt voneinander (global pro virtuellem XML-Verzeichnis) eingestellt werden. Eine mehrfache Bereitstellung der Datenbank (bzw. der XML-Features) unter verschiedenen Rechtestrukturen ist möglich, entsprechend viele virtuelle Verzeichnisse sind zu konfigurieren und zu verwalten. Vorsicht, Falle: Wird eine Freischaltung für URL-SQL nach Abschluss der Testphase nicht deaktiviert, so kann - wenn die Datenbank mit einem Benutzerkonto auf dem Level des DBO oder gar des SA erreichbar ist - ein unbefugter Benutzer ohne Rückfrage ein SQL-Statement ähnlich "drop <table>" oder "drop <database>" ausführen! © 2001Thorsten Rood Seite 54 von 54 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3.2.6 Performance Die Rechenlast zur Traversierung des Quelldokuments in HTML wird auf dem Web-Server generiert. Allerdings ist die Vorgehensweise über XML/XSL schneller als über den "klassischen" Weg des Skripting, bei dem Datenbankabfragen und Erzeugung der Ausgabe zeilenweise durch den IIS realisiert werden und entlastet den Server also trotzdem. Für den fiktiven Anwendungsfall eines Shopping-Portals gibt Microsoft in [MSMS2] Vergleichsergebnisse zwischen ASP und XML/XSL für eine definierte Hardwareplattform bekannt: Abb303: Performance des MSSSQL2K bei XSLT-Benutzung im Vergleich zu ASP Diese Performance-Werte beziehen sich auf ungepufferte Abfrageszenarien. Unter Berücksichtigung von Geschwindigkeitsverbesserungen durch Caching soll sich die "positive Lücke" um den Faktor 10 vergrößern. © 2001Thorsten Rood Seite 55 von 55 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3.2.7 Entwicklung/AddOns Wenngleich eine Verarbeitung von XML-Datenpaketen beim Speichern mit dem OPENXMLPlatzhalter zum Erfolg führt, muss man (wie beschrieben) noch sehr viel Handarbeit bei der Erstelltung der zuständigen Stored Procedure(s) aufwenden. Dies ist fehleranfällig, in punkto Geschwindigkeit noch nicht sehr performant und nach meiner Meinung auch sehr lästig. Als jüngste Entwicklung sollte man sich das Zusatzpaket XML for SQL Web Release 1 ansehen, welches die ISAPI-Erweiterung um neue Funktionen ergänzt. Zum einen das Bulk-Load (Nutzung von Streaming-Features beim Entgegennehmen von XML-Daten) und in diesem Zusammenhang besonders interessant die sogenannten Updategrams: Durch geschickte Strukturierung der XMLDaten als "vorher/nachher"-Information werden die notwendigen INSERT-, UPDATE- und DELETEOperationen dann automatisch ausgeführt. Da dieses Zusatzprodukt erst seit kurzem den Beta-Status verlassen und nun als kostenfreies FeatureRelease bereitsteht, entfällt hier eine detaillierte Beschreibung, zumal hier auch die DTD-Technik (wieder) relevant wird und damit der Umfang des Seminars gesprengt wird. Bedenkt man, dass der XML-Support in der aktuellen Version des MSSQL2K gerade erst Version 1.0 erreicht hat, sind hier bestimmt noch spannende Veränderungen zu erwarten. Dieser Eindruck hat sich bei mir während der Themenbearbeitung ohnehin vertieft, denn herstellerübergreifend ist der Thema XML sehr stark "in Bewegung"... © 2001Thorsten Rood 3.2.8 Einsatz in Linux-/Unix-Umgebungen In einem homogenen Umfeld aus Microsoft-Produkten, in dem vom Desktop über den BackboneBereich bis hin zum Hosting die wesentlichen Technologien auf Microsoft basieren, gestaltet sich der Einsatz der XML-Features relativ unproblematisch. Zu einem wesentlichen Teil trifft man (z.B. aus Gründen der Lizenzproblematik und dem positiven Standing von Unix und -derivaten im e-Business) aber auf Konstellationen, in denen eine Vielzahl von Betriebssystemen und -plattformen miteinander integriert werden muss. Nachfolgend einige Überlegungen zu einer Koexistenz von MSSQL2K-XML und Unix/Linux, der wohl häufigsten Kombination in einem heterogenen Umfeld. Grundsätzlich glaube ich, dass sich diese gemischte Umgebung nur ergibt, wenn ein Unternehmen im Backbone bereits vorher eine Microsoft-Infrastruktur (als Ergänzung oder gleichberechtigt) unterhält, denn niemand wird nach meiner Überzeugung nur wegen der XML-Features den MSSQL2K implementieren, wenn damit auch die (Neu)einführung der Microsoft-Plattform notwendig wird. Für solche Fälle gibt es genügend Alternativanbieter, deren Lösung unmittelbar auf Unix/Linux aufgesetzt werden kann. Mögliche Implementationsszenarien: 1. Einbinden des MSSQL2K als virtuelles Verzeichnis auf dem Unix-System Vorteil: schnellste Implementationsvariante Nachteil: langsame Performance 2. Verkapselung des MSSQL2K in Skripting-Technologien auf dem Unix-System Vorteil: "sanfte" Migration von bestehenden Lösungen Nachteil: kein unmittelbarer Zugriff auf XML-Upload/-download von externen Clients, sofern nicht entsprechende weitere Schnittstellen auf dem Unix-Host konfiguriert werden 3. Unterscheidung der Serverumgebungen durch die Port-Adresse durch Aufteilung der http(s)-Anfragen über die vorgelagerte Firewall bzw. die vorgelagerten Load-Balancer Vorteil: Koexistenz aller Features aus beiden Systemen Nachteil: intuitive Eingabe der URLs nicht mehr möglich, d.h. Pflege und Administration der Internet-Site wird aufwendiger © 2001Thorsten Rood Seite 56 von 56 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3.3 Oracle 8i/9i XML-SQL Utility(XSU) In Kapitel 3.1.4 haben wir bereits eine kurze Zusammenfassung der Features von Oracle bezüglich XML gegeben. Hier noch einmal die Übersicht laut [ORACLE1]: "Erweiterte XML Unterstützung XML SQL Utility Oracles XML SQL Utility ermöglicht das Schreiben und Lesen von XML Dokumenten in ihrem nativen Format in die Datenbank bzw. aus der Datenbank. Enhanced XML Development Kits (XDK) XML Development Kits für Java, Java Beans, C, C++ und PL/SQL wurden in die Oracle Internet Developer Suite integriert. Dieses XDK beinhaltet: • • • • • XML Parser für den programmatischen Zugang zu XML Dokumenten. XSL Prozessoren transformieren jedes XML Dokument in jedes beliebige textbasierte Format (z.B. HTML) XML Klassen Generatoren generieren Class-Files für die Erzeugung von XML Documenten, die in Anwendungen, Applets und JavaServer Pages verwendet werden. XML Java Beans bieten sichtbare und nichtsichtbare XML Funktionalitäten (z.B. Viewing, Parsing und die Transformation von XML Dokumenten) XSQL Servlets produzieren dynamische XML oder HTML Dokumente als Resultat von SQL Abfragen über das Internet" Wir wollen hier über das mit der Oracle Datenbank 8i bzw. der neuesten Version 9i nutzbare XML SQL Utility berichten. Vorweg aber noch ein Hinweis auf zum XSQL Servlet: XSQL ist ein Java-Servlet von Oracle, das XML-Dokumente aus SQL-Anfragen liefert und diese über ein XSLT-Stylesheet weiterverarbeiten kann. XSQL kann frei verwendet werden. Hierüber können die mit dem XML SQL Utility gelieferten Funktionalitäten in einem Java Servlet genutzt werden. Im Kapitel Demo XSQL Servlets stellen wir einen Link zu einer Demo-Seite des Oracle Technology Network (OTN) im Internet bereit. Auf dieser Seite stellt Oracle kleine Beispiele teilweise inklusive des Source-Codes zum ausprobieren bereit. Nun aber zu dem XML SQL Utility (XSU): 3.3.1 Oracle XML-SQL Utility [Funktionsprinzip] 3.3.2 Oracle XML-SQL Utility [Command Line Front End] 3.3.3 Oracle XML-SQL Utility [Java API] 3.3.4 Oracle XML-SQL Utility [PL/SQL] © 2001Matthias Knop, Ute Stegmann Seite 57 von 57 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3.3.1 Oracle XML-SQL Utility [Funktionsprinzip] Vorbemerkung: Als Informationsquelle des nachfoldenen Beitrags wurde [XSU1], der XSUDokumentation von Oracle verwendet. Das Oracle XML SQL-Utility (XSU) ist in Java geschrieben, es kann deshalb laut Oracle im Prinzip in allen Archithektur-Komponenten genutzt werden, die Java unterstützen. Nachfolgend erhaltenÜberblick über die Einsatzmöglichkeiten und das Funktionsprinzip: Einsatz von XML-SQL Utility in der Datenbank (Genereller Überblick) Die Datenbank Oracle 8i bzw. spätere Versionen unterstützt Java ("java enabled Oracle 8i"). Die JavaKLassen des XSU können deshalb in die Datenbank geladen werden . Zusätzlich können sie auch über Oracles stored Procedures ("PL/SQL") genutzt werden. Einschub für alle die mit PL/SQL nichts anfangen können: PL/SQL ist die prozedurale Sprache von Oracle. Sie umfaßt die Standardsprache von SQL und einen weiten Bereich von Befehlen, mit denen man die Ausführung von SQL-Anweisungen entsprechend unterschiedlicher Bedingungen steuern kann. PL/SQL kann auch Laufzeitfehler behandeln. Möglichkeiten wie Schleifen und IF...THEN-Anweisungen verleihen PL/SQL die Leistungsfähigkeit von Programmiersprachen der dritten Generation. Es lassen sich interaktive, benutzerfreundliche Programme schreiben, die Werte an Variablen übergeben können. Zum Lieferumfang gehören verschiedene vordefinierte Pakete, zum Beispiel für die Anzeige von Meldungen für den Benutzer. Nun zum Einsatz von XSU in Datenbanken: Seite 58 von 58 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Einsatz von XML-SQL Utility in "Middle Tier" Wie schon gesagt, XSU kann in "Middle Tier"-Komponenten genutzt werden, die Java unterstützen. Einsatz von XML-SQL Utility in Web-Servern Auf Web-Servern kann XSU verwendet werden, sofern diese Java servlets unterstützen Einsatz von XML-SQL Utility auf dem Client Auf dem Client können im Prinzip genauso Java-Programme unter verwendung des XSU geschrieben werden. Oder man verwendet das Command Line Front End Funktionsprinzip und Mapping (Abbildung XML-DB)des XSU Es werden die Funktionen Select, Insert, Update und Delete unterstützt. Update und Delete werden allerdings nur von dem Java API und den PL/SQL und nicht von dem Command Line Front End unterstützt. Laut Oracle soll dies aber später folgend. Das grundsätzliche Prinzip folgt in etwa dem Vorgehen, wie wir es bereits in 2.3. bzw. 2.3. erläutert haben. Das Prinzip des Mappings von XML in relationale Datenbanken haben wir ebenfalls in den Seite 59 von 59 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Grundlagen erläutert. Zu erwähnen wäre noch, dass Oracle inzwischen eine Object-relationale datenbank ist, d.h. es werden auch Object-Typen. Im folgenden ein paar Mapping-Beispiele aus [XSU1]: Beispiel 1: CREATE TABLE emp ( EMPNO NUMBER, ENAME VARCHAR2(20), JOB VARCHAR2(20), MGR NUMBER, HIREDATE DATE, SAL NUMBER, DEPTNO NUMBER ); Specified the query "select * from emp", the XSU would generate the following XML document: <?xml version='1.0'?> <ROWSET> <ROW num="1"> <EMPNO>7369</EMPNO> <ENAME>Smith</ENAME> <JOB>CLERK</JOB> <MGR>7902</MGR> <HIREDATE>12/17/1980 0:0:0</HIREDATE> <SAL>800</SAL> <DEPTNO>20</DEPTNO> </ROW> <!-- additional rows ... --> </ROWSET> Beispiel 2: Next we describe this mapping but against an object-relational schema like the following: The AddressType is an object type whose attributes are all scalar types... CREATE TYPE AddressType AS OBJECT ( STREET VARCHAR2(20), CITY VARCHAR2(20), STATE CHAR(2), ZIP VARCHAR2(10) ); / An EmplyeeType is also an object type but whose EMPADDR attribute is of an object type itself, specifically AddressType... CREATE TYPE EmployeeType AS OBJECT ( EMPNO NUMBER, ENAME VARCHAR2(20), SALARY NUMBER, EMPADDR AddressType ); Seite 60 von 60 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann EmployeeListType is a collection type whose elements are of EmployeeType object type... CREATE TYPE EmployeeListType AS TABLE OF EmployeeType; / Finally, dept is a table with, among other things, an object type column and a collection type column -- AddressType and EmployeeListType respectively. CREATE TABLE dept ( DEPTNO NUMBER, DEPTNAME VARCHAR2(20), DEPTADDR AddressType, EMPLIST EmployeeListType ); Assuming that valid values are stored in the dept table, given the query "select * from dept", the XSU will generate the following XML document: <?xml version='1.0'?> <ROWSET> <ROW num="1"> <DEPTNO>100</DEPTNO> <DEPTNAME>Sports</DEPTNAME> <DEPTADDR> <STREET>100 Redwood Shores Pkwy</STREET> <CITY>Redwood Shores</CITY> <STATE>CA</STATE> <ZIP>94065</ZIP> </DEPTADDR> <EMPLIST> <EMPLIST_ITEM num="1"> <EMPNO>7369</EMPNO> <ENAME>John</ENAME> <SALARY>10000</SALARY> <EMPADDR> <STREET>300 Embarcadero</STREET> <CITY>Palo Alto</CITY> <STATE>CA</STATE> <ZIP>94056</ZIP> </EMPADDR> </EMPLIST_ITEM> <!-- additional employee types within the employee list --> </EMPLIST> </ROW> <!-- additional rows ... --> </ROWSET> As in the last example, the mapping is canonical -- <ROWSET> contains <ROW>'s which contain elements corresponding to columns. And as before, the elements corresponding to scalar type columns simply contain the data from the colu Seite 61 von 61 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Nun noch Beispiele für Insert, Update und Delete: Beispiel Insert: For example, assume that the target table is dept and the XML document is the one generated from dept (see: Default SQL to XML Mapping). XSU would generate the following insert statement. INSERT INTO Dept (DEPTNO, DEPTNAME, DEPTADDR, EMPLIST) VALUES (?,?,?,?) Next, the XSU would parse the XML document, and for each record, it would bind the appropriate values to the appropriate columns/attributes and execute the statement: DEPTNO <- 100 DEPTNAME <- SPORTS DEPTADDR <- AddressType('100 Redwood Shores Pkwy','Redwood Shores', 'CA','94065') EMPLIST <- EmployeeListType(EmployeeType(7369,'John',100000, AddressType('300 Embarcadero','Palo Alto','CA','94056'),...) Beispiel Update: For example, to update the DEPTNAME to SportsDept instead of Sports, you can have an XML document such as, <ROWSET> <ROW num="1"> <DEPTNO>100</DEPTNO> <DEPTNAME>SportsDept</DEPTNAME> </ROW> </ROWSET> and supply the DEPTNO as the key column. This would fire off the following update statement: UPDATE DEPT SET DEPTNAME = ? WHERE DEPTNO = ? and bind the values, DEPTNO <- 100 DEPTNAME <- SportsDept Seite 62 von 62 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Beispiel Delete: Given a document such as: <ROWSET> <ROW num="1"> <DEPTNO>100</DEPTNO> <DEPTNAME>Sports</DEPTNAME> <DEPTADDR> <STREET>100 Redwood Shores Pkwy</STREET> <CITY>Redwood Shores</CITY> <STATE>CA</STATE> <ZIP>94065</ZIP> </DEPTADDR> </ROW> <!-- additional rows ... --> </ROWSET> to delete, the utility will fire off a delete statement (one per ROW element) which would look like the following: DELETE FROM Dept WHERE DEPTNO = ? AND DEPTNAME = ? AND DEPTADDR = ? binding, DEPTNO <- 100 DEPTNAME <- Sports DEPTADDR <- AddressType('100 Redwood Shores Pkwy','Redwood City','CA','94065') © 2001Matthias Knop, Ute Stegmann 3.3.2 Oracle XML-SQL Utility [Command Line Front End] Das Command Line Front End wird als Kommandozeilenbefehl direkt aufgerufen. Beispiel-Aufruf: java OracleXML getXML -user "scott/tiger" "select * from emp" This performs the following tasks: Connects to the current default database Executes the query "select * from emp" Converts the result to XML Displays the result Es werden die die Funktionen getXML und putXML mit der nachfolgenden Syntax angeboten: Seite 63 von 63 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann -getXML Option Description -user "<username>/<password>" Used to specify the user name and password to connect to the database. If this is not specified, the user defaults to "scott/tiger". Note that he connect string is also being specified, the user name and password can be specified as part of the connect string. -conn "<JDBC_connect_string>" Used to specify the JDBC database connect string. By default the connect string is: "jdbc:oracle:oci8:@"): -withDTD Instructs the XSU to generate the DTD along with the XML document. -rowsetTag "<tag_name>" Used to specify rowset tag (i.e. the tag that encloses all the XML elements corresponding to the records returned by the query) The default rowset tag is ROWSET. Specifying an empty string for the rowset tells the xsu to completely omit the rowset element. -rowTag "<tag_name>" Used to specify the row tag (the tag used to enclose the data coresponding to a database row). The default row tag is ROW. Specifying an empty string for the row tag tells the xsu to completely omit the row tag. -rowIdAttr "<row_id-attribute-name>" Used to name the attribute of the ROW element keeping track of the cardinality of the rows. By default this attribute is called "num". Specifying an empty string (i.e. "") as the row id attribute will tell the XSU to omit the attribute. -rowIdColumn "<row Id column name>" Used to specify that the value of one of the scalar columns from the query should be used as the value of the row id attribute. -collectionIdAttr "<collection id attribute Used to name the attribute of a XML list element keeping track of the cardinality of the elements of the list (note: the generated XML lists name>" correspond to either a cursor query, or collection). Specifying an empty string (i.e. "") as the row id attribute will tell the XSU to omit the attribute.. -useNullAttrId Used to tell the XSU to use the attribute "NULL (TRUE/FALSE)" to indicate the nullness of an element. -styleSheet "<stylesheet URI>" Used to specify the stylesheet in the XML PI (Processing Instruction). -stylesheetType "<stylesheet type>" Used to specify the stylesheet type in the XML PI (Processing Instruction). -errorTag "<error tag name>" Used to specify the error tag -- the tag to enclose error messages which are formated into XML. -raiseNoRowsException Used to tell the XSU to raise an exception if no rows are returned. -maxRows "<maximum number of rows>" Used to specify the maximum number of rows to be retreived and converted to XML. -skipRows "<number of rows to skip>" Used to specify the number of rows to be skipped. -encoding "<encoding name>" Used to specify the characterset encoding of the generated XML. -dateFormat "<date format>" Used to specify the date format for the date values in the XML document. -fileName "<SQL query fileName>" | <sql query> Used to specify the file name which contains the query or specify the query itself. Seite 64 von 64 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann -putXML Options Description -user "<username>/<password>" Used to specify the user name and password to connect to the database. If this is not specified, the user defaults to "scott/tiger". Note that he connect string is also being specified, the user name and password can be specified as part of the connect string. -conn "<JDBC_connect_string>" Used to specify the JDBC database connect string. By default the connect string is: "jdbc:oracle:oci8:@"): -batchSize "<batching size>" Used to specify the batch size, which control the number of rows which are batched together and inserted in a single trip to the database. Batching improves performance. -commitBatch "<commit size>" Used to specify the number of inserted records after which a commit is to be executed. Note that if the autocommit is true (default), then setting the commitBatch has no consequence. -rowTag "<tag_name>" Used to specify the row tag (the tag used to enclose the data coresponding to a database row). The default row tag is ROW. Specifying an empty string for the row tag tells the XSU that no row enclosing tag is used in the XML document. -dateFormat "<date format>" Used to specify the date format for the date values in the XML document. -ignoreCase Used to make the matching of the column names with tag names case insensitive (e.g. "EmpNo" will match with "EMPNO" if ignoreCase is on). -fileName "<file name>" | -URL "<url>" Used to specify the XML document to insert. The fileName option specifies a local file, the URL specifies a URL to fetch the document | -xmlDoc "<xml document>" from and the xmlDoc option inlines the XML document as a string on the command line. <tableName> The name of the table to put the values into. © 2001Matthias Knop, Ute Stegmann 3.3.3 Oracle XML-SQL Utility [Java API] Das Java API des XSU beinhaltet folgende Möglichkeiten: Generieren von XML mit XML SQL Utility für Java: Grundsätzliche Schritte Seite 65 von 65 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Generieren von XML mit XML-SQL Utility: Ablaufprozess Speichern XML in Datenbanken mit XML-SQL Utility: Aublaufprozess Seite 66 von 66 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Nun folgen Beispiele für Insert, Update und Delete: Beispiel Insert: This example inserts XML values into all columns: import java.sql.*; import oracle.xml.sql.dml.OracleXMLSave; public class testInsert { public static void main(String argv[]) throws SQLException { Connection conn = getConnection("scott","tiger"); OracleXMLSave sav = new OracleXMLSave(conn, "scott.emp"); // Assume that the user passes in this document. Save it in to the table.! sav.insertXML(argv[0]); sav.close(); } // Get the connection given the user name and password..! private static Connection getConnection(String user, String passwd) throws SQLException { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:@",user,passwd); return conn; } } An insert statement of the form: insert into scott.emp (EMPNO, ENAME, JOB, MGR, SAL, DEPTNO) VALUES(?,?,?,?,?,?); will be generated and the element tags in the input XML document matching the column names will be matched and their values bound. If you sned the code snippet shown above, to the following XML document: <?xml version='1.0'?> <ROWSET> <ROW num="1"> <EMPNO>7369</EMPNO> <ENAME>Smith</ENAME> <JOB>CLERK</JOB> <MGR>7902</MGR> <HIREDATE>12/17/1980 0:0:0</HIREDATE> <SAL>800</SAL> <DEPTNO>20</DEPTNO> </ROW> <!-- additional rows ... --> </ROWSET> Seite 67 von 67 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Beispiel Update: <ROWSET> <ROW num="1"> <EMPNO>7369</EMPNO> <SAL>1800</SAL> <DEPTNO>30</DEPTNO> </ROW> <ROW> <EMPNO>2290</EMPNO> <SAL>2000</SAL> <HIREDATE>12/31/1992</HIREDATE> <!-- additional rows ... --> </ROWSET> In the emp table shown above, the employee number (EMPNO) column forms the key and you use that for updates. This example updates the emp table using keyColumns: import java.sql.*; import oracle.xml.sql.dml.OracleXMLSave; public class testUpdate { public static void main(String argv[]) throws SQLException { Connection conn = getConnection("scott","tiger"); OracleXMLSave sav = new OracleXMLSave(conn, "scott.emp"); String [] keyColNames = new String[1]; keyColNames[0] = "EMPNO"; sav.setKeyColumnList(keyColNames); // Assume that the user passes in this document as the first argument! sav.updateXML(argv[0]); sav.close(); } // Get the connection given the user name and password..! private static Connection getConnection(String user, String passwd) throws SQLException { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:@",user,passwd); return conn; } } In this example, two update statements would be generated. For the first ROW element, you would generate an update statement to update the SAL and JOB fields as shown below: update scott.emp SET SAL = 1800 and DEPTNO = 30 WHERE EMPNO = 7369; and for the second ROW element, update scott.emp SET SAL=2000 and HIREDATE = 12/31/1992 WHERE EMPNO = 2290; Seite 68 von 68 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Beispiel Delete: Consider the delete example shown below, import java.sql.*; import oracle.xml.sql.dml.OracleXMLSave; public class testDelete { public static void main(String argv[]) throws SQLException { Connection conn = getConnection("scott","tiger"); OracleXMLSave sav = new OracleXMLSave(conn, "scott.emp"); // Assume that the user passes in this document as the first argument! sav.deleteXML(argv[0]); sav.close(); } // Get the connection given the user name and password..! private static Connection getConnection(String user, String passwd) throws SQLException { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:@",user,passwd); return conn; } } If you use the same XML document shown for the update example, you would end up with two delete statements, DELETE FROM scott.emp WHERE empno=7369 and sal=1800 and deptno=30; DELETE FROM scott.emp WHERE empno=2200 and sal=2000 and hiredate=12/31/1992 ; Beispiel - Generating XML from JDBC ResultSets (Java): We will show how to use the JDBC ResultSet and generate XML from that. Note that using the ResultSet might be necessary in cases which are not handled directly by the utility (for example, setting the batch size, binding values,...) We will extend the previously defined pageTest class so that we handle any page. public class pageTest() { Connection conn; OracleXMLQuery qry; ResultSet rset; int lastRow = 0; public pageTest(String sqlQuery) { conn = getConnection("scott","tiger"); Statement stmt= conn.createStatement(sqlQuery);//create a scrollable Rset ResultSet rset = stmt.executeQuery(); //get the result set.. qry = new OracleXMLQuery(conn,rset); //create a OracleXMLQuery instance qry.keepObjectOpen(true); // Don't lose state after the first fetch } Seite 69 von 69 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann // Returns the next XML page..! public String getResult(int startRow, int endRow) { rset.scroll(lastRow-startRow); // scroll inside the result set qry.setMaxRows(endRow-startRow); // set the max # of rows to retrieve..! return qry.getXMLString(); } // Function to still perform the next page. public String nextPage() { String result = getResult(lastRow,lastRow+10); lastRow+= 10; return result; } public void close() { stmt.close(); // close the statement.. conn.close(); // close the connection qry.close(); // close the query.. } public void main(String[] argv) { pageTest test = new pageTest("select * from emp"); int i = 0; // Get the data one page at a time..!!!!! while ((str = test.getResult(i,i+10))!= null) { System.out.println(str); i+= 10; } test.close(); } } © 2001Matthias Knop, Ute Stegmann Seite 70 von 70 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3.3.4 Oracle XML-SQL Utility [PL/SQL] PL/SQL ist die prozedurale Sprache von Oracle. Sie umfaßt die Standardsprache von SQL und einen weiten Bereich von Befehlen, mit denen man die Ausführung von SQL-Anweisungen entsprechend unterschiedlicher Bedingungen steuern kann. PL/SQL kann auch Laufzeitfehler behandeln. Möglichkeiten wie Schleifen und IF...THEN-Anweisungen verleihen PL/SQL die Leistungsfähigkeit von Programmiersprachen der dritten Generation. Es lassen sich interaktive, benutzerfreundliche Programme schreiben, die Werte an Variablen übergeben können. Zum Lieferumfang gehören verschiedene vordefinierte Pakete, zum Beispiel für die Anzeige von Meldungen für den Benutzer. Das "XSU PL/SQL API" bietet nun die Möglichkeit über solche Prozeduren das XSU Java API zu nutzen. In der Dokumentation des XSU werden die Möglichkeiten wie folgt beschrieben: "The XML-SQL Utility PL/SQL API reflects the Java API in the generation and storage. The DBMS_XMLQuery and DBMS_XMLSave are the two packages that reflect the functions in the java classes - OracleXMLQuery and OracleXMLSave. Both these packages have a context handle associated with them. Create a context by calling one of the constructor-like functions to get the handle and then use the handle in all subsequent calls. Generating XML with DBMS_XMLQuery() Generating XML results in a CLOB that contains the XML document. To use DBMS_XMLQuery's and the generation engine follow these steps: 1. Create a context handle by calling the DBMS_XMLQuery.getCtx function and supplying it the query (either as a CLOB or a VARCHAR2) 2. Bind possible values to the query using the DBMS_XMLQuery.bind function. The binds work by binding a name to the position. For example, the query can be something like, select * from emp where empno = :EMPNO_VAR. Here the user binds the value for the EMPNO_VAR using the setBindValue function. 3. Set optional arguments like the ROW tag name, the ROWSET tag name or the number of rows to fetch etc. 4. Fetch the XML as a CLOB using the getXML() functions. The getXML can be called to generate the XML with or without a DTD. 5. Close the context. Here are some examples that use the DBMS_XMLQuery PL/SQL package. XSU Example 13: Generating XML From Simple Queries (PL/SQL) In this example, you will try to select rows from the emp table and get a XML document as a CLOB. You first get the context handle by passing in a query and then call the getXMLClob routine to get the CLOB value. The document will be in the same encoding Seite 71 von 71 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann as that of the database character set. declare queryCtx DBMS_XMLquery.ctxType; result CLOB; begin -- set up the query context...! queryCtx := DBMS_XMLQuery.newContext('select * from emp'); -- get the result..! result := DBMS_XMLQuery.getXML(queryCtx); -- Now you can use the result to put it in tables/send as messages.. printClobOut(result); DBMS_XMLQuery.closeContext(queryCtx); -- you must close the query handle.. end; / .." Weitere Informationen finden Sie in bei [ORAXML1]. © 2001Matthias Knop, Ute Stegmann Seite 72 von 72 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3.4 Bewertung [Skripting vs. XSLT] Die (potentiellen) Vorteile des Einsatzes von XML als Transporthülle im Internet, als Datenaustauschformat, usw. wurden schon diskutiert. Interessant ist aber auch, in wie weit XML im unmittelbaren Umfeld von Browsertechnologie einsetzbar ist. Zu betrachten ist (bei konsequenter Umsetzung) der Datenfluss Benutzer/Browser <-> HTML <-> XML <-> Datenbank und Vorteile, wie auch Konsequenzen, die sich aus diesem Ansatz ergeben. Eine solche Gegenüberstellung zwischen XML und Skripting ist allerdings schwierig, da sie zum einen herstellerspezifisch und versionsabhängig unterschiedlich ausfallen wird/muss und zum anderen auch im konkreten Einsatzszenario andere Folgen nach sich zieht. Die nachfolgende Übersicht ist dementsprechend subjektiv zu verstehen... Anmerkung: die Verpackung von XML-Informationen in eine HTML-Hülle resultiert natürlich auch daraus, dass ältere Browser ansonsten überfordert wären. Natürlich könnte man anführen, dass diese "Krücke" in modernen Produktversionen entfallen kann, dennoch darf man die weltweit installierte Basis nicht einfach vergessen! Web-Publishing mit Datenbanken Skripting XSLT Site-Designer muss über Programmierkenntnisse für den Datenbankzugriff verfügen Änderungen in der physischen Datenbankstruktur sind autark möglich Vermengung von HTML-Design und Skriptingblöcken erschwert die Lesbarkeit des Quelltextes Trennung von Daten und Layout; Verringerung des Anteiles an fehleranfälligem Quelltext Site-Designer ist i.d.R. auch Datenbankadministrator funktionale und administrative Trennung von Site- und Datenbank-Personal möglich schneller Entwicklungszyklus (gerade bei Implementation neuer Funktionen) möglich permanente Abstimmung zwischen SiteDesigner und Datenbankadministrator bzgl. der Schnittstellen notwendig Skalierung für hohe Performance ist schwieriger hohe Ausführungsgeschwindigkeit durch Nutzung "genormter" Schnittstellen in Maschinencode etablierte Entwicklungswerkzeuge vorhanden schwierige Fehlersuche und Debugging durch Komponententechnologie erfahrene Entwickler "vorhanden" wenig einführende Literatur vorhanden; Ausbildungs- und Implementationskosten für neue Technologie Austausch der Datenbankplattform i.d.R. einfach möglich (sofern ODBC/JDBC und ANSI-SQL benutzt wurde) Umsetzung der XML-Technologie noch stark im Wandel © 2001Thorsten Rood Seite 73 von 73 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 3.4 Bewertung [Skripting vs. XSLT - Fortsetzung] Ein interessanter Aspekt im Vergleich zwischen den verschiedenen Modellen ist Fehlerbearbeitung und Plausibilitätskontrolle. Während bei der Ausgabe von Daten über XML/XSL "nur" eine Datenkonvertierung vorzunehmen ist, muss beim Entgegennehmen von XML-Datenpaketen inhaltlich sichergestellt werden, dass die Informationen korrekt und sinnvoll sind. Eine Kontrolle über entsprechend restriktive Definition von Tabellenfeldern in der SQL-Datenbank ist in diesem Zusammenhang wichtig, da über ein "Upload" von außen eine Schnittstelle zur Verfügung steht, die ohne Benutzerinteraktion auskommen muss. Im Umfeld von Internet-Browsern kann dagegen gezielter auf Datensätze reagiert werden. Damit stellt sich allerdings die Frage, in wie weit auf Skripting dann tatsächlich noch verzichtet werden kann, da sonst keine detaillierte Fehlermeldung mehr generiert werden kann. Gleichzeitig bietet sich aber auch die Möglichkeit, mit einem einzigen XSL-Stylesheet sowohl gültige Datenelemente, als auch Fehlermeldungen und Hinweistexte zu verbinden (der für den XSLT-Prozessor zugrunde liegende XML-Datensatz enthält dann manchmal Daten, manchmal Fehlermeldungen, oder auch beides...) und somit eines durchgängiges Design durchhalten zu können. © 2001Thorsten Rood Seite 74 von 74 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann 4 Demo In diesem Kapitel wird an einem fiktiven Beispiel eines "Party-Service" die XML-Nutzung gezeigt. Ferner haben wir Hinweise und die URL einer Oracle Demo-Seite bereitgestellt. 4.1 Microsoft SQL 2000 4.2 Oracle XSQL Servlets 4.1 Microsoft SQL 2000 Eine Erklärung der XML-Features ist am "lebenden Objekt" viel einfacher als in einer theoretischen Abhandlung, die manchmal aus dem Zusammenhang gerissen werden muss. Deshalb habe ich versucht, in einem in sich geschlossenen Anwendungsfall die XML-Technologie und ihre Nutzung im MSSQL2K zu demonstrieren: Partyservice "Demo-Modus" [online] Partyservice "Demo-Modus" [offline] ZIP archive, Dateigröße: 97 kb Partyservice "Live-Modus" [offline] ZIP archive, Dateigröße: xx kb © 2001Thorsten Rood 4.2 Oracle XSQL Servlets XSQL ist ein Java-Servlet von Oracle, das XML-Dokumente aus SQL-Anfragen liefert und diese über ein XSLT-Stylesheet weiterverarbeiten kann. XSQL kann frei verwendet werden. Hierüber können die mit dem XML SQL Utility gelieferten Funktionalitäten in einem Java Servlet genutzt werden. Um das ganze anschaulich zu machen, haben wir zwar kein eigenes Demo für Oracle XSQL erstellt, aber die folgende Seite im Oracle Technology Network (OTN) im Internet aufgestöbert. Sie bietet kleine Beispiele zum Ausprobieren, die größtenteils mit dem Sourcecode bereitgestellt sind. Ferner findet man auf diesen Seiten auch Dokumentationen und Hinweise zum Download. Hinweis: Für einige Beispiele wird IE 5 benötigt ORACLE XSQL Pages & XSQL Servlets © 2001Ute Stegmann Seite 75 von 75 Stand: 20.03.2001 Seminar 1905 Thema 9 [FernUniversität Hagen] WS 2000/2001 XML-Einsatzmöglichkeiten für Datenbankanwendungen im Internet Matthias Knop - Thorsten Rood - Ute Stegmann Literaturverzeichnis [ROEK1] Robert Eckstein, XML kurz & gut O'Reilly Taschenbibliothek, 2. Auflage 2000, ISBN 3-89721-219-6 [MIBA1] Mike Bach, XSL und XPath - verständlich und praxisnah Addison-Wesley Verlag, 01/2000, ISBN 3-8273-1661-8 [Quin] Liam Quin, Open Source XML Database Toolkit John Wiley & Sons, Inc., Copyright 2000, ISBN 0-471-37522-5 [MSSQ1] Microsoft Corporation, SQL Server 2000 Online-Books Product version 8.00.194 RTM, Enterprise Edition, 17.07.2000 [MS1] Jim Buyens Web-Datenbanken Schritt für Schritt Microsoft Press, Copyright 2000, ISBN: 3-86063-766-5 [MSMS1] Microsoft Corporation, MSDN Library Online-Books April 2000 [MSMS2] Microsoft Corporation, MSDN Library / "Duwamish Online Bookstore" Server: msdn.microsoft.com [MSXML1] Microsoft Corporation, MSDN Library / "XML Developper Center" Server: msdn.microsoft.com [ORACLE1] Oracle, Oracle Server: www.oracle.com [ORAXML1] Oracle Technologie Network, OTN Technologie XML Server: www.technet.oracle.com [MSNG1] Newsgroup, microsoft.public.sqlserver.xml Server: msnews.microsoft.com [MSNG2] Newsgroup, microsoft.public.de.german.xml Server: msnews.microsoft.com [W3CI1] World Wide Web Consortium, Internationalization / Localization Server: www.w3c.org [DB2EXT] IBM DB2 XML Extender, XML Extender Administration and Programmingt Server: www-4.ibm.com [FM1] Filemaker XML Technologie Overview, FILEMAKER/BACKGROUNDER/xml/ Server: www.filemaker.de [ROBOU1] Ronald Bourret, XML and Databases Ronald Bourret/Wrinting/XML and Databases Server: www.rpbourret.com, Copyright 1999, 2000 by Ronald Bourret [ROBOU2] Ronald Bourret, XML Database Products Ronald Bourret/Wrinting/XML Database Products Server: www.rpbourret.com, Copyright 2000 by Ronald Bourret [STMU1] Steve Muench, Building Oracle XML Applications Sample Chapter O'Reilly, ISBN 1-56592-691-9, Server: www.oreilly.com [OBJMID1] Stefan Middendorf, XML und Java Copyright OBJEKTSpectrum Ausgabe 5/99 [JavaSoft] Sun Microsystems Inc., THE SOURCE FOR JAVA TECHNOLOGY Server: www.javasoft.comg Seite 76 von 76 Stand: 20.03.2001