XML and Databases H.E. Erbs Contents: Overview What is XML? Mapping rules - A simple class - Association of low multiplicity - Association of high multiplicity - Hierachy Intermediate conclusion XML as a bridge - Exporting from MS-Access - Importing into FastObjects The XML reality Übersicht XML and Databases H.E. Erbs XML: Just an additional path in the data modelling flow chart? XML model XML Database Übersicht XML and Databases H.E. Erbs Each XML document (a database?) … •is a (long) string (stored in a text file) •consists of •a header (conc. XML version and character set) •(if necessary:) a reference to a structure definition file •data (= a „mixture“ of tags and content) Content and all tags (!) can be defined by the user. Structure information can be generated automatically on the basis of the XML documents. (-> first: create data and second: generate the structure) Übersicht XML and Databases Mapping of a simple class H.E. Erbs This is the begin tag of an object <Produkt> <Nummer>106222</Nummer> <Bezeichnung>Kanne</Bezeichnung> <Groesse></Groesse> <Fassungsvermoegen>1.20</Fassungsvermoegen> <Preis>59.00</Preis> <Funktion>1</Funktion> <Foto>106222.IMG</Foto> </Produkt> and here is the corresponding end tag An object <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT Bezeichnung (#PCDATA)> <!ELEMENT Fassungsvermoegen (#PCDATA)> … <!ELEMENT Produkt (Nummer, Bezeichnung, Groesse, Fassungsvermoegen, Preis, Funktion, Foto)> <!ELEMENT Produkte (Produkt+)> <Produkte> <Produkt> … </Produkt> <Produkt> … </Produkt> </Produkte> A set of objects The corresponding document type definition (DTD) (a class definition) indicating „many; at least one“ Übersicht XML and Databases H.E. Erbs Mapping of an association of low multiplicity Produkt Dekor - Bezeichnung : String - Foto : BLOB 0..1 - Nummer : int - Bezeichnung : String Grösse : double 0..* - Fassungsvermögen : double ist versehen mit - Preis : double - Funktion : int - Foto : BLOB + getAnzVerkauft () : int <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT Bezeichnung (#PCDATA)> <!ELEMENT Fassungsvermoegen (#PCDATA)> <!ELEMENT Foto (#PCDATA)> <!ELEMENT Funktion (#PCDATA)> <!ELEMENT Groesse (#PCDATA)> <!ELEMENT Nummer (#PCDATA)> <!ELEMENT Preis (#PCDATA)> <!ELEMENT Produkt (Nummer, Bezeichnung, Groesse, Fassungsvermoegen, Preis, Funktion, Foto)> <!ELEMENT Dekor (Bezeichnung, Foto, Produkt*)> Mapping multiplicity 0..* Übersicht XML and Databases H.E. Erbs <xs:element name="Dekor"> <xs:complexType> <xs:sequence> <xs:element ref="Produkt" minOccurs="0" maxOccurs="unbounded"/> … </xs:sequence> </xs:complexType> </xs:element> XML Schema: just another DDL Again: mapping multiplicity 0..* Übersicht XML and Databases H.E. Erbs Mapping of an association of high multiplicity Markt Produkt - Nummer : int - Bezeichnung : String - Grösse : double - Fassungsvermögen : double - Preis : double - Funktion : int - Foto : BLOB + getAnzVerkauft () : int 1..* 0..* - Bezeichnung - Standort - Termin von - Termin bis - URL - Kategorie - Ranking - Standgebühr pro qm + getDauer () : int : String : String : Date : Date : String : int : int : double Angebot - Anzahl : int Übersicht XML and Databases H.E. Erbs <?xml version="1.0" encoding="UTF-8"?> <MaerkteUndProdukte> <Maerkte> <Markt Nr="M1"> <Bezeichnung>Krefelder Töpfermarkt</Bezeichnung> … </Markt> <Markt Nr="M2"> <Bezeichnung>Lichtenberger Adventsmarkt</Bezeichnung> … </Markt> </Maerkte> <Produkte> <Produkt Nr="P1"> <Nummer>106222</Nummer> … </Produkt> <Produkt Nr="P2"> <Nummer>101222</Nummer> … </Produkt> </Produkte> <M-P> <WirdAngebotenAuf Nr="MP1" Produkt-Nr="P1" Markt-Nr="M1"> <Anzahl>10</Anzahl> </WirdAngebotenAuf> <WirdAngebotenAuf Nr="MP2" Produkt-Nr="P2" Markt-Nr="M1"> <Anzahl>20</Anzahl> </WirdAngebotenAuf> </M-P> </MaerkteUndProdukte> Übersicht XML and Databases H.E. Erbs <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT Markt (Bezeichnung, Standort, Oeffnungszeiten, Termin, URL)> <!ATTLIST Markt Nr ID #REQUIRED > <!ELEMENT Maerkte (Markt+)> <!ELEMENT Produkt (Nummer, Bezeichnung, Preis)> <!ATTLIST Produkt Nr ID #REQUIRED> <!ELEMENT Produkte (Produkt+)> <!ELEMENT M-P (WirdAngebotenAuf*)> <!ELEMENT Anzahl (#PCDATA)> <!ELEMENT WirdAngebotenAuf (Anzahl)> <!ATTLIST WirdAngebotenAuf Produkt-Nr IDREF #REQUIRED Markt-Nr IDREF #REQUIRED > <!ELEMENT MaerkteUndProdukte (Maerkte, Produkte, M-P)> Übersicht XML and Databases H.E. Erbs <?xml version="1.0" encoding="UTF-8"?> … <xsl:template match="/"> … <xsl:for-each select="MaerkteUndProdukte/Maerkte/Markt"> <tr> <td><xsl:value-of select="Bezeichnung"/></td> <td><xsl:value-of select="Standort"/></td> <td><xsl:value-of select="Termin"/></td> <xsl:variable name="MarktRef" select="@Nr"/> <xsl:apply-templates select="/MaerkteUndProdukte/M-P/WirdAngebotenAuf [@Markt-Nr=$MarktRef] "/> </tr> </xsl:for-each> … </xsl:template> <xsl:template match="Produkt"> <td> <xsl:value-of select="Bezeichnung"/></td> </xsl:template> <xsl:template match="WirdAngebotenAuf"> <xsl:variable name="ProduktRef" select="@Produkt-Nr"/> <td><xsl:value-of select="Anzahl"/></td> <xsl:apply-templates select="/MaerkteUndProdukte/Produkte/Produkt [@Nr=$ProduktRef] "/> </xsl:template> An XSL transformation using an XSLT style sheet Übersicht XML and Databases H.E. Erbs And here is the result (displayed by OPERA browser) Übersicht XML and Databases H.E. Erbs Mapping of a hierachy Geschäftspartner - Name Vorname Strasse Land PLZ Ort Telefonnummer email Rechtsform : String : String : String : String : String : String : String : String : int {disjoint, complete} Händler Spediteur Kunde Veranstalter - Firmenname : String - Firmenname : String - Nummer : int - Erstkontakt : Date - Bezeichnung : String - Typ : String Übersicht XML and Databases H.E. Erbs <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT Geschaeftspartner (Name, Vorname, … )> <!ELEMENT Name (#PCDATA)> <!ELEMENT Vorname (#PCDATA)> <!ELEMENT Haendler (Geschaeftspartner, Name)> <!ELEMENT Spediteur (Geschaeftspartner, Name)> <!ELEMENT Kunde (Geschaeftspartner, Nummer, ErstKontakt)> <!ELEMENT Nummer (#PCDATA)> <!ELEMENT ErstKontakt (#PCDATA)> <!ELEMENT Veranstalter (Geschaeftspartner, Bezeichnung, Typ)> <!ELEMENT Bezeichnung (#PCDATA)> <!ELEMENT Typ (#PCDATA)> A client („Kunde“) element based on this DTD is as follows: <?xml version="1.0" encoding="UTF-8"?> <Kunde> <Geschaeftspartner> <Name>Meier</Name> <Vorname>Paula</Vorname> </Geschaeftspartner> <Nummer>4713</Nummer> <ErstKontakt>1.1.2002</ErstKontakt> </Kunde> Remark: This mapping rule differs from the corresponding one in The Book. Übersicht XML and Databases H.E. Erbs Who‘s gonna use these concepts? Nobody. Nowadays data is stored in network or relational databases, but isn‘t stored in XML databases/documents. So, what‘s left (for XML)? Übersicht XML and Databases H.E. Erbs XML as a bridge between heterogeneous databases [so-called Message-oriented middleware (MOM) architecture] Export MS Access Client MS Access Datenbank Import XMLDokument FastObjects Client FastObjects Datenbank Übersicht XML and Databases H.E. Erbs Exporting a simple relation as part of an MS-Access database Übersicht XML and Databases H.E. Erbs Importing an XML document into a FastObjects database (screen shot) Übersicht XML and Databases H.E. Erbs Conclusions: 1. The XML path is just another path in data modelling, but it is of no importance in industry. Native XML database systems won‘t have a commercial future. 2. Import/export of data will be done on an XML basis. All database systems (will) offer interfaces for that basis. Übersicht XML and Databases H.E. Erbs The XML reality Reality Relational Database (e.g. Access) Network Database (e.g. UDS) XML document Objectoriented Database (e.g. POET) XML data model XMLDB Übersicht