Peter Brezany Institut für Softwarewissenschaften Universität Wien

Slides:



Advertisements
Ähnliche Präsentationen
XML-basierte Techniken
Advertisements

Extensible Markup Language
Worzyk FH Anhalt Datenbanksysteme für FÜ WS 2004/2005 XML - 1 XML Extensible Markup Language.
DTD XML-Technik Dino Azzano. Definition Document Type Definition Beschreibung der Regeln zum Aufbau aller XML-Dokumente, die zu einer Dokumentklasse.
Anmerkungen zu XML Im September 2000 Entwicklung/Anspruch von XML
Zeitplan. Zeitplan Inhalt Datenmodellierung Syntax Java / .NET-Einsatz Datenbanken.
Dipl.- Dok. Rusalka Offer
XML - Aufbau und Struktur - mit Einsatz im B2B
Hands On – Einführung in XML
IMS Universität Stuttgart 1 Einführung in XML Hannah Kermes HS: Elektronische Wörterbücher Do,
FH-Hof Extensible Markup Language Richard Göbel. FH-Hof Extensible Markup Language XML XML ist universeller Ansatz für die Strukturierung von Zeichenketten.
DOM (Document Object Model)
Seminar XML und Datenbanken Sven Wiegelmann SS 2002.
XINDICE The Apache XML Project Name: Jacqueline Langhorst
XML-Schema HKI Proseminar Wintersemester 2010/11 Dozentin: Frau Kurz von Jan Kohl und Christian Lütticke.
Eine Biografie aus ADB/NDB als XML Datenbanken vs. Markup Prof Dr. Manfred Thaller WS 2009 / 2010 Referent: Bilal Erkin.
HTML - Eine erste Annäherung
XML-Parser Manuel Röllinghoff.
Modularization of XHTML™
XML in Datenbanksystemen. © Prof. T. Kudraß, HTWK Leipzig 2 2 Warum wird XML eingesetzt? Antworten von Unternehmen: erweiterte Suchmöglichkeiten im Unternehmen.
SQL/XML. © Prof. T. Kudraß, HTWK Leipzig 2 2 Motivation Speicherung von XML in allen großen kommerziellen DBMS vorhanden proprietäre Lösungen für die.
XML Standardisierungen und Abfragesprachen
Einführung XML XML Einführung Andreas Leicht.
EXtensible Server Pages von Belrhiti El mostafa. Inhalt Was ist XSP ? Wichtige XSP Tags Erstellungsmöglichkeiten Die Basis der XSP.
XPointer Die Xpointer beschreiben einen Ort oder Bereich innerhalb einer XML-Instanz. Die XPointer bauen auf der XML Path Language auf. Die XPointer ist.
XML und Datenbanken - Einführung -
1 XML und Datenbanken Kapitel 7: Modellierung, Teil 1 Meike Klettke Universität Rostock Fakultät für Informatik und Elektrotechnik
XML und Datenbanken - Einführung in XML -
1 Grundlagen und Anwendung der Extensible Markup Language (XML ) Peter Buxmann Institut für Wirtschaftsinformatik Johann Wolfgang Goethe-Universität Frankfurt.
Xindice Datenbanken vs. Markup Prof Dr. Manfred Thaller WS 2009 / 2010 Referent: Seyda Kurt.
Was versteht man unter XML Schema?
Data Documentation Initiative (DDI)
Architektur und Funktionalitäten der Oracle XML DB - ein Überblick mit ausgewählten praktischen Beispielen - im Rahmen des 17. Workshop Grundlagen von.
Vortrag HTML, XHTML, DHTML
XML DTD.
Fortsetzung DTDs, UML  XML
Typo3 Templates und TypoScript
Wird ganz am Anfang der HTML-Datei geschrieben Doctype html public bedeutet, dass man sich auf die Öffentlichkeit der html-dtd bezieht Html ist die meist.
Java für Fortgeschrittene
Information und ihre Darstellung: XHTML & CSS
XML-Query. Übersicht Was ist XML-Query? Vergleich RDB XML-Dokument Syntaktisches und Use-Cases Kritik und Diskussion.
Vorlesung #4 Überführung des ER-Modells in das relationale Modell
Wohlgeformtheit und Gültigkeit Grundlagen der Datenmodellierung Anke Jackschina.
Ausgabe vom Seite 1, XML Eine Einführung XML - Eine Einführung.
XML (Extensible Markup Language)
ADAT©2004 Dipl. - Ing. Walter SabinSeite: 1 Version 1.0a XML EXTENSIBLE MARKUP LANGUAGE.
Kurzpräsentation von Herbert Schlechta
Peter Brezany Institut für Softwarewissenschaften Universität Wien
© 2001 Sven Dammann1 Aufbau Integrierter Informationssysteme XML Bearbeitung und relationale Abbildung Sven Dammann Martin-Luther-Universität Halle-Wittenberg.
XQuery 1.0 – Arbeitsweise Mögl. Eingaben Das wird berücksichtigt: Typen von XPath und XML Schema Namensräume, Module Ergebnis: XML-Instanz.
Hauptseminar Web-Services und verteilte Datenbanken Thema XML, DTDs und XML-Schema XML, DTDs und XML-Schema - Stefan Kurz, 25. April 2003.
RelationentheorieObjektorientierte Datenbanken  AIFB SS C++-ODL (1/6) Erweiterung des deklarativen Teils einer C++-Klasse Datentypen d_String,
- Warum: Das HTML-Dilemma
IT-Zertifikat der Phil.Fak Kurs 4: Daten- und Metadatenstandards Patrick Sahle XML-BasicsWS 08/09.
Seminar zur Geoinformation Folie 1 Inhalt: –XML –XML- SCHEMA –XSL –Syntax –GML Seminar zur Geoinformation Datenaustausch mit XML / GML im InternetDatenaustausch.
Vordefinierte Datentypen (1)
- XML: Das Sprachkonzept
XPath Datenmodell und Sequenzen Universität zu Köln – Historisch-Kulturwissenschaftliche Informationsverarbeitung Datenbanktechnologie – Daniel Ebner –
XML Schema Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung WS2011/2012 Hist.-kult.wiss. Informationsverarbeitung (Teil.
Geoinformation3 Geoinformation III XML Grundlagen und Dokumentspezifikation Vorlesung 12b.
DTD und W3C XML Schema Seminar XML und Datenbanken Vortrag: Sven Blüge.
XML – Grundlagen und Anwendungen Teil 4: Modellierung von Datenmodellen mit XML-Schema Prof. Dr. Michael Löwe, FHDW Hannover.
Vorteile von XML Die installed base von HTML, HTTP und Webbrowsern XML ist einfach und portabel XML kann Dokumente beliebiger Komplexität abbilden XML.
XML - Warum: Das HTML-Dilemma HTML, SGML, XML - Wie: Syntax, Konzepte, Sprachelemente Basics Wohlgeformte XML-Dokumente (ohne DTD) Gültige XML-Dokumente.
1 Java und XML Stephan Baldes Warum XML? In welchem Format wurden die Daten gespeichert? Bernd;Thomas;3;5;1987;Freiburg;Karlsruhe Peter;Maier;7;9;1980;Karlsruhe;Freiburg.
8.November 2006 ― 1Elektronisches Publizieren: XML Namespaces Kodierung strukturierter Dokumente im Web — XML Namespaces —
Document Type Definitions (DTDs) Marko Harasic Freie Universität Berlin Institut für Informatik Netzbasierte Informationssysteme
Fortsetzung DTDs, UML  XML
Document Type Definitions (DTDs)
Von Wietlisbach, Lenzin und Winter
 Präsentation transkript:

Peter Brezany Institut für Softwarewissenschaften Universität Wien XML und Datenbanken Peter Brezany Institut für Softwarewissenschaften Universität Wien

Inhalt Motivation XML Basiswissen XML/DB Abfragesprachen DTD, XML Schema Wohlgeformtheit und Gültigkeit Klassifikation von XML Dokumenten XML/DB Anforderungen Eigenschaften Native XML Datenbanken (NXD) Abfragesprachen XQuery, XPath XML Prozessoren SAX, DOM SQL/XML

Motivation Java: „write once, run everywhere“ XML: „write once, read everywhere“ zur Darstellung und Transport von Information eingesetzt Zwischen Mensch-Mensch, Computer-Computer,.... Anwendungen für XML Datenbanken Platz um Webseite zu speichern Datenbank einer e-Commerce Anwendung die XML zum Daten transport verwendet Wenn Daten semistrukturiert sind Aufzeichnung von SOAP Nachrichten,.......

Schemabeschreibung mittels DTD Darstellung, welche Elemente auftreten können und wie sie geschachtelt werden Also: Deklaration von Strukturinformationen Vorteile einer DTD: Entspricht einer Dokumentation für die XML-Dokumente Anwendungen können darauf reagieren Fehler in XML-Dokumenten können erkannt werden Oft bessere Qualität der XML-Dokumente, weil durchdachteres Vorgehen

XML Schema wesentlich umfangreichere Darstellungsmöglichkeiten als DTDs vordefinierte Datentypen Vielzahl von Standardtypen (int, float, string,....) die Möglichkeit zur Definition eigener Datentypen basieren auf den vordefinierten Datentypen XML-Syntax die Möglichkeit, Integritätsbedingungen darzustellen, die die Korrektheit der XML-Dokumente beschreiben Eindeutigkeitsbedingung (unique) Schlüssel (key) sowie Referenzen auf Schlüssel (keyref)

XML Schema vs. DTD XML Schema umfasst alle Modellierungsmöglichkeiten, die mit der DTD bereitstehen, mit Ausnahme von Entities. Übersetzung: DTD in XML Schema => verlustfrei, Entities werden vor der Übersetzung expandiert und dadurch aufgelöst. DTDs enthalten wesentlich weniger Darstellungsmöglich-keiten als XML Schema und auch keine Typinformationen. Übersetzung: XML Schema in DTDs => Informationen gehen verloren

Eigenschaften von XML Dokumenten Wohlgeformtheit Dokument syntaktisch korrekt? Überprüft wird: Alle Elemente müssen ein Start-Tag und ein Ende-Tag haben, außer leere Elemente Korrekte Schachtelung von Tags Alle Attributwerte stehen in Hochkommas oder Anführungsstrichen Ohne zugeordnete DTD sind alle Attribute nach Definition vom Typ CDATA Keine mehrfach auftretenden Attributnamen an einem Element Alle Zeichen, die Markup sein könnten (Bsp <, &), dürfen nicht im Text auftreten, sondern müssen durch Entityreferenzen (< &) ersetzt werden Gültigkeit Wohlgeformtheit und entspricht das XML-Dokument der zugeordneten DTD/Schema? Getestet wird z.B.: Inhaltsmodelle der Elemente: so im Schema definiert? Attribute definiert?

Klassifikation von XML Dokumenten Datenzentrierte Dokumente strukturiert, regulär Beispiele: Produktkataloge, Bestellungen, Rechnungen Dokumentzentrierte Dokumente unstrukturiert, irregulär Beispiele: wissenschaftliche Artikel, Bücher, E-Mails, Webseiten Semistrukturierte Dokumente datenzentrierte und dokumentzentrierte Anteile Beispiele: Veröffentlichungen, Amazon <order> <customer>Meyer</customer> <position> <isbn>1-234-56789-0</isbn> <number>2</number> <price currency=„Euro“>30.00</price> </position> </order> <content> XML builds on the principles of two existing languages, <emph>HTML</emph> and <emph>SGML</emph> to create a simple mechanism .. The generalized markup concept .. </content> <book> <author>Neil Bradley</author> <title>XML companion</title> <isbn>1-234-56789-0</isbn> <content> XML builds on the principles of two existing languages, <emph>HTML</emph> and .. </content> </book>

XML/DB Anforderungen effektive Speicherung Keine optimale Lösung für alle Anwendungen Dokumentcharakter spielt entscheidende Rolle effizienter Zugriff auf XML-Dokumente oder Teile davon Transaktionsverwaltung Unterstützung von XPath und XQuery Unterstützung von SAX und DOM für Anwendungen Wiederherstellbarkeit der Dokumente

Speicherungsmöglichkeiten Als Dateien / Clobs Speicherung der Dokumentstruktur Strukturierte Speicherung in (rel.) Datenbanken Volltextindex Abbildung der Graphstruktur Vollständiges Mapping Volltextindex und XML-Index Abbilden des DOM-Modells Benutzer- definiertes Mapping Textbasierte native Modellbasierte native Speicherung Speicherung

Volltext-Index bekannte Methode (älter als relationale Datenbanken) <hotel> <hotelname>Hotel Hübner</hotelname> Begriff Verweis <adresse> hotel <plz>18119</plz> <ort>Warnemünde</ort> Warnemünde <strasse>Seestraße</strasse> Rostock <nummer>12</nummer> ort </adresse> anreisebeschreibung <anreisebeschreibung> Aus Richtung Rostock kommend ... </anreisebeschreibung> </hotel> bekannte Methode (älter als relationale Datenbanken) Verfahren aus dem Bereich der Dokumentverarbeitung

Volltext-Index Schemabeschreibung: Dokumentrekonstruktion: nicht erforderlich Dokumentrekonstruktion: Dokumente bleiben im Original erhalten Anfragen: Anfragen des Information Retrieval Weitere Besonderheiten: Volltextfunktionen keine Auswertung des XML-Markups Einsatz für dokumentzentrierte XML-Anwendungen

Volltext und XML-Index

Volltext und XML-Index XML - Struktur kann in Anfragen ausgewertet werden Einsatz von XPath und XQuery ist dadurch möglich Schemabeschreibung: nicht erforderlich Dokumentrekonstruktion: Dokumente bleiben im Original erhalten Anfragen: Anfragen des Information Retrieval Auswertung des Markup in den Anfragen möglich Weitere Besonderheiten Volltextfunktionen Einsatz: für dokumentzentrierte und semistrukturierte Anwendungen

Speicherung der Graphenstruktur Verwendung von Relationen zur Speicherung von Elementen und Attributen Elemente: Elementname | Wert | Verweis auf Vorgänger | Ordnung Attribute: Attributname | Wert | Verweis auf Element Damit ist die Zuordnung von Inhalten zur Struktur, sowie die vollständige Wiederherstellung der Struktur möglich

Speicherung der Graphenstruktur Schemabeschreibung: zur Speicherung nicht erforderlich Dokumentrekonstruktion: möglich, aber sehr aufwändig Anfragen: angepasste DB-Anfrage Weitere Besonderheiten: Anfragen über vielen Elementen/Attributen sind aufwändig Einsatz: daten-,dokumentzentrierte und semistrukturierte XML-Dokumente

Vollständiges Mapping auf rel. DB <hotel url="www.hotel-huebner.de"> <hotelname>Hotel Hübner </hotelname> <adresse> <ort>Warnemünde</ort> <strasse>Seestraße</strasse> ... </adresse> <preise> <einzelzimmer>198 </einzelzimmer> </preise> </hotel> Hotel: HotelID Hotelname Adresse Preise H0001 Hotel Hübner A0001 P0001 XML-Dokument Adresse: AdresseID Ort Strasse ... A0001 Warnemünde Seestraße Preise: PreiseID Einzelzimmer ... P0001 198 DTD ist erforderlich - typgerechte Speicherung

Vor/Nachteile vollständ. Mapping Vorteile: bei der Speicherung strukturierter Daten Anfragen, Datentypen, Aggregatfunktionen, Sichten Integration in andere Datenbanken Nachteile: bei der Speicherung semi- und unstrukturierter Daten großes Schema, schwach gefüllte Datenbanken, viele Nullwerte Keine flexiblen Datentypen, Speicherung von Alternativen problematisch Fehlende Information Retrieval Anfragen, keine Volltextoperationen möglich

Vollständiges Mapping auf rel. DB Schemabeschreibung: zur Speicherung erforderlich Dokumentrekonstruktion: nur eingeschränkt möglich (Protokollierung des Abbildungsprozesses) Anfragen: Datenbankanfragen Weitere Besonderheiten: Föderationen mit bestehenden Datenbanken möglich Einsatz: für datenzentrierte XML-Anwendungen

Benutzerdefiniertes Mapping Hotel Hübner Hotel_URL Hotelpreise Name Einzelzimmer www.hotel-huebner.de 198 Datenbank <ClassMap> <ToClassTable> </ToClassTable> <Table Name="Hotelpreise"/> <ElementType Name="hotel"/> <hotel url="www.hotel-huebner.de"> <hotelname>Hotel Hübner</hotelname> <adresse> <ort>Warnemünde</ort> ... </adresse> <preise> <einzelzimmer>198</einzelzimmer> </preise> </hotel> <strasse>Seestraße</strasse> <PropertyMap> <ToColumn> </ToColumn> </PropertyMap> <Attribute Name="url"/> <Column Name="Hotel_URL"/> <ElementType Name="hotelname"/> <Column Name="Name"/> </Classmap> XML-Dokument Mapping Vorschrift

Benutzerdefiniertes Mapping Schemabeschreibung: Zur Speicherung erforderlich Dokumentrekonstruktion: Meist nicht möglich (Voraussetzung: Protokollierung des Abbildungsprozesses vollständige Abb.) Anfragen: Datenbankanfragen Weitere Besonderheiten: Integration in bestehende Datenbanken möglich XML-Dokumente und DB voneinander unabhängig Einsatz: für datenzentrierte XML-Anwendungen

Native XML Database Spezialisiert für die Speicherung von XML Daten XML Dokumente gehen rein/raus Muss keine Stand-alone Datenbank sein Kein neues low-level Datenbank Modell Sollen nicht alle bestehenden Datenbanken ersetzen OpenSource (Xindice, eXist) sowie kommerzielle Lösungen (Tamino)

XML Abfragesprachen XPath XQuery Pfadausdrücke zur Adressierung von XML Fragmenten Grundlage für viele weitere Standards XSLT Xquery Von meisten XML Datenbanken unterstützt grundlegendes Konstrukt sind XPath-Ausdrücke: Pfadausdrücke (Location path), logische und mathematische Verknüpfungen, Funktionsaufrufe sind vom Typ her Knotenmengen oder Werte (boolean, number, string) XQuery Praktische Beispiele: http://www.w3.org/TR/xquery-use-cases/

XML Abfragesprachen

XQuery Basiert auf Xpath SQL ähnlich Ausdrücke: FOR-LET-WHERE-RERTURN FOR/LET: geordnete Liste von Tupeln gebundener Variablen WHERE: eingeschränkte Liste von Tupeln gebundener Variablen RETURN: Ergebniskonstruktion, Instanzen des XML Query data model Ausdrücke: Konstanten und Variablen: „Hallo“ $x Kommentare: {-- Kommentar --} Sequenzen: (1, /a/b/c, „Hallo“)

XQuery Operatoren und Funktionen Elementkonstruktoren Sortierung sum( $a + 1, $b – 2 ) $zaus UNION $haus Benutzerdefinierte Funktionen Elementkonstruktoren reines XML, wird so in das Ergebnis übernommen, wie es ist XML mit geschachtelten Ausdrücken in ’{’ ’}’ Sortierung FOR $h IN /hotel[name = "Hübner"] ORDER BY zimmer/preis DESCENDING RETURN $h

XQuery Bedingte Ausdrücke Verwendung von Quantoren IF expr THEN expr ELSE expr Verwendung von Quantoren SOME var IN expr SATISFIES expr EVERY var IN expr SATISFIES expr Typwandlung mit CAST und TREAT Typprüfung mit INSTANCEOF und TYPESWITCH

XQuery Beispiel <hotel name="Hotel Neptun"> <zimmertyp typ="EZ" preis="180" währung="DM"/> <foto href="neptun01.jpeg"/> </hotel> <hotel name="Hotel Hübner"> <zimmertyp typ="EZ" preis="150" währung="DM"/> <zimmertyp typ="DZ" preis="180" währung="DM"/> <hotel name="Pension Dräger"> <foto href="bild-pd01.jpeg"/> <foto href="bild-pd02.jpeg"/>

XQuery Beispiel Ergebnis: <billighotels> FOR $h IN //hotel FOR $z IN $h/zimmertyp WHERE $z/@preis <= 100 RETURN <hotel> <name> {$h/@name} </name> <preis> {$z/@preis} </preis> </hotel> </billighotels> Ergebnis: <billighotels> <hotel><name>...</name><preis>...</preis></hotel> ... </billighotels>

XML Prozessoren machen den Inhalt eines XML-Dokumentes für eine Anwendung verfügbar Standardisierte Schnittstellen für zahlreiche Programmiersprachen (Java, Phyton, C, C++, ...) Einbindung von Bibliotheken Auflösen von Entities nichtvalidierend / validierend in Bezug auf DTD oder XML Schema

SAX – ereignisorientierte Abarbeitung startDocument() durch Bestandteile des Dokumentes werden Aktionen ausgelöst sequentielle Abarbeitung im Anwendungspro-gramm müssen die Methoden definiert werden, die durch Auftreten von Dokumentbestandteilen ausgelöst werden zustandslos <?xml version="1.0"?> <hotel id= startElement("hotel", AttributeList( length=1, {name= value= <hotelname> startElement("hotelname", null) Strand Hotel Hübner </hotelname> endElement("hotelname") <adresse> startElement("adresse", null) <ort> startElement("ort", null) Warnemünde characters(char[], start, length) </ort> endElement("ort") <telefon> . . . 0381/548230 </telefon> </adresse> endElement("adresse") </hotel> endElement("hotel") endDocument()

DOM - Manipulation von Baumstrukturen XML-Dokument als Baum dargestellt, Zugriff kann durch Navigation erfolgen Manipulation des Dokumentstruktur ebenfalls möglich Löschen Einfügen ändern

Vergleich DOM - SAX XML- DTD Dokument Parser DOM SAX startDocument startElement Anwendung, startElement implemen- tiert endElement Document ... Handler endDocument

Einsatz von SAX und DOM SAX einfacher Zugriff einfach strukturierte oder gleichartig strukturierte Dokumente auch geeignet für sehr große XML-Dokumente Zugriff nur auf geringe Anteile eines Dokumentes DOM Navigation durch Dokumentstruktur dadurch kontextabhängige Zugriffe Manipulation der Struktur Für sehr große XML-Dokumente problematisch auch Speicherungsstruktur

SQL/XML ANSI-Standard Version 2003 bzw. 2005 (in Arbeit) Hersteller wie IBM, Oracle, Microsoft, Informix und Software AG beteiligt Features: Ausgabe von Relationen als XML-Dokument Ausgabe von Anfrageergebnissen und Sichten als XML-Dokument Abbildung von Datenbanktypen auf Typen von XML-Schemata und umgekehrt Konvertierung der Daten aus Datenbanken auf Werte in XML-Dokumenten Übersicht: Eisenberg, „SQL/XML is making good progress“, 2002

SQL/XML Ausgabe der Relation Employee als XML Dokument im Schema Admin <row> <EMPNO>000010</EMPNO> <FIRSTNAME>CHRISTINE</FIRSTNAME> <LASTNAME>HAAS</LASTNAME> <BIRTHDATE>i933-08-24</BIRTHDATE> <SALARY>52750.OO</SALARY> </row> ... </EMPLOYEE> ..... </Admin>

SQL/XML Ausgabe von Anfrageergebnissen und Sichten Darstellung von Null Values: Tabellen und XQuery <row> <EMPNO>000010</EMPNO> <FIRSTNAME>CHRISTINE</FIRSTNAME> <LASTNAME >HAAS </LASTNAME> <BIRTHDATE xsi:nil="true" /> <SALARY>52750.00</SALARY> </row> <row> <EMPNO>0000I0</EMPNO> <FIRSTNAME>CHRISTINE</FIRSTNAME> <LASTNAME>HAAS </LASTNAME > <SALARY>52750.00</SALARY> </row> highemps> { for Se in table{"Sample_db",...)/EMPLOYEE/row where Be/SALARY > 40000 return <emp> { Se/FIRSTNME, $e/LASTNAME } </emp> } </highemps>

Zusammenfassung Es ist wichtig, Dokumentenklassen zu kennen um richtige Speichermöglichkeit zu finden XQuery ist mächtigerer „Nachfolger“ von XPath 1.0 XML Prozessoren um Ergebnisse von Anfragen an Datenbanken die XML zurückliefern weiterverarbeiten zu können SAX: arbeitet ereignisorientiert DOM: Baummanipulationen möglich SQL/XML ist Versuch um wichtige Aufgaben beim Umgang mit XML in Datenbanken zu standardisieren Verwendet XQuery

Resources Open Source Native XMLDB Open Source XQuery Processor Apache Xindice: http://xml.apache.org/xindice/ Supports XPath eXist: http://exist.sourceforge.net/ Supports XPath 2.0 and XQuery 1.0 Open Source XQuery Processor SAXON: http://saxon.sourceforge.net/ Supports XSLT 2.0 and XQuery 1.0 Mehr Information zu XML und Datenbanken Ronald Bourret 2004 http://www.rpbourret.com/xml/XMLAndDatabases.htm