File loading please wait...
Citation preview
Alfred Moos XQuery und SQL/XML in DB2-Datenbanken Aus dem Programm Datenbanken und Softwareentwicklung Weitere Titel des Autors: Datenbank-Engineering von A. Moos Datenbankentwicklung in IT-Berufen von H. Burnus Softwareentwicklung kompakt und verständlich von H. Brandt-Pook und R. Kollmeier Software Engineering von R. Dumke Grundkurs Datenbankentwurf von H. Jarosch SQL mit ORACLE von W.-M. Kähler Grundkurs Datenbankentwicklung von S. Kleuker Grundkurs Software-Entwicklung mit C++ von D. May Java will nur spielen von S. E. Panitz Grundkurs Relationale Datenbanken von R. Steiner www.viewegteubner.de Alfred Moos XQuery und SQL/XML in DB2-Datenbanken Verwaltung und Erzeugung von XML-Dokumenten in DB2 Mit 70 Abbildungen STUDIUM Bibliografische Informationd der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über abrufbar. Das in diesem Werk enthaltene Programm-Material ist mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Der Autor übernimmt infolgedessen keine Verantwortung und wird keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieses Programm-Materials oder Teilen davon entsteht. Höchste inhaltliche und technische Qualität unserer Produkte ist unser Ziel. Bei der Produktion und Auslieferung unserer Bücher wollen wir die Umwelt schonen: Dieses Buch ist auf säurefreiem und chlorfrei gebleichtem Papier gedruckt. Die Einschweißfolie besteht aus Polyäthylen und damit aus organischen Grundstoffen, die weder bei der Herstellung noch bei der Verbrennung Schadstoffe freisetzen. 1. Auflage 2008 Alle Rechte vorbehalten © Vieweg +Teubner |GWV Fachverlage GmbH, Wiesbaden 2008 Lektorat: Sybille Thelen | Andrea Broßler Vieweg +Teubner ist Teil der Fachverlagsgruppe Springer Science+Business Media. www.viewegteubner.de Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Umschlaggestaltung: KünkelLopka Medienentwicklung, Heidelberg Druck und buchbinderische Verarbeitung: MercedesDruck, Berlin Gedruckt auf säurefreiem und chlorfrei gebleichtem Papier. Printed in Germany ISBN 978-3-8348-0390-0 Vorwort ȱ Mitȱ derȱSQLȬNormȱausȱdemȱ Jahrȱ2003ȱ(SQL:2003)ȱundȱ ihrerȱImplementierungȱinȱ DB2ȱVersionȱ9.5ȱderȱFirmaȱIBMȱistȱjetztȱXMLȱintegralerȱBestandteilȱderȱaktuelȬ lenȱ undȱ nochȱ mehrȱ derȱ zukünftigenȱ Datenbanktechnikȱ geworden.ȱ Mitȱ denȱ nunȱ verfügbarenȱeingebautenȱFunktionenȱvonȱSQL/XMLȱkönnenȱausȱrelationalenȱDaȬ tenȱ beliebigȱ strukturierteȱ XMLȬDokumenteȱ generiertȱ werden.ȱ Aufȱ Inhalteȱ derȱ XMLȬDokumenteȱ wirdȱ mitȱ derȱ Spracheȱ XQueryȱ lesendȱ undȱ modifizierendȱzugeȬ griffen.ȱ Mitȱ derȱ Spracheȱ XMLȱ Schemaȱ werdenȱ XMLȬSchemataȱ erzeugt,ȱ dieȱ vomȱ Dokumentenvalidiererȱ vonȱ DB2ȱ zurȱ Überprüfungȱ vonȱ zuȱ speicherndenȱ XMLȬ Dokumentenȱverwendetȱwerden.ȱȱ MitȱdenȱsehrȱmächtigenȱneuenȱSprachmittelnȱvonȱSQL/XMLȱkönnenȱnunȱkompleȬ xeȱXMLȬDokumenteȱmitȱderȱSicherheit,ȱZuverlässigkeitȱundȱPerformanceȱmoderȬ nerȱ universellerȱ Datenbanksystemeȱ beliebigȱ verwaltetȱ werden.ȱ Dadurchȱ erhöhtȱ sichȱjedochȱauchȱdasȱstrukturelleȱGefügeȱinȱdenȱnunȱhierarchischenȱDatenstruktuȬ ren.ȱDieȱhierausȱresultierendeȱstrukturelleȱKomplexitätȱkannȱsinnvollȱnurȱnochȱmitȱ einerȱ grafischenȱ Spracheȱ ökonomischȱ undȱ zuverlässigȱ beherrschtȱ werden.ȱ Undȱ dieseȱSpracheȱfürȱdieȱarchitekturgetriebeneȱSoftwareentwicklungȱistȱheuteȱUML.ȱ ZentralesȱAnliegenȱdesȱBuchesȱistȱes,ȱdenȱLeserȱsoȱeinfachȱwieȱmöglichȱinȱerprobteȱ Methoden,ȱStrategienȱundȱVerfahrenȱderȱDatenmodellierungȱvonȱXMLȬDokumenȬ tenȱeinzuführen.ȱHierbeiȱwirdȱihmȱeinȱgrundlegendesȱVerständnisȱfürȱdieȱadäquaȬ teȱBezeichnungȱundȱStrukturierungȱvonȱXMLȬDokumentenȱvermittelt.ȱ Hieraufȱ aufbauendȱ werdenȱ dieȱ neuenȱ Sprachmittelȱ zurȱ Generierungȱ beliebigerȱ XMLȬDokumenteȱ ausȱ relationalenȱ Datenȱ intensivȱ undȱ übersichtlichȱ erarbeitet.ȱ Dabeiȱ wirdȱ ebenfallsȱ eineȱ leichtȱ verständlicheȱ Lernstrategieȱ vomȱ Einfachenȱ zumȱ Komplexenȱ hinȱ eingesetzt,ȱ dieȱ beiȱ zahlreichenȱ Vorlesungenȱ anȱ derȱ SRHȱ HochȬ schuleȱHeidelbergȱsichȱalsȱnützlichȱerwiesenȱhat.ȱȱ Einȱ besondererȱ Schwerpunktȱ desȱ Buchesȱ bildetȱ dieȱ Behandlungȱ derȱ neuenȱ SpraȬ cheȱ XQueryȱ imȱ DB2ȬUmfeldȱ zumȱ Lesenȱ undȱ Verändernȱ vonȱ Datenȱ inȱ XMLȬ Dokumenten.ȱAnȱebenfallsȱzahlreichenȱundȱgetestetenȱBeispielenȱwirdȱinȱdieȱneueȱ hierarchischeȱDenkweiseȱeingeführt,ȱderȱdieseȱSpracheȱAusdruckȱverleiht.ȱHierbeiȱ werdenȱdieȱvielenȱneuenȱDatentypenȱvonȱXQueryȱebensoȱpraktischȱeingesetztȱwieȱ auchȱihreȱOperatoren,ȱeingebautenȱFunktionenȱundȱdieȱZugriffspfadsteuerspracheȱ XPathȱ2.0.ȱȱ ȱ V Vorwortȱ DenȱAbschlussȱderȱXQueryȬBehandlungȱbildetȱeinȱkleinerȱExkursȱinȱdieȱProgramȬ mierspracheȱ Javaȱ undȱ denȱ Zugriffȱ aufȱ XMLȬDokumenteȱ überȱ dieȱ JDBCȬSchnittȬ stelleȱaufȱderȱGrundlageȱderȱherkömmlichenȱSQLȬȱundȱderȱneuenȱXQueryȬSprache.ȱ Dasȱ Buchȱ wirdȱ abgeschlossenȱ mitȱ einerȱ einfachenȱ Einführungȱ inȱ dieȱ SchemabeȬ schreibungsspracheȱXMLȱSchema.ȱDieȱgrundsätzlichenȱKonzepteȱdieserȱsehrȱumȬ fangreichenȱSpracheȱundȱderenȱsprachlicheȱUmsetzungȱbeiȱderȱLösungȱeinfacherȱ Problemeȱ werdenȱ anȱ vielenȱ Beispielenȱ einführendȱ erläutert.ȱ Immerȱ wirdȱ daraufȱ geachtet,ȱdassȱalles,ȱwasȱvorgestelltȱwurde,ȱauchȱinȱDB2ȱläuftȱundȱleichtȱnachvollȬ ziehbarȱist.ȱ DamitȱderȱLeserȱauchȱeineȱKontrolleȱüberȱseinenȱLernfortschrittȱhat,ȱschließtȱjedesȱ Kapitelȱ oderȱ Teilkapitelȱ mitȱ mehrerenȱ Übungenȱ ab.ȱ Musterlösungenȱ werdenȱ aufȱ derȱHomepageȱAlfredȬMoos.deȱangeboten.ȱ Dasȱ Buchȱ istȱ alsȱ Ergebnisȱ einerȱ vierzigjährigenȱ intensivenȱ Beschäftigungȱ mitȱ derȱ Datenmodellierung,ȱ demȱ SoftwareȬEngineering,ȱ vielenȱ Programmiersprachen,ȱ Betriebssystemenȱ undȱ etlichenȱ Datenbanksystemenȱ entstanden.ȱ Besondersȱ dieȱ unzähligenȱ Diskussionenȱ mitȱ Studierendenȱ anȱ derȱ SRHȱ Hochschuleȱ Heidelbergȱ habenȱ dasȱ Aussehenȱ desȱ Buchesȱ geprägt.ȱ Hierbeiȱ standȱ immerȱ derȱ didaktischeȱ Anspruchȱ einerȱ leichtenȱ Verständlichkeitȱ imȱ Vordergrundȱ derȱ Überlegungen,ȱ ohneȱ denȱ Anspruchȱ aufȱ eineȱ systematischeȱ undȱ wissenschaftlicheȱ Begründungȱ aufzugeben.ȱ Beiȱ meinenȱ Forschungenȱ zuȱ diesemȱ Buchȱ habenȱ besondersȱ dieȱ Herrenȱ Dipl.Ȭ Inform.ȱ(FH)ȱAndreasȱFördererȱundȱM.ȱSc.ȱStefanȱMüllerȱmirȱwertvolleȱZuarbeitenȱ geleistet.ȱ Ganzȱ besondersȱ dankeȱ ichȱ auchȱ denȱ Herrenȱ Prof.ȱ Dr.ȱ Haioȱ Röckleȱ undȱ Dipl.ȬInform.ȱ Holgerȱ Handelȱ fürȱ ihrȱ effektivesȱ Korrekturlesenȱ undȱ ihreȱ gutenȱ RatschlägeȱfürȱdieȱOptimierungȱderȱTexte.ȱ BesondersȱdankeȱichȱmeinerȱFamilieȱfürȱihreȱGeduldȱundȱderȱpositivenȱBegleitungȱ derȱArbeit.ȱ ȱ Hemsbach,ȱimȱAprilȱ2008ȱ VIȱ ȱ ȱ ȱ ȱ ȱȱȱȱȱȱȱȱȱȱAlfredȱMoos Leitfaden zum Lesen des Buches ȱ InȱdenȱerstenȱKapitelnȱwerdenȱgrundlegendeȱFeststellungenȱüberȱXML,ȱUML,ȱdasȱ EntityȱRelationshipȬModellȱundȱdasȱrelationaleȱDatenbankmodellȱformuliert.ȱDerȱ geneigteȱLeser,ȱderȱsichȱaufȱdiesenȱGebietenȱschonȱgutȱauskennt,ȱkannȱdieseȱKapiȬ telȱkurzȱstreifen.ȱErȱsollteȱsichȱjedochȱdieȱBeispieltabellenȱanlegen,ȱdieȱinȱdenȱfolȬ gendenȱKapitelnȱintensivȱbenutztȱwerden.ȱ Dasȱ Kapitelȱ überȱ dieȱ neuenȱ Publikationsfunktionenȱ vonȱ SQL/XMLȱ sollteȱ jedochȱ intensivȱdurchgearbeitetȱwerden.ȱDieseȱFunktionenȱentfaltenȱinȱihrerȱverschachtelȬ tenȱ Anwendungȱ sehrȱ raschȱ eineȱ hoheȱ Komplexität.ȱ Dieseȱ Komplexitätȱ istȱ erfahȬ rungsgemäßȱnurȱnochȱdurchȱeineȱarchitekturgetriebeneȱundȱmodellgestützteȱHeȬ rangehensweiseȱwirtschaftlichȱzuȱbewältigen.ȱAuchȱempfiehltȱsichȱhierȱeineȱhoheȱ Darstellungsdisziplin,ȱweilȱansonstenȱsehrȱschnellȱdieȱÜbersichtȱverlorenȱgeht.ȱDieȱ einzelnenȱLernschritteȱsolltenȱmitȱdemȱDatenbankprozessorȱDB2ȱinȱseinerȱneuesȬ tenȱ Versionȱdurchgeführtȱwerden.ȱDieȱCommunityȱVersionȱ vonȱDB2,ȱwelcheȱdieȱ erforderlicheȱ Funktionalitätȱ enthält,ȱ kannȱ kostenlosȱ vonȱ derȱ Firmaȱ IBMȱ ausȱ demȱ WWWȱheruntergeladenȱwerden.ȱ Dieȱ folgendenȱ Kapitel,ȱ dieȱ inȱ dieȱ neueȱ Datenmanipulationsspracheȱ XQueryȱ undȱ dieȱ Datendefinitionsspracheȱ XMLȱ Schemaȱ einführen,ȱ solltenȱ ebenfallsȱ nachhaltigȱ undȱBeispielȱfürȱBeispielȱdurchgearbeitetȱwerden.ȱ ȱ Ichȱ wünscheȱ Ihnenȱ vielȱ Freudeȱ beiȱ derȱ Lektüreȱ desȱ Buchesȱ undȱ einenȱ schnellenȱ undȱnachhaltigenȱLernerfolg.ȱ ȱ VIIȱ Inhaltsverzeichnis 1ȱȱXMLȱ–ȱerweiterbareȱAuszeichnungssprache........................................................... 1 1.1ȱȱXMLȱ–ȱeinȱkurzerȱÜberblick.................................................................................. 1 1.2ȱȱVokabelȱ–ȱBegriffȱ–ȱBegriffssystem....................................................................... 3 1.2.1ȱȱBegriff................................................................................................................ 3 1.2.2ȱȱBegriffssystem.................................................................................................. 4 1.3ȱȱÜbungen .................................................................................................................. 5 2ȱȱUMLȱ–ȱgrafischeȱModellierungssprache .................................................................. 7 2.1ȱȱERMȱ–ȱeinȱkurzerȱÜberblick................................................................................ 11 2.2ȱȱRDBMȱ–ȱeinȱkurzerȱÜberblick............................................................................. 14 2.3ȱȱSQLȬDDLȱ–ȱeineȱvereinfachteȱAnwendung ...................................................... 16 2.3.1ȱȱBeispieltabellenȱvereinbaren ........................................................................ 17 2.3.2ȱȱBeispieltabellenȱladen ................................................................................... 19 2.3.3ȱȱBeispieltabellenȱlesen .................................................................................... 20 2.4ȱȱÜbungen ................................................................................................................ 27 3ȱȱXMLȱundȱSQLȱ–ȱVereinigungȱzweierȱWelten ....................................................... 29 3.1ȱȱXMLȱinȱSQLȱ–ȱSQL/XML ..................................................................................... 29 3.2ȱȱSQLȱinȱXMLȱ–ȱXQuery ......................................................................................... 32 3.3ȱȱXMLȱSchemaȱ–ȱDDLȱfürȱXMLȬDokumente....................................................... 33 3.4ȱȱÜbungen ................................................................................................................ 33 4ȱȱPublikationȱrelationalerȱDaten ................................................................................ 35 4.1ȱȱXMLȬSprachkonstrukteȱ–ȱeinȱkurzerȱÜberblick ............................................... 35 4.2ȱȱXMLDOCUMENTȱ–ȱerzeugtȱeinȱXMLȬDokument .......................................... 37 4.3ȱȱXMLELEMENTȱ–ȱerzeugtȱeinȱXMLȬElement.................................................... 38 4.4ȱȱXMLSERIALIZEȱ–ȱerzeugtȱZeichenform........................................................... 40 4.5ȱȱXMLFORESTȱ–ȱerzeugtȱvieleȱXMLȬElemente................................................... 45 4.6ȱȱXMLATTRIBUTESȱ–ȱerzeugtȱvieleȱXMLȬAttribute.......................................... 47 4.7ȱȱXMLCOMMENTȱ–ȱerzeugtȱeinenȱXMLȬKommentar ...................................... 54 ȱ IXȱ Inhaltsverzeichnisȱ 4.8ȱȱXMLTEXTȱ–ȱerzeugtȱeinenȱXMLȬText ................................................................57 4.9ȱȱXMLNAMESPACESȱ–ȱerzeugtȱXMLȬNamensräume.......................................58 4.10ȱȱXMLCONCATȱ–ȱerzeugtȱeinenȱXMLȬWert .....................................................61 4.11ȱȱXMLAGGȱ–ȱerzeugtȱeinenȱXMLȬWert..............................................................64 4.12ȱȱPublikationȱderȱKundenȱundȱihrenȱRechnungen ...........................................68 4.12.1ȱȱXMLȬDokumentȱAlleȱKunden ......................................................................71 4.12.2ȱȱXMLȬDokumentȱAlleȱKundenȱmitȱihrenȱRechnungen .................................74 4.12.3ȱȱXMLȬDokumentȱKundenrechnungen .......................................................78 4.12.4ȱȱXMLȬDokumentȱKundenrechnungenȱattributzentriert ..........................83 4.13ȱȱPublikationȱRechnungenȱihreȱKundenȱundȱArtikel .......................................87 4.14ȱȱÜbungen ...............................................................................................................92 5ȱȱXMLȬDokumenteȱrelationalȱspeichern ...................................................................95 5.1ȱȱSpalteȱvomȱDatentypȱXMLȱvereinbaren ............................................................95 5.2ȱȱXMLȬDatenȱinȱSpalteȱvomȱDatentypȱXMLȱladen .............................................96 5.3ȱȱKundendatenȱvomȱDatentypȱXMLȱladen ..........................................................99 5.4ȱȱÜbungen ...............................................................................................................103 6ȱȱXMLȬDatenȱmanipulierenȱ–ȱXQuery .....................................................................105 6.1ȱȱDieȱSpracheȱXQuery ...........................................................................................105 6.1.1ȱȱDasȱDatenmodellȱvonȱXQueryȱȬȱEinführung............................................105 6.1.2ȱȱBefehlȱXQueryȱinȱDB2ȬClientȱeingeben.....................................................109 6.1.3ȱȱÜbungen ........................................................................................................115 6.2ȱKonstruktorenȱzurȱErzeugungȱvonȱXDMȬKnoten ...........................................116 6.2.1ȱȱÜbungen ........................................................................................................127 6.3ȱȱDatentypenȱinȱXQuery .......................................................................................128 6.3.1ȱȱEingebautenȱDatentypenȱinȱXQueryȱvonȱDB2 .........................................130 6.3.2ȱȱNumerischeȱDatentypen .............................................................................135 6.3.3ȱȱZeichenförmigeȱDatentypen .......................................................................139 6.3.4ȱȱDatumȬȱundȱZeitȬDatentypen.....................................................................142 6.3.5ȱȱSonstigeȱDatentypen ....................................................................................150 6.3.6ȱȱÜbungen ........................................................................................................155 Xȱ Inhaltsverzeichnisȱ 6.4ȱȱAusdrückeȱinȱXQuery ........................................................................................ 156 6.4.1ȱȱSequenzausdrücke....................................................................................... 157 6.4.2ȱȱArithmetischeȱAusdrücke .......................................................................... 164 6.4.3ȱȱDatumȬȱundȱZeitausdrücke........................................................................ 166 6.4.4ȱȱZeichenkettenausdrücke............................................................................. 171 6.4.5ȱȱVergleichsausdrücke ................................................................................... 175 6.4.6ȱȱLogischeȱAusdrücke.................................................................................... 178 6.4.7ȱȱAlternativausdrücke ................................................................................... 179 6.4.8ȱȱQuantifizierendeȱAusdrücke...................................................................... 181 6.4.9ȱȱMengenausdrücke ....................................................................................... 183 6.4.10ȱȱÜbungen ..................................................................................................... 187 6.5ȱȱPfadȬAusdrücke.................................................................................................. 189 6.5.1ȱȱZugriffȱaufȱXMLȬDokumente..................................................................... 189 6.5.2ȱȱEingebauteȱFunktionenȱzumȱLesenȱvonȱXMLȬDokumenten................. 193 6.5.3ȱȱPfadausdruck ............................................................................................... 198 6.5.4ȱȱStrukturȱdesȱPfadausdrucks....................................................................... 204 6.5.5ȱȱAchse ............................................................................................................. 205 6.5.6ȱȱKnotenbezeichnung .................................................................................... 214 6.5.7ȱȱPrädikat......................................................................................................... 220 6.5.8ȱȱAbkürzendeȱSchreibweisenȱfürȱAchsenȱundȱKnotentypen ................... 226 6.5.9ȱȱLesenȱohneȱSQLȬUnterstützung ................................................................ 228 6.5.10ȱȱÜbungen ..................................................................................................... 232 6.6ȱȱFLWORȬAusdruck ............................................................................................. 233 6.6.1ȱȱXDMȬWerteȱinȱFLWORȬAusdruckȱlesen.................................................. 237 6.6.2ȱȱAggregatsfunktionenȱinȱFLWORȬAusdrücken ....................................... 240 6.6.3ȱȱZusammenfassungenȱinȱFLWORȬAusdrücken ....................................... 247 6.6.4ȱȱVerbundeȱinȱFLWORȬAusdrücken ........................................................... 251 6.6.5ȱȱÜbungen ....................................................................................................... 258 7ȱȱXMLȬDatenȱinȱrelationaleȱDatenȱzerlegen........................................................... 261 7.1ȱȱRelationaleȱTabelleȱausȱXMLȬDokumentenȱerstellen .................................... 261 7.2ȱȱDasȱSQLȬPrädikatȱXMLEXISTS ........................................................................ 265 7.3ȱȱÜbungen .............................................................................................................. 268 XIȱ Inhaltsverzeichnisȱ 8ȱȱXMLȬDatenȱmanipulierenȱ–ȱDMLȱvonȱXQuery...................................................269 8.1ȱȱDatenȱinȱeinenȱXDMȬBaumȱeinfügen ...............................................................270 8.2ȱȱDatenȱinȱeinemȱXDMȬBaumȱlöschen ................................................................276 8.3ȱȱDatenȱinȱeinemȱXDMȬBaumȱersetzten..............................................................278 8.4ȱȱDatenȱinȱeinemȱXDMȬBaumȱumbenennen ......................................................280 8.5ȱȱVieleȱÄnderungenȱinȱeinemȱUmsetzungsausdruck .......................................281 8.6ȱȱÜbungen ...............................................................................................................283 9ȱȱXMLȬDatenȱinȱJavaȱverarbeiten..............................................................................285 9.1ȱȱVerbindungȱzwischenȱJavaȱundȱDB2ȱherstellen .............................................285 9.2ȱȱLesenderȱZugriffȱüberȱdieȱSQLȬSchnittstelle...................................................286 9.3ȱȱLesenderȱZugriffȱüberȱdieȱXQueryȬSchnittstelle.............................................288 9.4ȱȱÜbungen ...............................................................................................................289 10ȱȱXMLȬDatenȱdefinierenȱ–ȱXMLȱSchema ...............................................................291 10.1ȱȱXMLȱSchemaȱ–ȱeinȱkurzerȱÜberblick..............................................................291 10.2ȱȱVomȱModellȱbisȱzumȱvalidiertenȱXMLȬDokument ......................................294 10.3ȱȱZentraleȱSprachkonstrukteȱ–ȱeineȱAuswahl ..................................................301 10.3.1ȱȱTypdefinition ..............................................................................................302 10.3.2ȱȱEinfacherȱTyp..............................................................................................302 10.3.3ȱȱKomplexerȱTyp...........................................................................................304 10.4ȱȱÜbungen .............................................................................................................313 Literaturverzeichnis......................................................................................................315 Sachwortverzeichnis.....................................................................................................319 XIIȱ 1 XML – erweiterbare Auszeichnungssprache InȱdiesemȱKapitelȱlernenȱSie,ȱ – wasȱXMLȱistȱundȱȱ – wieȱBegriffssystemeȱmitȱXMLȱgeschaffenȱwerdenȱkönnen.ȱ MitȱIhremȱerworbenenȱWissenȱkönnenȱSieȱsodannȱauchȱgroßeȱundȱanspruchsvolleȱ XMLȬDokumenteȱentwickeln.ȱ 1.1 XML – ein kurzer Überblick XMLȱistȱdieȱAbkürzungȱfürȱEXtensibleȱMarkȬupȱLanguage.ȱImȱdeutschenȱSprachbeȬ reichȱwirdȱXMLȱauchȱalsȱErweiterbareȱAuszeichnungsspracheȱbezeichnet.ȱXMLȱwirdȱ vomȱWorldȱWideȱWebȱConsortiumȱ(W3C)ȱdefiniert.ȱDieȱersteȱXMLȬSpezifikationȱ wurdeȱalsȱRecommendationȱ1998ȱvomȱW3Cȱveröffentlicht.ȱDieȱletzteȱEmpfehlungȱ wurdeȱimȱAugustȱ2006ȱpubliziertȱ[W3C06].ȱ InȱXMLȱsindȱeinfacheȱRegelnȱfestgelegt,ȱdieȱbeiȱderȱFormulierungȱvonȱsichȱselbstȱ beschreibendenȱDokumentenȱzuȱbeachtenȱsind.ȱDaȱdieȱSpracheȱXMLȱnurȱwenigeȱ eigeneȱ Vokabelnȱ enthält,ȱ undȱ somitȱ vornehmlichȱ nurȱ Regelnȱ zurȱ Definitionȱ vonȱ benutzerspezifischenȱVokabularien,ȱistȱXMLȱeineȱMetasprache.ȱEineȱMetaspracheȱ istȱeineȱSpracheȱzurȱBeschreibungȱandererȱSprachen.ȱDieȱRegelnȱvonȱXMLȱbildenȱ dieȱ Grammatikȱ vonȱ XML.ȱ Dieseȱ Regelnȱ sindȱ beiȱ derȱ Niederschriftȱ vonȱ XMLȬ Dokumentenȱzuȱbeachten.ȱ Dieȱ Auszeichnungsspracheȱ XMLȱ legtȱ fest,ȱ wieȱ benutzerspezifischeȱ Vokabelnȱ inȱ XMLȬDokumentenȱzuȱverwendenȱsind.ȱDieseȱVokabelnȱdienenȱzurȱAuszeichnungȱ bzw.ȱ Kennzeichnungȱ vonȱ Textteilenȱ inȱ einemȱ XMLȬDokument.ȱ Imȱ Englischenȱ bezeichnetȱ manȱ dieseȱ Auszeichnungsvokabelnȱ alsȱ tags.ȱ Dasȱ Auszeichnenȱ selbstȱ wirdȱ alsȱ markȱ upȱ (deutsch:ȱ auszeichnen,ȱ markieren,ȱ kennzeichnen)ȱ bezeichnet.ȱ EineȱumfangreicheȱAuszeichnungsspracheȱistȱSGMLȱ(StandardȱGeneralizedȱMarkȬ upȱLanguage)ȱ[ISO88].ȱXMLȱistȱeineȱTeilmengeȱvonȱSGML.ȱȱ Einȱ XMLȬDokumentȱ bestehtȱ hauptsächlichȱ ausȱ Nutzdatenȱ undȱ denȱ AuszeichȬ nungsvokabeln,ȱ denȱ tags.ȱ Dieȱ tagsȱ sagenȱ aus,ȱ welcheȱ Bedeutungȱ dieȱ Nutzdatenȱ haben.ȱZusätzlichȱzuȱdiesenȱDatenȱkannȱeinȱXMLȬDokumentȱnochȱausȱdemȱPrologȱ undȱ derȱ DocumentȱTypeȱDefinitionȱ(DTD)ȱ bestehen.ȱ Nebenȱ derȱ BedeutungszuordȬ nungȱ dienenȱ dieȱ tagsȱ auchȱ nochȱ zurȱ hierarchischenȱ Gliederungȱ desȱ XMLȬDokuȬ mentes.ȱ ȱ 1 1ȱȱXMLȱ–ȱerweiterbareȱAuszeichnungsspracheȱ Beispielȱ Hugo Mueller (1) (2) (3) (4) XMLȬDokumentȱ1:ȱEinführendesȱXMLȬDokumentȱ DasȱBeispielȱistȱeinȱXMLȬDokument,ȱdasȱausȱdenȱbeidenȱNutzdatenwortenȱHugoȱ undȱMuellerȱbesteht.ȱDieȱAuszeichnungsvokabelnȱsindȱinȱspitzenȱKlammernȱeinȬ gefasst.ȱ Hinfortȱ werdenȱ wirȱ sieȱ alsȱ XMLȬElementeȱ bezeichnen.ȱ Inȱ Zeileȱ (1)ȱ stehtȱ dasȱStartȬElementȱ.ȱEsȱbeschreibtȱdenȱDokumentinhalt,ȱderȱinȱZeileȱ(2)ȱundȱ (3)ȱ steht.ȱ Inȱ Zeileȱ (4)ȱ stehtȱ dasȱ EndeȬElementȱ .ȱ Esȱ unterscheidetȱ sichȱ vonȱ seinemȱ StartȬElementȱ durchȱ denȱ Schrägstrichȱ vorȱ demȱ XMLȬElementname.ȱ Derȱ Dokumentteilȱ zwischenȱ demȱ StartȬȱ undȱ demȱ EndeȬElementȱ desȱ XMLȬElementesȱ ȱ istȱ dessenȱ Elementinhaltȱ oderȱ synonymȱ derȱ ElementȬWert.ȱ Derȱ ElementȬ WertȱvonȱȱbestehtȱselbstȱausȱdenȱbeidenȱXMLȬElementenȱȱundȱ ȱ mitȱ ihrenȱ jeweiligenȱ Elementinhalten.ȱ Dieseȱ beidenȱ XMLȬElementeȱ sindȱinȱdasȱXMLȬElementȱȱhierarchischȱgeschachtelt.ȱWieȱausȱdemȱBeispielȱ ersichtlichȱ ist,ȱ gestattetȱ dieȱ angemesseneȱ Benennungȱ derȱ XMLȬElementȬNamenȱ eineȱ sinntragendeȱ Beschreibungȱ ihrerȱ Elementinhalte.ȱ Inȱ einemȱ XMLȬDokumentȱ sindȱsomitȱNutzdatenȱundȱdieȱsieȱbeschreibendenȱDaten,ȱihreȱMetadaten,ȱvereinigt.ȱ EinȱsolchesȱMetadatumȱinȱGestaltȱeinesȱXMLȬElementȬNamensȱistȱderȱDeskriptorȱ desȱfolgendenȱElementȬInhalts.ȱȱ Durchȱ dieȱ beliebigeȱ hierarchischeȱ Schachtelungȱ derȱ XMLȬElementeȱ nimmtȱ dasȱ XMLȬDokumentȱ dieȱ Gestaltȱ einesȱ Datenbaumesȱ an,ȱ derȱ abstraktȱ betrachtetȱ auchȱ alsȱ Graphȱ mitȱ Knotenȱ undȱ Kantenȱ auffassbarȱ ist.ȱ Einȱ solcherȱ Baumȱ bestehtȱ ausȱ genauȱ einemȱ XMLȬElement,ȱ welchesȱ derȱ Wurzelknotenȱ ist,ȱ ausȱ beliebigȱ vielenȱ XMLȬElementen,ȱ denȱ Blättern,ȱ undȱ beliebigȱ vielenȱ XMLȬElementen,ȱ denȱ ZwiȬ schenknoten.ȱDieseȱbefindenȱsichȱzwischenȱdemȱWurzelknotenȱundȱdenȱBlattknoȬ ten.ȱJederȱdieserȱKnotenȱwirdȱdurchȱeinȱXMLȬElementȱgebildet.ȱ DerȱvonȱeinemȱXMLȬElementȱumfassteȱInhaltȱistȱvonȱdiesemȱexistenziellȱabhängig.ȱ OhneȱseinȱübergeordnetesȱXMLȬElementȱkannȱeinȱuntergeordnetesȱXMLȬElementȱ nichtȱ existieren.ȱ Speziellȱ seinȱ Sinnȱ gehtȱ verloren,ȱ wennȱ esȱ ausȱ demȱ SinnzusamȬ menhang,ȱdemȱKontext,ȱseinesȱübergeordnetenȱXMLȬElementesȱherausgelöstȱwird.ȱ 2ȱ 1.2ȱȱVokabelȱ–ȱBegriffȱ–ȱBegriffssystemȱ 1.2 Vokabel – Begriff – Begriffssystem Dieȱ Erweiterbareȱ Auszeichnungsspracheȱ (XML)ȱ ermöglichtȱ es,ȱ beliebigeȱ anwenȬ dungsȬȱ undȱ benutzerspezifischeȱ Auszeichnungssprachenȱ zuȱ schaffen.ȱ Dieseȱ beȬ stehenȱ ausȱ Vokabelnȱ undȱ grammatikalischenȱ Regeln,ȱ wobeiȱ dieȱ Vokabelnȱ alsȱ XMLȬElementȬNamenȱ bezeichnetȱ werden.ȱ Mitȱ diesenȱ Vokabelnȱ werdenȱ DokuȬ mentinhalteȱausgezeichnet.ȱBeiȱsinnvollȱgewähltenȱVokabelnȱwerdenȱimȱZugeȱderȱ AuszeichnungȱdieȱDokumentinhalteȱmitȱzusätzlichenȱSinnzuordnungenȱversehenȱ undȱ beiȱ Bedarfȱ hierarchischȱ organisiert.ȱ Wirdȱ einȱ derartȱ ausgezeichnetesȱ DokuȬ mentȱvonȱeinemȱSenderȱanȱeinenȱEmpfängerȱübertragen,ȱsoȱkannȱderȱEmpfängerȱ dieȱ Bedeutungȱ desȱ Dokumentesȱ aufgrundȱ derȱ Aussagenȱ derȱ inȱ ihmȱ enthaltenenȱ XMLȬElementȬNamenȱ unmissverständlichȱverstehen.ȱVoraussetzungȱist,ȱdassȱderȱ SenderȱundȱderȱEmpfängerȱsichȱüberȱdieȱBedeutungȱderȱXMLȬElementȬNamen,ȱd.ȱ h.ȱderȱVokabeln,ȱvorherȱverständigtȱhaben.ȱ EineȱVokabel,ȱdieȱalsȱNameȱeinesȱXMLȬElementesȱverwendetȱwird,ȱsollteȱderȱNaȬ meȱeinesȱimȱAnwendungsbereichȱgebräuchlichenȱBegriffsȱsein.ȱDadurchȱwirdȱeinȱ XMLȬElementȬNameȱzuȱeinemȱBegriffsbezeichner.ȱ 1.2.1 Begriff Derȱ Begriffȱ spieltȱ inȱ derȱ Informatik,ȱ wieȱ inȱ anderenȱ Wissenschaftenȱ auch,ȱ eineȱ herausragendeȱ Rolle.ȱ Speziellȱ fürȱ dieȱ Benennungȱ einesȱ XMLȬElementesȱ sindȱ dieȱ FrageȱnachȱdemȱBezeichnerȱdesȱfürȱdieȱBenennungȱverwendetenȱBegriffsȱundȱdas,ȱ wasȱsichȱhinterȱdiesemȱBezeichnerȱverbirgt,ȱvonȱbesondererȱBedeutung.ȱInȱAnlehȬ nungȱ anȱ DINȱ 2330ȱ „Begriffeȱ undȱ Benennungen;ȱ Allgemeineȱ Grundsätze“ȱ wollenȱ wirȱunterȱBegriffȱfolgendesȱverstehen:ȱȱ Dieȱ gedanklicheȱ Zusammenfassungȱ vonȱ individuellenȱ Gegenständenȱ zuȱ gedachtenȱ „allȬ gemeinenȱ Gegenständen“ȱ führtȱ zuȱ Denkeinheiten,ȱ dieȱ alsȱ „Begriffe“ȱ bezeichnetȱ werdenȱ können.ȱ[DINȱ2330]ȱ EinȱBegriffȱbestehtȱausȱdreiȱTeilenȱ – seinemȱNamenȱ(Bezeichner,ȱVokabel)ȱ – seinerȱIntensionȱ(Bedeutung,ȱDefinition)ȱ – seinerȱExtensionȱ(MengeȱallerȱvonȱihmȱbetroffenenȱDinge)ȱ 3ȱ 1ȱȱXMLȱ–ȱerweiterbareȱAuszeichnungsspracheȱ Beispielȱ BetrachtenȱwirȱdenȱBegriffȱmitȱdemȱBezeichnerȱAnrede.ȱ BetrachtungsȬ gegenständeȱ Beschreibungȱ Beispielȱ Bezeichnerȱ NameȱdesȱBegriffsȱ Anredeȱ Intensionȱ BedeutungȱdesȱBegriffsȱ bzw.ȱseineȱDefinition.ȱ Etwas,ȱmitȱdemȱPersonenȱhöflichȱ angesprochenȱwerden.ȱ Extensionȱ MengeȱallerȱDingeȱ(EntiȬ täten),ȱdieȱunterȱdenȱ Begriffȱfallenȱ DieȱWorteȱ Frau,ȱHerrȱ Tabelleȱ1:ȱBestandteileȱeinesȱBegriffsȱ Wendetȱ manȱ dieȱ etwasȱ abstraktenȱ Vorüberlegungenȱ aufȱ denȱ Findungsprozessȱ einesȱ Bezeichnersȱ fürȱ dasȱ XMLȬElementȱ an,ȱ soȱ kommtȱ manȱ wohlȱ zurȱ EntscheiȬ dung,ȱ dassȱ dasȱ XMLȬElementȱ ȱ heißenȱ soll,ȱ mitȱ demȱ dieȱ beidenȱ DokuȬ mentinhalteȱ Frauȱ bzw.ȱ Herrȱ inȱ einenȱ eindeutigenȱ Sinnzusammenhangȱ gebrachtȱ undȱ ausgezeichnetȱ werdenȱ können.ȱ Derȱ XMLȬElementȬNameȱ dientȱ dannȱ alsȱ DeȬ skriptorȱfürȱdieȱbeidenȱDokumentinhalteȱFrauȱbzw.ȱHerr.ȱ Beispielȱ Frau ȱ (1) Herr ȱ (1) ȱ XMLȬDokumentȱ2:ȱDerȱNameȱAnredeȱbeschreibtȱHerrȱundȱFrauȱ 1.2.2 Begriffssystem Begriffsbezeichner,ȱ dieȱ fürȱ dieȱ Benennungȱ derȱ XMLȬElementnamenȱ verwendetȱ werden,ȱ solltenȱ einemȱ wohlorganisiertenȱ Begriffssystemȱ entstammen.ȱ Hierdurchȱ wirdȱ dieȱ allgemeineȱ Verständlichkeitȱ derȱ ausgezeichnetenȱ XMLȬDokumenteȱ geȬ fördert.ȱ Solcheȱ Begriffssystemeȱ unterscheidenȱ sichȱ hinsichtlichȱ derȱ Anwendung,ȱ Zielsetzung,ȱformallogischerȱBeschreibungȱusw.ȱ DieȱneuestenȱEntwicklungenȱinȱderȱInformatikȱaufȱdemȱGebietȱderȱinȱsichȱkonsisȬ tentenȱ Begriffssystemeȱ werdenȱ alsȱ Ontologienȱ bezeichnet.ȱ Sieȱ sindȱ dieȱ derzeitȱ höchsteȱ Stufeȱ einesȱ formalisiertenȱ Begriffssystems.ȱ Inȱ einerȱ Ontologieȱ sindȱ dieȱ einzelnenȱ Begriffeȱ undȱ speziellȱ derenȱ Zusammenhängeȱ strengȱ formalisiert.ȱ DaȬ 4ȱ 1.3ȱȱÜbungenȱ durchȱkönnenȱaufȱsolcheȱBegriffssystemeȱautomatisierteȱSchlussfolgerungsverfahȬ renȱangewendetȱwerden.ȱZurȱErstellungȱundȱPflegeȱvonȱOntologienȱwerdenȱheuteȱ undȱnochȱmehrȱinȱZukunftȱgeeigneteȱSprachenȱundȱWerkzeugeȱeingesetzt.ȱAktuelȬ leȱ Sprachenȱ sindȱ derzeitȱ dasȱ Resourceȱ Descriptionȱ Frameworkȱ (RDF)ȱ [MFM04]ȱ undȱdieȱWebȱOntologyȱLanguageȱ(OWL)ȱ[W3C07].ȱ 1.3 Übungen 1) Findenȱ Sieȱ imȱ Worldȱ Wideȱ Webȱ (WWW)ȱ dieȱ Veröffentlichungenȱ desȱ Worldȱ WideȱWebȱConsortiumsȱ(W3C)ȱüberȱXML.ȱ 2) Fassenȱ Sieȱ zusammen,ȱ wasȱ manȱ unterȱ Vokabularienȱ verstehtȱ undȱ findenȱ Sieȱ einigeȱBeispiele.ȱ 3) Untersuchenȱ Sieȱ einȱ XMLȬDokumentȱ unterȱ denȱ Gesichtspunktenȱ vonȱ MetaȬ spracheȱundȱbeschriebeneȱSprache.ȱ 4) HaltenȱSieȱfest,ȱwasȱmanȱunterȱeinerȱAuszeichnungsspracheȱversteht.ȱ 5) BeschreibenȱSieȱdieȱStrukturȱeinesȱXMLȬDokumentes.ȱ 6) Fassenȱ Sieȱ zusammen,ȱ wasȱ manȱ unterȱ einemȱ Begriff,ȱ einemȱ Begriffssystemȱ undȱeinerȱOntologieȱversteht.ȱ ȱ 5ȱ 2 UML – grafische Modellierungssprache InȱdiesemȱKapitelȱlernenȱSie,ȱ – – – – – wieȱmitȱUMLȱBegriffssystemeȱmodelliertȱwerdenȱ wieȱmitȱUMLȱsemantischeȱDatenmodelleȱmodelliertȱwerdenȱ wieȱmitȱUMLȱDatenarchitekturenȱmodelliertȱwerdenȱ wieȱmitȱUMLȱrelationaleȱDatenbankmodelleȱmodelliertȱwerdenȱ wieȱdieȱArchitekturȱeinesȱXMLȬDokumentesȱmitȱUMLȱveranschaulichtȱwird.ȱ Mitȱ Ihremȱ erworbenenȱ Wissenȱ könnenȱ Sieȱ sodannȱ auchȱ großeȱ Begriffssysteme,ȱ DatenȬȱundȱDatenbankmodelleȱundȱXMLȬDokumenteȱveranschaulichen.ȱ ȱ „Einȱ Bildȱ sagtȱ mehrȱ alsȱ tausendȱ Worte“.ȱ Diesesȱ Sprichwortȱ drücktȱ eineȱ tiefgreiȬ fendeȱErfahrungȱvonȱunsȱDurchschnittsmenschenȱaus.ȱWerdenȱInformationenȱunsȱ inȱ Bildernȱ präsentiert,ȱsoȱ kannȱ unserȱ Gehirnȱ dieseȱvielȱ schnellerȱ undȱ inȱ größererȱ KomplexitätȱverarbeitenȱalsȱwennȱdieselbenȱInformationenȱinȱgeschriebenenȱWorȬ tenȱ unsȱ übermitteltȱ würden.ȱ Aufgrundȱ dieserȱ Tatsacheȱ istȱ esȱ sinnvoll,ȱ komplexeȱ SystemeȱmitȱgrafischenȱSprachenȱundȱnichtȱinȱSchriftsprachenȱzuȱbeschreiben.ȱ Dieȱ UMLȱ (Unifiedȱ Modelingȱ Language)ȱ [BJR97]ȱ istȱ derzeitȱ dieȱ verbreitetsteȱȱ Modellierungssprache.ȱ Sieȱ wirdȱ inȱ diesemȱ Buchȱ zurȱ grafischenȱ Darstellungȱ vonȱ Datenarchitekturenȱ verwendet.ȱ Datenarchitekturenȱ schlagenȱ sichȱ inȱ UMLȬDiaȬ grammenȱnieder,ȱdieȱDatenmodelleȱüberȱdieȱMiniweltȱundȱhierausȱabgeleitetȱderȱ implementierungsnahenȱEntwurfsweltȱübersichtlichȱdarstellen.ȱ Dieȱ UMLȱ eignetȱ sichȱ auchȱ zurȱ Darstellungȱ vonȱ Begriffssystemen.ȱ Einȱ mitȱ UMLȱ beschriebenesȱ Klassendiagramm,ȱ dasȱ dieȱ Strukturȱ miteinanderȱ inȱ Beziehungȱ steȬ henderȱ Klassenȱ dokumentiert,ȱ kannȱ manȱ alsȱ Vorbildȱ fürȱ einȱ Strukturdiagrammȱ zurȱ Beschreibungȱ vonȱ Begriffenȱ verwenden.ȱ Dieȱ Einführungȱ desȱ Namensȱ einesȱ Begriffs,ȱ d.ȱ h.ȱ dieȱ Deklarationȱ seinesȱ Namens,ȱ wirdȱ hierbeiȱ inȱ Formȱ einesȱ RechtȬ ecksȱdargestellt.ȱInȱdasȱRechteck,ȱdasȱimȱRahmenȱderȱobjektorientiertenȱModellieȬ rungȱeineȱKlasseȱrepräsentiert,ȱwirdȱderȱNameȱdesȱBegriffsȱeingetragen.ȱDamitȱderȱ Betrachterȱ denȱ Begriffȱ nichtȱ mitȱ einerȱ Klasseȱ verwechselt,ȱ wirdȱ zurȱ VerdeutliȬ chungȱ nochȱ derȱ Stereotypȱ ȱ verwendet.ȱ Unterȱ einemȱ Stereotypenȱ verȬ stehtȱmanȱinȱderȱUMLȱdieȱBezeichnungȱderȱSpielartȱeinerȱKlasse.ȱ UMLȱbietetȱdieȱMöglichkeit,ȱzwischenȱeinerȱAusprägungȱeinesȱTypsȱundȱdemȱTypȱ selbstȱ zuȱ unterscheiden.ȱ Inȱ derȱ objektorientiertenȱ Ausdrucksweiseȱ wirdȱ anstelleȱ vonȱ Ausprägungȱ oftȱ derȱ eingedeutschteȱ englischeȱ Bezeichnerȱ Instanzȱ (englisch:ȱ instance,ȱdeutsch:ȱBeispiel)ȱverwendet.ȱVonȱdieserȱeherȱmissverständlichenȱÜberȬ setzungȱ wollenȱ wirȱ inȱ diesemȱ Buchȱ absehen.ȱ Derȱ Nameȱ derȱ Ausprägungȱ einesȱ TypsȱwirdȱinȱUMLȱunterstrichen.ȱEinȱnichtȱunterstrichenerȱNameȱbezeichnetȱeinenȱ Typ.ȱ ȱ 7 2ȱȱUMLȱ–ȱgrafischeȱModellierungsspracheȱ ȱ «Begriff» Typ_Begriff ȱ «Begriff» Begriffsname Abbildungȱ1:ȱUMLȱfürȱdieȱTypȬȱundȱdieȱAusprägungsebeneȱ JederȱBegriffȱistȱeineȱAusprägungȱdesȱSchemas,ȱnachȱwelchemȱBegriffeȱzuȱerstellenȱ sind.ȱEinȱTypȱistȱebensoȱeinȱsolchesȱSchema.ȱEinȱTypȱwirdȱmitȱeinemȱNamenȱbeȬ zeichnet.ȱ Damitȱ wirȱ imȱ Fortgangȱ zwischenȱ Namenȱ fürȱ Typenȱ undȱ Namenȱ fürȱ Ausprägungenȱ deutlichȱ unterscheidenȱ können,ȱ schreibenȱ wirȱ einenȱ Typnamenȱ mitȱ demȱ Präfixȱ Typ_ȱ gefolgtȱ vonȱ demȱ eigentlichenȱ Namen.ȱ Fürȱ dieȱ Bezeichnungȱ einerȱAusprägungȱverwendenȱwirȱeinenȱNamenȱohneȱdenȱPräfixȱTyp_.ȱDasȱScheȬ maȱzurȱBildungȱvonȱBegriffenȱnennenȱwirȱdeshalbȱTyp_Begriff.ȱDieȱdreiȱBestandteiȬ leȱ einesȱ Begriffs,ȱ seinȱ Name,ȱ seineȱ Intensionenȱ undȱ seineȱ Extensionenȱ könnenȱ inȱ UMLȱ einfachȱ alsȱ Attributeȱ modelliertȱ werden.ȱ Inȱ UMLȱ wirdȱ somitȱ dasȱ abstrakteȱ Schemaȱ fürȱ dieȱ Begriffsbildungȱ mitȱ demȱ Namenȱ Typ_Begriffȱ bezeichnetȱ undȱ wieȱ folgtȱmodelliert.ȱ «Begriff» Typ_Begriff Name Intension [1..*] Extension [1..*] ȱ ȱ Abbildungȱ2:ȱSchemaȱfürȱdieȱBildungȱvonȱBegriffenȱinȱUMLȱ Aufȱ derȱ rechtenȱ Seiteȱ derȱ Bezeichnerȱ Intensionȱ undȱ Extensionȱ stehtȱ dieȱ UMLȬ spezifischeȱMultiplizitätsangabeȱfürȱeinsȱbisȱvieleȱ[1..*].ȱHiermitȱwirdȱausgedrückt,ȱ dassȱ einȱ Begriffȱ mindestensȱ ausȱ einerȱ Intensionsangabeȱ bestehenȱ mussȱ undȱ ausȱ vielenȱ Intensionsangabenȱbestehenȱ kann.ȱDasselbeȱgiltȱfürȱ dieȱ Extension.ȱEinȱ BeȬ griffȱbestehtȱsomitȱausȱeinemȱbisȱvielenȱBeispielenȱ(Extensionen).ȱ DieȱNamenȱderȱAttributeȱkönnenȱinȱUMLȱauchȱausȱdemȱVerzeichnisȱderȱAttributeȱ hinausverlagertȱ undȱ jeweilsȱ mitȱ einemȱ eigenenȱ UMLȬKlassensinnbildȱ dargestelltȱ werden.ȱInȱderȱfolgendenȱAbbildungȱ3ȱsindȱdieȱAttributeȱIntensionȱundȱExtensionȱ ausȱihremȱBegriffssinnbildȱentferntȱundȱjeweilsȱmitȱeinemȱeigenenȱKlassensinnbildȱ dargestellt.ȱDerȱZusammenhangȱmitȱihremȱauslagerndenȱTypȱwirdȱmitȱderȱKomȬ positionsbeziehungȱbeschrieben.ȱDieȱKompositionsbeziehungȱvonȱUMLȱsagtȱaus,ȱ dassȱeinȱGanzesȱmitȱseinemȱTeilȱinȱVerbindungȱstehtȱundȱdassȱdasȱTeilȱohneȱdasȱ Ganzeȱ nichtȱ existierenȱ kann.ȱ Dieȱ Kompositionsbeziehungȱ zwischenȱ Typ_Begriffȱ undȱ Intensionȱ bzw.ȱExtensionȱbringtȱsomitȱzumȱ Ausdruck,ȱdassȱeineȱAusprägungȱ 8ȱ 2ȱȱUMLȱ–ȱgrafischeȱModellierungsspracheȱ vonȱ Intensionȱ oderȱ Extensionȱ ohneȱ dasȱ Vorhandenseinȱ einerȱ Ausprägungȱ vomȱ GanzenȱderȱArtȱTyp_Begriffȱnichtȱexistierenȱkannȱbzw.ȱnichtȱeindeutigȱwäre.ȱ «Begriff» Typ_Begriff Intension 1..* Name 1..* Extension ȱ Abbildungȱ3:ȱAttributeȱinȱeigeneȱKlassenȱausgelagertȱ Dieȱ Kompositionsbeziehungȱ kannȱ auchȱ alsȱ attributiveȱBeziehungȱ bezeichnetȱ werden,ȱ daȱmitȱihremȱEinsatzȱAttributeȱausȱihrerȱHeimatklasseȱausgelagertȱundȱalsȱeigenȬ ständigeȱBetrachtungsgegenständeȱmodelliertȱwerdenȱkönnen.ȱ DieȱIntensionȱeinesȱneuȱzuȱdeklarierendenȱBegriffsȱwirdȱdurchȱBegriffeȱbeschrieȬ ben,ȱ dieȱ möglicherweiseȱ bereitsȱ vorhandenȱ sind.ȱ Imȱ Zusammenhangȱ mitȱ demȱ neuenȱ Begriffȱ erhaltenȱ sieȱ jedochȱ eineȱ zusätzlicheȱ Bedeutung.ȱ Dieseȱ Bedeutungȱ hängtȱ existenziellȱ vonȱ derȱ Bedeutungȱ desȱ neuenȱ Begriffesȱ ab.ȱ Istȱ beispielsweiseȱ derȱBegriffȱNameȱvorhandenȱundȱwirdȱbeiȱderȱDefinitionȱdesȱneuenȱBegriffsȱKundeȱ verwendet,ȱsoȱverstehenȱwirȱanschließendȱdarunterȱeinenȱKundennamenȱundȱnichtȱ beispielsweiseȱeinenȱArtikelnamen.ȱ InȱderȱfolgendenȱAbbildungȱ4ȱsollȱeinȱneuerȱBegriffȱmitȱdemȱNamenȱKundeȱdeklaȬ riertȱ werden.ȱ Seineȱ Intensionȱ wirdȱ durchȱ dieȱ Aufzählungȱ derȱ ihnȱ definierendenȱ attributivenȱBegriffeȱKunde_Nr,ȱVornameȱundȱZunameȱgebildet.ȱEineȱseinerȱExtenȬ sionenȱsollȱderȱKundeȱHugoȱMüllerȱmitȱderȱKundennummerȱK001ȱsein.ȱ ȱ ȱ «Begriff» Kunde «Begriff» K001:Kunde ȱ Kunde_Nr Kunde_Nr = K001 Vorname Vorname = Hugo 2ȱȱUMLȱ–ȱgrafischeȱModellierungsspracheȱ Zuname Zuname = Müller ȱ Abbildungȱ4:ȱDerȱBegriffȱKundeȱmitȱseinerȱIntensionȱundȱderȱExtensionȱK001ȱ Nebenȱ demȱ attributivenȱ Zusammenhangȱ zwischenȱ einemȱ Begriffȱ undȱ denȱ ihnȱ definierendenȱ Teilbegriffen,ȱ dieȱ wirȱ alsȱ Intensionȱ bezeichnetȱ haben,ȱ gibtȱ esȱ nochȱ denȱ hierarchischenȱZusammenhangȱzwischenȱzweiȱBegriffenȱ[STR02].ȱ Hierbeiȱistȱ beispielsweiseȱ einȱ neuȱ einzuführenderȱ Begriffȱ einȱ Unterbegriffȱ zuȱ einemȱ bereitsȱ bestehendenȱOberbegriff.ȱDerȱneueȱUnterbegriffȱistȱdabeiȱeineȱSpezialisierungȱdesȱȱ Oberbegriffs,ȱwobeiȱderȱOberbegriffȱeineȱGeneralisierungȱdesȱneuenȱUnterbegriffsȱ darstellt.ȱ Zurȱ Modellierungȱ desȱ Beziehungszusammenhangsȱ zwischenȱ einemȱȱ OberȬȱundȱeinemȱUnterbegriffȱgibtȱesȱinȱderȱUMLȱdieȱGeneralisierungsbeziehungȱ 9ȱ 2ȱȱUMLȱ–ȱgrafischeȱModellierungsspracheȱ inȱFormȱeinesȱPfeilsȱmitȱgeschlossenerȱSpitze.ȱDerȱUnterbegriffȱerbtȱdieȱIntensionȱ desȱOberbegriffsȱundȱfügtȱnochȱeineȱeigeneȱIntensionȱinȱGestaltȱvonȱweiterenȱeinȬ schränkendenȱAttributen,ȱd.ȱh.ȱspezialisierendenȱBegriffenȱhinzu.ȱ «Begriff» Oberbegriff ȱ «Begriff» Unterbegriff ȱ ȱ Abbildungȱ5:ȱGeneralisierungȱverbindetȱUnterbegriffȱmitȱOberbegriffȱ Amȱ Beispielȱ derȱ hierarchischȱ inȱ Beziehungȱ stehendenȱ Begriffeȱ Geschäftspartner,ȱ KundeȱundȱLieferantȱwirdȱdieȱVerwendungȱderȱhierarchischenȱGeneralisierungsbeȬ ziehungȱ undȱ derȱ attributivenȱ Kompositionsbeziehungȱ veranschaulicht.ȱ Derȱ BeȬ griffȱ Partnerȱ sollȱ durchȱ dieȱ ihnȱ definierendenȱ Begriffeȱ Partner_Nr,ȱ Vornameȱ undȱ Zunameȱdefiniertȱsein.ȱDerȱUnterbegriffȱKundeȱerbtȱdieȱIntensionȱvonȱPartnerȱundȱ wirdȱselbstȱdurchȱseinenȱihnȱspeziellȱdefinierendenȱBegriffȱBonitätȱcharakterisiert.ȱ AuchȱderȱUnterbegriffȱLieferantȱerbtȱdieȱIntensionȱvonȱPartnerȱundȱerhältȱzuȱseinerȱ SpezialisierungȱdenȱBegriffȱLiefertreue.ȱDasȱhiermitȱumrisseneȱBegriffsschemaȱkannȱ mitȱderȱUMLȱsodannȱfolgendermaßenȱdargestelltȱwerden.ȱ «Begriff» Partner «Begriff» Partner 1 Partner_Nr Vorname Zuname «Begriff» Kunde Bonität «Begriff» Lieferant Liefertreue «Begriff» Partner_Nr 1 «Begriff» Vorname 1 «Begriff» Zuname «Begriff» Kunde 1 «Begriff» Bonität «Begriff» Lieferant 1 «Begriff» Liefertreue ȱ Abbildungȱ6:ȱGeneralisierungsȬȱundȱKompositionsbeziehungȱ AufȱderȱlinkenȱSeiteȱderȱAbbildungȱ6ȱsindȱdieȱIntensionenȱalsȱAttributeȱdargestellt.ȱ AufȱderȱrechtenȱSeiteȱsindȱsieȱinȱeigenständigenȱUMLȬKlassenȱausgegliedertȱundȱ 10ȱ 2.1ȱȱERMȱ–ȱeinȱkurzerȱÜberblickȱ mittelsȱ Kompositionsbeziehungenȱ mitȱ denȱ durchȱ sieȱ definiertenȱ Begriffenȱ verȬ bunden.ȱ Auchȱ dieȱ neuȱ eingeführtenȱ Begriffeȱ Partner_Nr,ȱ Vornameȱ undȱ Zunameȱ könntenȱ Spezialisierungenȱ bereitsȱ deklarierterȱ Begriffeȱ sein.ȱ Beispielsweiseȱ könnteȱ derȱ BegriffȱPartner_NrȱdurchȱSpezialisierungȱvonȱNummerȱundȱVornameȱsowieȱZunameȱ durchȱ Spezialisierungȱ vonȱ Nameȱ zustandeȱ kommen.ȱ Dieȱ beidenȱ Begriffeȱ Bonitätȱ undȱLiefertreueȱkönntenȱSpezialisierungenȱdesȱbereitsȱdeklariertenȱBegriffsȱQualitätȱ sein.ȱDerȱskizzierteȱTeilausschnittȱdiesesȱBegriffsmodellsȱinȱUMLȱdargestelltȱzeigtȱ Abbildungȱ7.ȱ «Begriff» Nummer «Begriff» Partner 1 1 1 «Begriff» Kunde «Begriff» Lieferant 1 1 «Begriff» Name «Begriff» Qualität «Begriff» Partner_Nr «Begriff» Vorname «Begriff» Zuname «Begriff» Bonität «Begriff» Liefertreue ȱ ȱ Abbildungȱ7:ȱNeueȱBegriffeȱsindȱSpezialisierungenȱbereitsȱdeklarierterȱBegriffeȱ 2.1 ERM – ein kurzer Überblick Datenarchitekturenȱ derȱ Miniweltȱ werdenȱ üblicherweiseȱ inȱ EntityȬRelationshipȱ Modelsȱ (EntitätsȬBeziehungsȬModellen,ȱ ERM)ȱ inȱ Anlehnungȱ anȱ PinȬShanȱ Chenȱ [CHE76]ȱ dargestellt.ȱ Inȱ diesemȱ Buchȱ wirdȱ hierzuȱ eineȱ erweiterteȱ undȱ moderneȱ FormȱderȱSinnbilderȱverwendet,ȱsoȱwieȱsieȱderzeitȱinȱUMLȱStandȱderȱTechnikȱsind.ȱ Dieȱ Architekturȱ derȱ Miniweltȱ undȱsomitȱ auchȱ derenȱ spiegelbildlicheȱ DatenarchiȬ tekturȱ wirdȱ inȱ einemȱ ERMȱ erfasstȱ undȱ diesesȱ inȱ einemȱ EntityȬRelationshipȱ DiaȬ gramȱ (EntitätsȬBeziehungsȬDiagramm,ȱ ERD)ȱ mitȱ denȱ Sprachmittelnȱ vonȱ UMLȱ dokumentiert.ȱHierbeiȱwerdenȱdieȱNamenȱvonȱEntitätstypenȱmitȱihrenȱAttributenȱ undȱ dieȱ Namenȱ vonȱ Beziehungstypenȱ mitȱ ihrenȱ Multiplizitätenȱ dargestellt.ȱ SoȬ wohlȱ dieȱ Entitätstypenȱ alsȱ auchȱ dieȱ Beziehungstypenȱ sindȱ wiederȱ Begriffeȱ überȱ 11ȱ 2ȱȱUMLȱ–ȱgrafischeȱModellierungsspracheȱ dieȱ Miniwelt.ȱ Meistensȱ entstehenȱ ERMsȱ inȱ derȱ Analysephaseȱ einesȱ SoftwareproȬ jektes.ȱ Inȱ denȱ folgendenȱ Ausführungenȱ verwendenȱ wirȱ Faktenȱ ausȱ derȱ Miniweltȱ RechȬ nungschreibungȱderȱKundenrechnungen.ȱÜberȱdieseȱMiniweltȱsollenȱdieȱfolgendenȱ vereinfachtenȱGeschäftsregelnȱgegebenȱsein.ȱ – EinȱKundeȱkannȱvieleȱRechnungenȱerhalten.ȱ – EineȱRechnungȱwirdȱgenauȱvonȱeinemȱKundenȱerhalten.ȱ – Eineȱ Rechnungȱ bestehtȱ ausȱ mindestensȱ einer,ȱ normalerweiseȱ ausȱ vielenȱ Rechnungspositionen.ȱ – Eineȱ Rechnungspositionȱ istȱ genauȱ inȱ einerȱ Rechnungȱ enthaltenȱ undȱ kannȱ ohneȱdieseȱnichtȱexistieren.ȱ – EineȱRechnungspositionȱbetrifftȱgenauȱeinenȱArtikel.ȱ – EinȱArtikelȱkannȱvonȱvielenȱRechnungspositionenȱbetroffenȱwerden.ȱ Dieȱ Übersetzungȱ dieserȱ Geschäftsregelnȱ führtȱ zuȱ folgendemȱ ERDȱ inȱ UMLȬ Darstellung.ȱ Inȱ ihmȱ sindȱ dieȱ maßgeblichenȱ Begriffeȱ überȱ unsereȱ Miniweltȱ undȱ derenȱZusammenhängeȱdargestellt.ȱEinȱBegriffȱistȱletztlichȱInformationȱüberȱetwas.ȱ DaȱwirȱDatenȱalsȱInformationenȱzumȱZweckeȱderȱVerarbeitungȱauffassenȱkönnenȱ [DIN44300],ȱrepräsentiertȱdasȱERDȱmitȱseinenȱBegriffenȱdieȱabstrakteȱDatenarchiȬ tektur,ȱ dieȱ ausȱ denȱ Angabenȱ derȱ EntitätsȬȱ undȱ Beziehungstypenȱ mitȱ derenȱ MulȬ tiplizitätenȱ besteht.ȱ Eineȱ ausführlicheȱ Darstellungȱ derȱ Miniweltȱ RechnungsschreiȬ bungȱundȱdesȱERMȬAnsatzes,ȱderȱauchȱinȱdiesemȱBuchȱverwendetȱwird,ȱfindenȱSieȱ inȱ[MOO04].ȱImȱERMȱbezeichnenȱwirȱdieȱBegriffeȱalsȱEntitätstypen.ȱ ȱ ȱ ȱ ȱ ȱ «Entitätstyp» Kunde «Entitätstyp» Artikel 1 erhalten * 1 «Entitätstyp» Rechnung 1 enthalten 1..* «Entitätstyp» Position betreffen * ȱ Abbildungȱ8:ȱDatenarchitekturȱderȱMiniweltȱRechnungschreibungȱ Imȱ nächstenȱ Arbeitsschrittȱ wirdȱ dieȱ Datenanalyseȱ durchgeführt.ȱ Hierbeiȱ wirdȱ unterȱ demȱ Gesichtspunktȱ desȱ Systemzwecksȱ herausgearbeitet,ȱ durchȱ welcheȱ AtȬ tributeȱ dieȱ einzelnenȱ Entitätstypenȱ definiertȱ sind.ȱ Hierbeiȱ wirdȱ dieȱ Intensionȱ derȱ aufgeführtenȱBegriffsbezeichnerȱdokumentiert.ȱ Zurȱ Erfüllungȱ desȱ Systemzwecksȱ unsererȱ Miniweltȱ sollenȱ inȱ denȱ einzelnenȱ EntiȬ tätstypenȱfolgendeȱAttributeȱerforderlichȱsein.ȱ ȱ ȱ 12ȱ 2.1ȱȱERMȱ–ȱeinȱkurzerȱÜberblickȱ Kundeȱ – – – – – – – Rechnung Kunde_Nrȱ Anredeȱ Vornameȱ Zunameȱ Strasseȱ PLZȱ Ortȱ ȱ Position – Rechnung_Nrȱ – Datumȱ – Betragȱ – Anzahlȱ ȱ ȱ Artikel – Artikel_Nrȱ – Nameȱ – Preisȱ ȱ ȱ ȱ ȱ Dieȱ mitȱ Attributenȱ angereichertenȱ undȱ somitȱ definiertenȱ Entitätstypenȱ undȱ dieȱ Beziehungstypenȱ mitȱ ihrenȱ Multiplizitätenȱ ergebenȱ sodannȱ dasȱ EntitätsȬ BeziehungsȬDiagrammȱderȱMiniweltȱRechnungsschreibung.ȱȱ Daȱ UMLȱ zunächstȱ alsȱ Modellierungsspracheȱ zurȱ Darstellungȱ derȱ Ergebnisseȱ derȱ objektorientiertenȱAnalyseȱundȱdesȱobjektorientiertenȱEntwurfsȱ(Design)ȱgeschafȬ fenȱ wurde,ȱ repräsentierenȱ dieȱ viereckigenȱ Kästenȱ Klassenȱ derȱ objektorientiertenȱ Welt.ȱ UMLȱ istȱ jedochȱ sehrȱ flexibel.ȱ Mitȱ demȱ bereitsȱ erwähntenȱ Konzeptȱ desȱ SteȬ reotypsȱkannȱmanȱdieȱBedeutungȱdesȱKlassensinnbildesȱauchȱERMȬadäquatȱabänȬ dern.ȱ Derȱ Nameȱ einesȱ Stereotypsȱ wirdȱ hierbeiȱ inȱ doppeltenȱ Spitzklammernȱ geȬ schrieben.ȱ Durchȱ denȱ Stereotypȱ ȱ wirdȱ deshalbȱ ausȱ derȱ Klasseȱ einȱ Entitätstyp.ȱȱ Einȱ einfacherȱ Beziehungstypȱ wirdȱ mitȱ demȱ Assoziationssinnbildȱvonȱ UML,ȱ d.ȱ h.ȱ mitȱ einerȱ einfachenȱ Linieȱ zwischenȱ denȱ inȱ Beziehungȱ stehendenȱ Entitätstypenȱ angegeben.ȱ Anȱ denȱ gegenüberliegendenȱ Endenȱ derȱ Beziehungstypenȱ stehenȱ dieȱ Multiplizitäten.ȱMitȱihnenȱwirdȱdokumentiert,ȱmitȱwieȱvielenȱEntitätenȱdesȱgegenȬ überliegendenȱ Entitätstypsȱ eineȱ betrachteteȱ Entitätȱ unterȱ demȱ Aspektȱ desȱ BezieȬ hungstypsȱprinzipiellȱverbundenȱseinȱkann.ȱȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ «Entitätstyp» Kunde ȱ ȱ ȱ * + Kunde_Nr + Anrede + Vorname + Zuname + Strasse + PLZ + Ort ȱ ȱ 1 erhalten «Entitätstyp» Artikel «Entitätstyp» Rechnung + Rechnung_Nr + Datum + /Betrag 1 1 enthalten 1..* «Entitätstyp» Position + Anzahl * betreffen + Artikel_Nr + Name + Preis ȱ Abbildungȱ9:ȱMitȱAttributenȱangereicherteȱDatenarchitekturȱderȱMiniweltȱ 13ȱ 2ȱȱUMLȱ–ȱgrafischeȱModellierungsspracheȱ Soȱ besagtȱ derȱ Sternȱ (*ȱ oderȱ genauerȱ 0..*)ȱ amȱ Eingangȱ desȱ Entitätstypsȱ Rechnung,ȱ dassȱeineȱbetrachteteȱKundenentitätȱmitȱnullȱbisȱvielenȱEntitätenȱdesȱEntitätstypsȱ RechnungȱunterȱdemȱAspektȱderȱBeziehungȱerhaltenȱverbundenȱseinȱkann.ȱInȱandeȬ renȱ Worten,ȱ einȱ Kundeȱ kannȱ nullȱ bisȱ vieleȱ Rechnungenȱ vomȱ betrachtetenȱ UnterȬ nehmenȱ erhalten.ȱ Dieȱ Multiplizitätȱ Einsȱ (1)ȱ amȱ Eingangȱ desȱ Entitätstypsȱ Kundeȱ besagt,ȱdassȱeineȱRechnungȱgenauȱvonȱeinemȱKundenȱerhaltenȱwird.ȱ Einȱ EntitätsȬBeziehungsȬDiagrammȱ dokumentiertȱ somitȱ inȱ übersichtlicherȱ Formȱ dieȱkonzeptionelleȱ(logische)ȱDatenstrukturȱderȱMiniweltȱundȱsomitȱauchȱdieȱZuȬ sammenhängeȱderȱhierinȱmaßgeblichenȱBegriffe.ȱȱ 2.2 RDBM – ein kurzer Überblick Wieȱ dieȱ implementierungsspezifischeȱ Datenarchitekturȱ ausȱ derȱ Perspektiveȱ desȱ Anwendersȱaussieht,ȱ hängtȱ davonȱ ab,ȱwelchesȱ Datenbankmodellȱ alsȱ Pateȱfürȱdieȱ Implementierungȱverwendetȱwird.ȱImȱFortgangȱderȱDarlegungenȱwerdenȱwirȱdasȱ relationaleȱ undȱ dasȱ dokumentenorientierte,ȱ hierarchischeȱ Datenbankmodellȱ alsȱ ImplementierungspatenȱinȱVerbindungȱmitȱXMLȱdarstellen.ȱBeideȱDatenbankmoȬ delleȱsindȱseitȱderȱVersionȱ9ȱimȱDatenbankverwaltungssystemȱDB2ȱabbildbar,ȱdaȱ DB2ȱnunȱauchȱdenȱDatentypȱXMLȱbeherrscht.ȱWeilȱDB2ȱseitȱlängererȱZeitȱauchȱdasȱ objektorientierteȱDatenbankmodellȱversteht,ȱistȱDB2ȱheuteȱeinȱuniversellesȱDatenȬ banksystemȱ (UDBMS).ȱ Mitȱ einerȱ weitgehendenȱ Implementierungȱ derȱ Vorgabenȱ vonȱ SQL3ȱ undȱ derȱ Implementierungȱ vielerȱ Sprachelementeȱ vonȱ XQueryȱ inȱ VerȬ bindungȱ mitȱXMLȱSchemaȱ istȱ DB2ȱ heuteȱeinȱ sehrȱ mächtigesȱundȱdadurchȱ natürȬ lichȱauchȱsehrȱumfangreichesȱDatenbankverwaltungssystem.ȱ Inȱ derȱ Entwurfsphaseȱ (Design)ȱ desȱ Softwareentwicklungsprozessesȱ wirdȱ dieȱ DaȬ tenarchitekturȱ desȱ erarbeitetenȱ EntitätsȬBeziehungsȬDiagrammsȱ unterȱ Beachtungȱ derȱ Erfordernisseȱ desȱ anzuwendendenȱ PatenȬDatenbankmodellsȱ inȱ einȱ anwenȬ dungsspezifischesȱ Datenbankmodellȱ überführtȱ undȱ inȱ einemȱ DatenbankȬ DiagrammȱmitȱderȱuniversellenȱModellierungsspracheȱUMLȱdargestellt.ȱȱ DieȱDatenȱüberȱdieȱMiniweltȱsollenȱimȱFortgangȱderȱAusführungenȱnachȱdenȱVorȬ gabenȱ desȱRelationalenȱDatenbankmodellsȱ vonȱ E.ȱF.ȱCoddȱ[COD70]ȱinȱDB2ȱimpȬ lementiertȱ werden.ȱ Deshalbȱ istȱ dasȱ ERMȱ Rechnungsschreibungȱ inȱ eineȱ relationaleȱ Datenarchitekturȱ zuȱ überführen.ȱ Dieseȱ wirdȱ inȱ einemȱ implementierungsspeziȬ fischenȱrelationalenȱDatenbankmodellȱundȱsinnvollerȱWeiseȱmitȱdemȱSprachvorratȱ vonȱ UMLȱ übersichtlichȱ dargestellt.ȱ Dasȱ Datenbankdiagrammȱ bezeichnenȱ wirȱ soȬ dannȱalsȱrelationalesȱDatenbankdiagrammȱ(RDBD)ȱRechnungsschreibung.ȱ Dieȱ Überführungȱ einesȱ ERMȱ inȱ einȱ RDBDȱ kannȱ inȱ zweiȱ Schrittenȱ erfolgen.ȱ Imȱ erstenȱSchrittȱtransformiertȱmanȱeinenȱEntitätstypȱinȱeinenȱRelationstyp.ȱDieserȱistȱ sodannȱdahingehendȱzuȱuntersuchen,ȱobȱerȱsichȱinȱderȱdrittenȱNormalformȱbefinȬ det.ȱDiesȱistȱdannȱderȱFall,ȱwennȱerȱnurȱskalareȱAttributeȱbesitzt,ȱkeineȱTeilschlüsȬ selabhängigkeitenȱundȱkeineȱtransitivenȱAbhängigkeitenȱaufweist.ȱEineȱdetaillierȬ 14ȱ 2.2ȱȱRDBMȱ–ȱeinȱkurzerȱÜberblickȱ teȱBeschreibungȱderȱModelltransformationȱundȱderȱNormalisierungȱfindenȱSieȱinȱ [MOO04].ȱ Imȱ zweitenȱ Schrittȱ werdenȱ dieȱ Beziehungstypenȱ desȱ ERMȱ inȱ FremdȬ schlüsselȱabgebildet.ȱDasȱFremdschlüsselattributȱistȱinȱdemȱRelationstypȱunterzuȬ bringen,ȱinȱdemȱesȱdasȱGebotȱderȱerstenȱNormalformȱnichtȱverletzt.ȱEsȱmussȱsomitȱ ebenfallsȱ skalarȱ sein.ȱ Eineȱ vieleȬzuȬvieleȬBeziehungȱ istȱ deshalbȱ inȱ einenȱ BezieȬ hungsrelationstypȱ zuȱ transformieren,ȱ derȱ überȱ zweiȱ vieleȬzuȬeinsȬBeziehungstyȬ penȱ dieȱ ursprünglichenȱ Relationstypenȱ miteinanderȱ verbindet.ȱ Inȱ demȱ neuȱ entȬ standenenȱBeziehungsrelationstypȱsindȱdieȱFremdschlüsselattributeȱzuȱimplemenȬ tieren.ȱAuchȱhierüberȱfindenȱSieȱNäheresȱinȱ[MOO04].ȱ DieseȱVorgehensweiseȱwendenȱwirȱnunȱaufȱdasȱERMȱinȱAbbildungȱ9ȱan.ȱSieȱführtȱ zuȱdemȱfolgendenȱrelationalenȱDatenbankdiagrammȱinȱAbbildungȱ10.ȱDieȱRelatiȬ onstypenȱ entsprechenȱ denȱ Entitätstypenȱ desȱ zugrundeȱ liegendenȱ ERM,ȱ weilȱ dieȱ RelationstypenȱnachȱderȱAbleitungȱsichȱbereitsȱinȱderȱdrittenȱNormalformȱbefunȬ denȱhaben.ȱDieȱBeziehungstypenȱdesȱERMȱhabenȱsichȱinȱdenȱFremdschlüsselattriȬ butenȱ derȱ Relationstypenȱ niedergeschlagen.ȱ Beispielsweiseȱ istȱ dasȱ FremdschlüsȬ selattributȱ Kunde_Nrȱ imȱ Relationstypȱ Rechnungȱ dieȱ Implementierungȱ desȱ BezieȬ hungstypsȱerhaltenȱimȱERDȱRechnungsschreibung.ȱZumȱbesserenȱVerständnisȱistȱdieȱ AssoziationȱerhaltenȱmitȱihrenȱMultiplizitätenȱimȱRDBDȱredundantȱaufgeführt.ȱImȱ Relationstypȱ Positionȱ bildenȱ dieȱ beidenȱ Attributeȱ Rechnung_Nrȱ undȱ Artikel_Nrȱ zusammenȱdenȱPrimärschlüssel.ȱSieȱerfüllenȱjedochȱeineȱDoppelrolle.ȱJedesȱdieserȱ Attributeȱ alleineȱ implementiertȱ zusätzlich,ȱ alsȱ Fremdschlüsselȱ genutzt,ȱ einenȱ BeȬ ziehungstyp.ȱDasȱAttributȱRechnung_NrȱinȱPositionȱimplementiertȱdenȱBeziehungsȬ typȱenthaltenȱundȱdasȱAttributȱArtikel_NrȱdenȱBeziehungstypȱbetreffenȱdesȱERM.ȱȱ ȱ «table» Kunde 1 erhalten 0..* Kunde_Nr : CHAR(4) Anrede : CHAR(4) Vorname : CHAR(15) Zuname : CHAR(15) Strasse : CHAR(15) PLZ : CHAR(5) Ort : CHAR(15) «table» Artikel Artikel_Nr : CHAR(4) Name : CHAR(15) Preis : DECIMAL(11, 2) «table» Rechnung 1 enthalten 1..* Rechnung_Nr : CHAR(4) Kunde_Nr : CHAR(4) Datum : DATE ȱ «table» Position Rechnung_Nr : CHAR(4) Artikel_Nr : CHAR(4) Anzahl : DECIMAL(5, 0) ȱ * ȱ 1 betreffen ȱ ȱ ȱ Abbildungȱ10:ȱRelationalesȱDatenbankdiagrammȱRechnungsschreibungȱ ÜberȱdenȱNamenȱderȱRelationstypenȱstehtȱderȱStereotypȱ
.ȱHiermitȱwirdȱ festgehalten,ȱ dassȱ derȱ jeweiligeȱ Kastenȱ keineȱ Klasse,ȱ sondernȱ einenȱ Relationstypȱ 15ȱ 2ȱȱUMLȱ–ȱgrafischeȱModellierungsspracheȱ repräsentiert,ȱ derȱ anschließendȱ inȱ Gestaltȱ einerȱ Tabelleȱ (table)ȱ imȱ DatenbanksysȬ temȱimplementiertȱwird.ȱ Vorȱ denȱ Attributnamenȱ derȱ Relationstypenȱ stehenȱ nochȱ Markierungenȱ (engl.:ȱ tags)ȱinȱFormȱvonȱAbkürzungen.ȱDieȱAbkürzungȱPKȱstehtȱhierbeiȱfürȱPrimaryȱKeyȱ (Primärschlüssel)ȱ undȱ FKȱ fürȱ Foreignȱ Keyȱ (Fremdschlüssel).ȱ Dieȱ Abkürzungȱ Nȱ stehtȱfürȱNullȱundȱbedeutetȱunbekannt.ȱHiermitȱwirdȱausgedrückt,ȱdassȱinȱdieȱSpalȬ te,ȱdieȱdemȱjeweiligenȱAttributȱinȱderȱDatenbankȱentspricht,ȱderȱSpaltenwertȱnichtȱ eingegebenȱ werdenȱ muss,ȱ sondernȱ unbekanntȱ bleibenȱ darf.ȱ Schließlichȱ stehenȱ rechtsȱ vonȱ denȱ Attributnamenȱ nochȱ dieȱ SQLȬDatentypenȱ alsȱ Vorlageȱ fürȱ dieȱ anȬ schließendeȱImplementierungȱmittelsȱSQL.ȱ Nachȱ derȱ Erarbeitungȱ desȱ implementierungsspezifischenȱ Entwurfsmodellsȱ kannȱ mitȱ derȱ Implementierungȱ derȱ gefundenenȱ Relationstypenȱ begonnenȱ werden.ȱ HierzuȱdientȱderȱDatenbeschreibungsteilȱvonȱSQL,ȱhierȱvonȱDB2ȬSQL,ȱVersionȱ9.5.ȱ 2.3 SQL-DDL – eine vereinfachte Anwendung DieȱDatenbankspracheȱStructuredȱQueryȱLanguageȱ(SQLȱ–ȱStrukturierteȱAnfrageȬ sprache)ȱwurdeȱinȱihrerȱaktuellenȱFassungȱimȱJahreȱ2003ȱvonȱderȱInternationalȱOrȬ ganizationȱforȱStandardizationȱ(ISO)ȱundȱderȱInternationalȱElectrotechnicalȱCommissionȱ (IEC)ȱ unterȱ derȱ Bezeichnungȱ SQL:2003ȱ verabschiedetȱ [ISO03].ȱ Derzeitȱ wirdȱ dieȱ nächsteȱ SQLȬNormȱ entwickelt,ȱ dieȱ SQL:2007ȱ heißenȱ soll.ȱ Bereitsȱ dieȱ Normȱ SQL:2003ȱenthältȱdenȱDatentypȱXML.ȱSpeziellȱumȱDatenobjekteȱdiesesȱTyps,ȱihreȱ Erzeugungȱ undȱ Verarbeitung,ȱ gehtȱ esȱ inȱ diesemȱ Buch.ȱ Aufȱ denȱ Datentypȱ XMLȱ werdenȱwirȱinȱdenȱfolgendenȱKapitelnȱnochȱintensivȱeingehen.ȱ DieȱherkömmlicheȱSQLȬSpracheȱbestehtȱausȱdenȱdreiȱTeilenȱ – DDLȱ–ȱDataȱDescriptionȱLanguageȱ ȱ(Datendefinitionssprache)ȱ – DMLȱ–ȱDataȱManipulationȱLanguageȱ(Datenmanipulationssprache)ȱ – DCLȱ–ȱDataȱControlȱLanguageȱ(Datenberechtigungssprache)ȱ Mitȱ denȱ Sprachmittelnȱ derȱ Datendefinitionsspracheȱ werdenȱ demȱ DatenbankproȬ zessorȱdieȱMetadatenȱüberȱTabellenȱundȱvieleȱweitereȱDatenbankobjekteȱmitgeteiltȱ bzw.ȱdieȱMetadatenȱgepflegt.ȱDieȱzentralenȱSQLȬBefehleȱhierzuȱsind:ȱ – CREATEȱ–ȱschreibtȱMetadatenȱinȱdenȱDatenbankkatalogȱundȱerzeugtȱhierȬ mitȱDatenbankobjekteȱunterschiedlicherȱArtenȱ – DROPȱ–ȱlöschtȱMetadatenȱausȱdemȱDatenbankkatalogȱ – ALTERȱ–ȱverändertȱMetadatenȱimȱDatenbankkatalogȱ – SELECTȱ–ȱliestȱMetadatenȱimȱDatenbankkatalogȱ ZurȱManipulationȱderȱNutzdatenȱdienenȱdieȱBefehleȱ – INSERTȱ–ȱschreibtȱNutzdatenȱinȱeineȱTabelleȱ – DELETEȱ–ȱlöschtȱNutzdatenȱausȱeinerȱTabelleȱ – UPDATEȱ–ȱverändertȱNutzdatenȱinȱeinerȱTabelleȱ 16ȱ 2.3ȱȱSQLȬDDLȱ–ȱeineȱvereinfachteȱAnwendungȱ – SELECTȱ–ȱliestȱNutzdatenȱ ZurȱVergabeȱundȱzumȱEntzugȱvonȱZugriffsrechtenȱsindȱzuständigȱ – GRANTȱ–ȱvergibtȱRechteȱ – REVOKEȱ–ȱentziehtȱRechteȱ 2.3.1 Beispieltabellen vereinbaren MitȱdemȱDatendefinitionsbefehlȱCREATEȱTABLEȱwerdenȱnunȱdieȱMetadatenȱüberȱ dieȱvierȱRelationenȱunseresȱDatenbankentwurfsȱRechnungschreibungȱinȱAbbildungȱ 10ȱinȱGestaltȱvonȱTabellendeklarationenȱdemȱDatenbankprozessorȱmitgeteilt.ȱHierȬ beiȱ beschränkenȱ wirȱ unsȱ aufȱ einenȱ minimalenȱ Sprachumfang,ȱ umȱ unsȱ aufȱ dasȱ Wesentlicheȱ fürȱ diesesȱ Buchȱ zuȱ konzentrieren.ȱ Obgleichȱ dieȱ SQLȬBefehleȱ fundaȬ mentalesȱ SQLȱ sind,ȱ gebenȱ wirȱ sieȱ hierȱ an.ȱ Dadurchȱ kannȱ derȱ geneigteȱ Leserȱ dieȱ folgendenȱinnovativenȱBeispiele,ȱdieȱaufȱdenȱErgebnissenȱdieserȱBefehleȱaufbauen,ȱ mitȱminimalemȱArbeitsaufwandȱpraktischȱnachvollziehen.ȱ DaȱinȱdenȱTabellenȱderȱDatenbankȱspeziellȱauchȱSpaltenȱmitȱdemȱneuenȱDatentypȱ XMLȱ vereinbartȱ werden,ȱ mussȱ dieȱ Datenbankȱ inȱ derȱ Lageȱ sein,ȱ Unicodeȱ zuȱ verȬ stehen.ȱ Derȱ Grundȱ hierfürȱ ist,ȱ dassȱ XMLȬObjekteȱ internȱ inȱ Unicodeȱ gespeichertȱ werden.ȱȱ Zumȱ Fortgangȱ derȱ Arbeitȱ mussȱ deshalbȱ zunächstȱ eineȱ unicodefähigeȱ Datenbankȱ vereinbartȱwerden.ȱDieȱvereinfachteȱSyntaxȱdesȱhierzuȱgeeignetenȱBefehlsȱCREAȬ TEȱDATABASEȱinȱBackusȬNaurȬNotationsformȱzeigtȱdieȱfolgendeȱSyntax.ȱ ȱ ȱ CREATE DATABASE datenbankname [USING CODESET zeichensatz TERRITORY gebiet] Syntaxȱ1:ȱCREATEȱDATABASEȱ–ȱvereinfachteȱSyntaxȱ Dieȱ unicodefähigeȱ Datenbankȱ sollȱ xmldbȱ heißen.ȱ Sieȱ wird,ȱ umȱ unicodefähigȱ zuȱ sein,ȱmitȱdemȱZeichensatzȱUTFȬ8ȱundȱdemȱGebietscodeȱDEȱvereinbart.ȱ CREATE DATABASE xmldb USING CODESET UTF-8 TERRITORY DE (1) Programmȱ1:ȱVereinbarungȱderȱunicodefähigenȱDatenbankȱxmldbȱ InȱdieserȱDatenbankȱvereinbarenȱwirȱnunȱdieȱvierȱTabellen,ȱwelcheȱdieȱDatenȱüberȱ dieȱMiniweltȱRechnungsschreibungȱaufnehmenȱwerden.ȱ CREATE TABLE Kunde (Kunde_Nr CHAR ( 4) NOT NULL PRIMARY KEY, Anrede CHAR ( 4), Vorname CHAR (15), (1) (2) (3) (4) (5) (6) 17ȱ 2ȱȱUMLȱ–ȱgrafischeȱModellierungsspracheȱ Zuname Strasse PLZ Ort ); CHAR CHAR CHAR CHAR (15), (15), ( 5), (15) (7) (8) (9) (10) (11) Programmȱ2:ȱVereinbarungȱTabelleȱKunde CREATE TABLE Rechnung (Rechnung_Nr CHAR ( 4) NOT NULL PRIMARY KEY, Kunde_Nr CHAR ( 4) REFERENCES Kunde (Kunde_Nr) ON DELETE RESTRICT, Datum DATE, Betrag DEC (11, 2) ); (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) Programmȱ3:ȱVereinbarungȱTabelleȱRechnung CREATE TABLE Artikel (Artikel_Nr CHAR ( 4) NOT NULL PRIMARY KEY, Name CHAR (15), Preis DEC (11, 2) ) ; (1) (2) (3) (4) (5) (6) (7) (8) Programmȱ4:ȱVereinbarungȱTabelleȱArtikel CREATE TABLE Position (Rechnung_Nr CHAR (4) NOT NULL REFERENCES Rechnung (Rechnung_Nr), Artikel_Nr CHAR (4) NOT NULL REFERENCES Artikel (Artikel_Nr), Anzahl DEC (5, 0), PRIMARY KEY (Rechnung_Nr, Artikel_Nr) ) ; Programmȱ5:ȱVereinbarungȱTabelleȱPositionȱ 18ȱ (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) 2.3ȱȱSQLȬDDLȱ–ȱeineȱvereinfachteȱAnwendungȱ 2.3.2 Beispieltabellen laden ZumȱSchlussȱladenȱwirȱdieȱTabellenȱmitȱdenȱDatenȱunsererȱMiniwelt.ȱEinzelheitenȱ hierüberȱkönnenȱinȱ[MOO04]ȱnachgelesenȱwerden.ȱDerȱUmfangȱderȱTabellenȱsollȱ möglichstȱ geringȱ sein.ȱ Jedochȱ soȱ groß,ȱ dassȱ hierausȱ sinnvolleȱ XMLȬDokumenteȱ erzeugbarȱsind.ȱ INSERT INTO Kunde VALUES ('K001', 'Herr', 'Hugo', 'Mueller', 'Gartenstr. 4a', '69123', 'Heidelberg'), ('K002', 'Herr', 'Georg', 'Mayer', 'Neckarstr. 1', '69123', 'Heidelberg'), ('K003', 'Frau', 'Eva', 'Schulze', 'Hauptstr. 7', '69502', 'Hemsbach' ) ; (1) (2) (3) (4) (5) (6) (7) Programmȱ6:ȱLadenȱTabelleȱKundeȱ INSERT INTO Rechnung VALUES ('R001', 'K001', '04.04.2008', 13000), ('R002', 'K001', '05.04.2008', 2000), ('R003', 'K002', '05.04.2008', 5000) ; (1) (2) (3) (4) (5) (6) (7) Programmȱ7:ȱLadenȱTabelleȱRechnungȱ INSERT INTO Artikel VALUES ('A001', ('A002', ('A003', ('A004', ; 'Computer', 'Drucker', 'Bildschirm', 'Kabel', 5000), 1000), 500) , 50) (1) (2) (3) (4) (5) (6) (7) (8) Programmȱ8:ȱLadenȱderȱTabelleȱArtikelȱ 19ȱ 2ȱȱUMLȱ–ȱgrafischeȱModellierungsspracheȱ ȱ INSERT INTO Position VALUES ('R001', ('R001', ('R002', ('R002', ('R003', ; 'A001', 'A002', 'A002', 'A003', 'A001', 2), 3), 1), 2), 1) (1) (2) (3) (4) (5) (6) (7) (8) (9) Programmȱ9:ȱLadenȱderȱTabelleȱPositionȱ 2.3.3 Beispieltabellen lesen BeimȱModellierenȱmitȱderȱAnalysetechnikȱdesȱERM,ȱderȱhieraufȱfolgendenȱÜberȬ führungȱ derȱ gefundenenȱ Entitätstypenȱ inȱ Relationstypenȱ undȱ schließlichȱ derȱ NormalisierungȱderȱRelationstypenȱentstehenȱnormalerweiseȱmehrereȱredundanzȬ freieȱ Relationstypen.ȱ Dieȱ Relationstypenȱ werdenȱ anschließendȱ mittelsȱ SQLȱ inȱȱ GestaltȱvonȱTabellenȱinȱeinemȱDatenbanksystemȱimplementiert.ȱDieȱTabellenȱsteȬ henȱsodannȱuntereinanderȱinȱBeziehung.ȱDieȱDatenȱüberȱdieȱMiniweltȱwerdenȱinȱ diesenȱTabellenȱgespeichertȱundȱhierbeiȱüberȱdieȱTabellenȱverteilt.ȱ OftȱwerdenȱinȱAnwendungenȱDatenȱausȱmehrerenȱdieserȱTabellenȱinȱzusammenȬ gefügterȱ Formȱ benötigt.ȱ Derȱ Zusammenbauȱ derȱ anwendungsspezifischenȱ DatenȬ verbundeȱ wirdȱ inȱ SQLȱ mitȱ demȱ Verbundoperatorȱ imȱ Rahmenȱ einesȱ innerenȱ Gleichheitsverbundesȱ(engl.ȱinnerȱjoin)ȱerreicht.ȱȱ EinführendesȱBeispielȱ ImȱfolgendenȱBeispielȱwerdenȱZeilenȱderȱTabelleȱRechnungȱmitȱZeilenȱderȱTabelleȱ Positionȱ durchȱ eineȱ Verbundoperationȱ verbunden.ȱ Dieȱ Datenȱ derȱ Rechnungȱ mitȱ derȱRechnung_Nrȱ=ȱȇR001ȇȱwerdenȱhierbeiȱimȱRahmenȱeinerȱTotalprojektionȱinȱdieȱ Ergebnistabelleȱ projiziert.ȱ Dadurchȱ entstehtȱ gewolltȱ einȱ unnatürlicherȱ Verbund,ȱ weilȱdieselbenȱRechnungsnummernȱinȱzweiȱErgebnisspaltenȱvorkommen.ȱ DieȱfolgendeȱAbbildungȱ11ȱzeigt,ȱdassȱdieȱErgebnistabelleȱausȱdenȱSpaltenȱderȱTaȬ bellenȱ Rechnungȱ undȱ Positionȱ gebildetȱ wird.ȱ Zurȱ Angabeȱ diesesȱ AbhängigkeitsȬ zusammenhangsȱ kannȱ dieȱ Abhängigkeitsbeziehungȱ (engl.ȱ dependencyȱ relationȬ ship)ȱvonȱUMLȱverwendetȱwerden.ȱȱ Dieȱ Datenstrukturȱ einerȱ Tabelleȱ imȱ klassischenȱ relationalenȱ Datenbankmodellȱ istȱ eineȱflacheȱStruktur.ȱDasȱbedeutet,ȱdassȱesȱkeineȱhierarchischeȱGliederungȱinnerȬ halbȱ derȱ Datenstrukturȱ gibt.ȱ Eineȱ flacheȱ Strukturȱ liegtȱ somitȱ dannȱ vor,ȱ wennȱdieȱ Datenelementeȱ einerȱ Datenstrukturȱ allesamtȱ aufȱ derselbenȱ hierarchischenȱ Ebeneȱ liegen,ȱ wennȱ esȱ somitȱ keineȱ hierarchischeȱ Untergliederungȱ derȱ Datenelementeȱ gibt.ȱ ȱ ȱ 20ȱ 2.3ȱȱSQLȬDDLȱ–ȱeineȱvereinfachteȱAnwendungȱ ȱ «table» Rechnung ȱ ȱ Rechnung_Nr : CHAR(4) Kunde_Nr : CHAR(4) Datum : DATE ȱ ȱ 1 enthalten 1..* «table» Position Rechnung_Nr : CHAR(4) Artikel_Nr : CHAR(4) Anzahl : DECIMAL(5, 0) «table» Ergebnistabelle ȱ Rechnung_Nr Kunde_Nr Datum Rechnung_Nr Artikel_Nr Anzahl ȱ ȱ ȱ ȱ ȱ Abbildungȱ11:ȱAufbauȱderȱErgebnistabelleȱausȱdenȱbeidenȱTabellenȱRechnungȱundȱPosiȬ tionȱ Dasȱ folgendeȱ Programmȱ zeigt,ȱ wieȱ mitȱAnwendungȱ desȱ Operatorsȱ INNERȱJOINȱ inȱ denȱ Zeilenȱ (9)ȱ undȱ (10)ȱ dieȱ Ergebnistabelleȱ ausȱ denȱ beidenȱ Ausgangstabellenȱ RechnungȱundȱPositionȱgebildetȱwird.ȱInȱderȱZeileȱ(11)ȱwirdȱdieȱAuswahlȱausȱdemȱ VerbundergebnisȱaufȱZeilenȱmitȱderȱRechnungsnummerȱȇR001ȇȱeingegrenzt.ȱ SELECT R.Rechnung_Nr AS R_NR, R.Kunde_Nr AS R_NR, R.Datum AS Datum, R.Betrag AS Betrag, P.Rechnung_Nr AS R_NR, P.Artikel_Nr AS A_NR, P.Anzahl AS ANZAHL FROM Rechnung R INNER JOIN Position P ON R.Rechnung_Nr = P.Rechnung_Nr WHERE R.Rechnung_Nr = 'R001' ; (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) Programmȱ10:ȱInnererȱGleichheitsverbundȱerzeugtȱRedundanz Ergebnisȱ R_NR –––– R001 R001 R_NR –––– K001 K001 DATUM BETRAG R_NR A_NR ANZAHL –––––––––– ––––––––––––– –––– –––– ––––––– 2008-04-04 13000,00 R001 A001 2, 2008-04-04 13000,00 R001 A002 3, Wieȱmanȱsieht,ȱsindȱdieȱgrauȱunterlegtenȱDatenȱredundant.ȱSieȱsindȱinȱderȱerstenȱ Zeileȱ bereitsȱ enthalten.ȱ Dieȱ Redundanzȱ entsteht,ȱ weilȱ jedeȱ Positionszeileȱ mitȱ derȱ Rechnungszeileȱ verbundenȱ wird,ȱ dieȱ mitȱ derȱ jeweiligenȱ Positionszeileȱ inȱ BezieȬ hungȱ steht.ȱ Daȱ inȱ unseremȱ Beispielȱ dieȱ Rechnungȱ mitȱ derȱ Rechnungsnummerȱ 21ȱ 2ȱȱUMLȱ–ȱgrafischeȱModellierungsspracheȱ ȇR001ȇȱausȱzweiȱPositionszeilenȱbesteht,ȱweistȱdieȱErgebnistabelleȱsomitȱauchȱzweiȱ Zeilenȱaus.ȱAllgemeinȱkannȱmanȱfeststellen,ȱdassȱesȱinȱderȱErgebnistabelleȱimmerȱ dannȱdieȱdargestellteȱArtȱanȱRedundanzȱgibt,ȱwennȱeineȱderȱMultiplizitätenȱeinerȱ BeziehungȱzwischenȱzweiȱTabellenȱderȱArtȱvieleȱistȱ(UML:ȱ*)ȱundȱinȱderȱTabelleȱmitȱ dieserȱMultiplizitätȱ(z.ȱB.ȱPosition)ȱmehrȱalsȱeineȱZeileȱmitȱeinerȱZeileȱderȱgegenüȬ berliegendenȱTabelleȱ(z.ȱB.ȱRechnung)ȱverbundenȱist.ȱ BeispielȱmitȱVIEWȱ UmȱdieȱDatenunabhängigkeitȱderȱAnwendungsprogrammeȱvonȱderȱStrukturȱundȱ denȱ Zugriffspfadenȱ derȱ Datenhaltungȱ zuȱ erreichen,ȱ istȱ esȱ sinnvoll,ȱ denȱ ZusamȬ menbauȱvonȱzuȱverbindendenȱZeilenȱinȱeineȱexterneȱSichtȱ(View)ȱzuȱverlagern.ȱDasȱ Ergebnisȱ einesȱ solchenȱ Verbundesȱ istȱ sodannȱ eineȱ virtuelleȱ Tabelle,ȱ dieȱ ausȱ denȱ gewünschtenȱSpaltenȱderȱBasistabellenȱbestehtȱundȱnurȱtemporärȱimȱZentralspeiȬ cherȱ existiert.ȱInȱdenȱZeilenȱdieserȱ Tabelleȱsindȱ dannȱ oftȱredundanteȱDatenwerteȱ enthalten.ȱ Diesȱ kann,ȱ wieȱ obenȱ ausgeführt,ȱ immerȱ dannȱ derȱ Fallȱ sein,ȱ wennȱ dieȱ einzelnenȱTabellenȱmitȱBeziehungȱderȱMultiplizitätȱvieleȱ(UML:ȱ*)ȱverbundenȱsind.ȱ UndȱesȱistȱdannȱtatsächlichȱderȱFall,ȱwennȱdieȱMultiplizitätȱvieleȱinȱeinerȱKardinaȬ litätȱgrößerȱalsȱeinsȱbeiȱderȱAnzahlȱderȱverbundenenȱZeilenȱsichȱniedergeschlagenȱ hat.ȱȱ InȱUMLȱverstehtȱmanȱunterȱdemȱBegriffȱMultiplizitätȱdieȱAnzahlȱprinzipiellȱmögliȬ cherȱVerbindungenȱundȱunterȱdemȱBegriffȱKardinalitätȱdieȱAnzahlȱderȱtatsächlichȱ gegebenenȱ Verbindungen.ȱ Derȱ Begriffȱ Multiplizitätȱ wirdȱ inȱ UMLȱ hauptsächlichȱ aufȱ derȱ Modellierungsebeneȱ undȱ derȱ Begriffȱ Kardinalitätȱ aufȱ derȱ AusprägungsȬ ebeneȱbenutzt,ȱumȱAussagenȱüberȱAnzahlenȱzuȱmachen.ȱ ImȱfolgendenȱrelationalenȱDatenbankdiagrammȱinȱAbbildungȱ12ȱistȱgezeigt,ȱdassȱ dieȱ externeȱ Sichtȱ (engl.ȱ view)ȱ RechnungViewȱ vonȱ denȱ vierȱ Basistabellenȱ Kunde,ȱ Rechnung,ȱ Positionȱ undȱ Artikelȱ abhängigȱ ist.ȱ Mitȱ demȱ Stereotypȱ ȱanȱdenȱgestricheltenȱAbhängigkeitsbeziehungenȱwirdȱdiesȱbesondersȱdeutlichȱ ausgedrückt.ȱAuchȱeineȱvirtuelleȱundȱnurȱtemporärȱimȱZentralspeicherȱvorhandeȬ neȱ ViewȬTabelleȱ hatȱ eineȱ flacheȱ Datenstruktur.ȱ Alleȱ Spaltenȱ liegenȱ aufȱ derselbenȱ hierarchischenȱEbene.ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ 22ȱ 2.3ȱȱSQLȬDDLȱ–ȱeineȱvereinfachteȱAnwendungȱ ȱ «table» Kunde ȱ ȱ ȱ ȱ ȱ 0..* Kunde_Nr : CHAR(4) Anrede : CHAR(4) Vorname : CHAR(15) Zuname : CHAR(15) Strasse : CHAR(15) PLZ : CHAR(5) Ort : CHAR(15) ȱ ȱ 1 erhalten «table» Rechnung 1 enthalten Rechnung_Nr : CHAR(4) Kunde_Nr : CHAR(4) Datum : DATE Betrag : DECIMAL(11, 2) 1..* «table» Position Rechnung_Nr : CHAR(4) Artikel_Nr : CHAR(4) Anzahl : DECIMAL(5, 0) «view dependency» Position * betreffen 1 «view dependency» Kunde ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ «view dependency» Rechnung «database view» RechnungView «view dependency» Artikel «table» Artikel Artikel_Nr : CHAR(4) Name : CHAR(15) Preis : DECIMAL(11, 2) /Kunde_Nr = "Kunde"."Kunde_Nr" /Anrede = "Kunde"."Anrede" /Vorname = "Kunde"."Vorname" /Zuname = "Kunde"."Zuname" /Strasse = "Kunde"."Strasse" /PLZ = "Kunde"."PLZ" /Ort = "Kunde"."Ort" /Rechnung_Nr = "Rechnung"."Rechnung_Nr" /Datum = "Rechnung"."Datum" /Betrag = "Rechnung.Betrag" /Anzahl = "Position"."Anzahl" /Artikel_Nr = "Artikel"."Artikel_Nr" /Name = "Artikel"."Name" /Preis = "Artikel"."Preis" ȱ ȱ Abbildungȱ12:ȱDieȱvirtuelleȱTabelleȱRechnungViewȱundȱihreȱBasistabellenȱ Dieȱ externeȱ Sichtȱ RechnungViewȱ wirdȱ nunȱ mitȱ SQLȱ implementiert.ȱ Anschließendȱ wirdȱuntersucht,ȱobȱdieȱMultiplizitätenȱderȱArtȱvieleȱ(UML:ȱ*)ȱanȱdenȱBeziehungsȬ typenȱerhalten,ȱenthaltenȱundȱbetreffenȱtatsächlichȱzuȱRedundanzȱführen,ȱwennȱdieȱ Viewȱangewendetȱwird.ȱ Dieȱ flacheȱ Datenstrukturȱ wirdȱ durchȱ dieȱ Projektionȱ derȱ Spaltenȱ ausȱ denȱ BasistaȬ bellenȱ inȱ dieȱ virtuelleȱ ViewȬTabelleȱ inȱ denȱ Programmzeilenȱ (2)ȱ bisȱ (15)ȱ erreicht.ȱ HierbeiȱwerdenȱdieȱSpaltennamenȱausȱdenȱBasistabellenȱimplizitȱauchȱalsȱSpaltenȬ namenȱ inȱ dieȱ virtuelleȱ ViewȬTabelleȱ übernommen.ȱ Eineȱ dynamischeȱ UmbenenȬ nungȱderȱSpaltennamenȱerfolgtȱnicht.ȱ 23ȱ 2ȱȱUMLȱ–ȱgrafischeȱModellierungsspracheȱ ȱ CREATE VIEW RechnungView AS SELECT K.Kunde_Nr, K.Anrede, K.Vorname, K.Zuname, K.Strasse, K.PLZ, K.Ort, R.Rechnung_Nr, R.Datum, R.Betrag, P.Anzahl, A.Artikel_Nr, A.Name, A.Preis FROM Kunde INNER JOIN Rechnung ON K.Kunde_Nr INNER JOIN Position ON R.Rechnung_Nr INNER JOIN Artikel ON P.Artikel_Nr ; AS K AS R = R.Kunde_Nr AS P = P.Rechnung_Nr AS A = A.Artikel_Nr (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) Programmȱ11:ȱVereinbarenȱvonȱRechnungViewȱ NachdemȱdieȱViewȱRechnungViewȱvereinbartȱist,ȱwerdenȱdieȱDatenȱderȱvirtuellenȱ Tabelleȱausgegeben,ȱwelcheȱdurchȱAnwendungȱderȱViewȱvomȱDatenbankprozesȬ sorȱimȱZentralspeicherȱzusammengebautȱwird.ȱ DieȱgrauȱhinterlegtenȱDatenȱderȱErgebnistabelleȱinȱAbbildungȱ13ȱsindȱredundant.ȱ DieȱRedundanzȱverschwindet,ȱwennȱmanȱdieselbenȱDatenȱinȱeinerȱhierarchischenȱ Datenstruktur,ȱeinemȱDatenbaum,ȱdarstellt.ȱDerȱDatenbaumȱinȱderȱAbbildungȱ14ȱ zeigtȱdieselbenȱDatenȱaufȱderȱAusprägungsebene.ȱ ȱ 24ȱ 2.3ȱȱSQLȬDDLȱ–ȱeineȱvereinfachteȱAnwendungȱ DieȱRedundanzȱinȱdenȱgrauȱhinterlegtenȱZeilenteilenȱ ergibtȱ sichȱ ausȱ derȱ Fundamentaleigenschaftȱ einesȱ Verbundes.ȱDieseȱbewirktȱimȱBeispiel,ȱdassȱjedeȱPosiȬ tionszeileȱ mitȱ ihrerȱ Rechnungszeileȱ undȱ dieseȱ mitȱ ihrerȱKundenzeileȱzuȱeinerȱErgebniszeileȱzusammenȬ gefasstȱwerden.ȱSchließlichȱwirdȱauchȱnochȱdieȱjeweiȬ ligeȱ Artikelzeileȱ mitȱ demȱ Verbundergebnisȱ verbunȬ den.ȱ Betrachtetȱ manȱ diesenȱ Verbindungsvorgangȱ unterȱ Beachtungȱ derȱ Bedeutungȱ derȱ Multiplizitätenȱ imȱ RDBD,ȱ soȱ lautetȱ dieȱ Erkenntnis:ȱ Jedeȱ Positionszeileȱ wirdȱ mitȱ allȱ denȱ Zeilenȱ derȱ anderenȱ Tabellenȱ verȬ bunden,ȱ mitȱ denenȱ sieȱ aufgrundȱ derȱ einfachenȱ MulȬ tiplizitätȱ(UML:ȱ1)ȱdirektȱundȱindirektȱverbundenȱist.ȱ ȱ Sindȱ mehrereȱ Positionszeilenȱ mitȱ derselbenȱ RechȬ nungszeileȱ direktȱ undȱ indirektȱ mitȱ derselbenȱ KunȬ denzeileȱ verbunden,ȱ soȱ erscheinenȱ dieȱ Datenȱ dieserȱ RechnungsȬȱ undȱ Kundenzeilenȱ redundantȱ imȱ VerȬ bundergebnis.ȱ ȱ ȱ ȱ ȱ Eineȱ gänzlichȱ andereȱ Wirkungȱ hatȱ derȱ Einbauȱ derȱ PositionsdatenȱinȱeineȱBaumhierarchie.ȱDerȱBaumȱistȱ eineȱ hierarchischeȱ Struktur.ȱ Beiȱ ihrȱ sindȱ imȱ Beispielȱ dieȱRechnungsdatenȱdenȱPositionsdatenȱhierarchischȱ übergeordnet.ȱ Dieȱ Kundendatenȱ sindȱ ihrerseitsȱ denȱ Rechnungsdatenȱ hierarchischȱ übergeordnet.ȱ HierarȬ chischȱ übergeordneteȱ Datenȱ tretenȱ inȱ einemȱ Baumȱ prinzipiellȱ redundanzfreiȱ auf.ȱ Blätterȱ könnenȱ jedochȱ redundantȱsein.ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ Abbildungȱ13:ȱErgebnisdatenȱderȱRechnungȬViewȱenthalȬ tenȱredundanteȱDatenȱ ȱ 25ȱ 2ȱȱUMLȱ–ȱgrafischeȱModellierungsspracheȱ ȱ ȱ Abbildungȱ14:ȱBaumȱderȱKundenȬ,ȱRechnungsȬ,ȱPositionsȬȱundȱArtikeldatenȱ 26ȱ 2.4ȱȱÜbungenȱ 2.4 Übungen 1) UntersuchenȱSieȱ dieȱ Ausdrucksfähigkeitȱ vonȱ UMLȱ fürȱ dieȱBeschreibungȱ vonȱ Klassendiagrammen,ȱ EntitätsȬBeziehungsȬDiagrammen,ȱ relationalenȱ DatenȬ bankdiagrammen,ȱBegriffsdiagrammenȱundȱXMLȬDokumentȬDiagrammen.ȱ 2) UntersuchenȱSie,ȱ wasȱ manȱ unterȱ demȱ Begriffȱ ȈBegriffȈȱverstehtȱundȱ wieȱ manȱ Begriffssystemeȱmodellierenȱundȱimplementierenȱkönnte.ȱ 3) Untersuchenȱ Sieȱ dieȱ Evolutionȱ desȱ ERMȱ bisȱ zuȱ denȱ heutigenȱ AusdrucksȬ möglichkeitenȱmitȱUMLȱ 4) Untersuchenȱ Sieȱ dieȱ Evolutionȱ vonȱ SQLȱ undȱ derenȱNiederschlagȱ inȱ denȱ verȬ schiedenenȱSQLȬNormen.ȱ 27ȱ 3 XML und SQL – Vereinigung zweier Welten InȱdiesemȱKapitelȱlernenȱSie,ȱ – mitȱwelchenȱneuenȱSprachmittelnȱdieȱherkömmlicheȱrelationaleȱWeltȱundȱȱ – dieȱneueȱhierarchischeȱXMLȬDokumentenweltȱzusammengeführtȱwerden.ȱ Mitȱ Ihremȱ erworbenenȱ Wissenȱ könnenȱ Sieȱ sodannȱ beurteilen,ȱ wieȱ Sieȱ dieȱ neuenȱ Möglichkeitenȱnutzenȱkönnen.ȱ 3.1 XML in SQL – SQL/XML Inȱ derȱ SQLȬNormȱ vomȱ Jahrȱ 2003ȱ (SQL:2003)ȱ wurdeȱ derȱ neueȱ Datentypȱ XMLȱ inȱ SQLȱeingeführt.ȱWirdȱeineȱrelationaleȱSpalteȱmitȱdiesemȱTypȱvereinbart,ȱsoȱenthältȱ sieȱ amȱ Kreuzungspunktȱ mitȱ einerȱ Zeileȱ einenȱ XMLȬWert.ȱ Einȱ solcherȱ XMLȬWertȱ istȱeinȱwohlgeformtesȱXMLȬDokumentȱinȱeinerȱinternenȱundȱnurȱdemȱDatenbankȬ prozessorȱ zugänglichenȱ Form.ȱ Sieȱ wirdȱ auchȱ alsȱ dieȱ internȱ codierteȱ Formȱ einesȱ XMLȬDokumentsȱ bezeichnet.ȱ Einȱ XMLȬWertȱ bestehtȱ hierbeiȱ ausȱ einerȱ BaumhieȬ rarchieȱ vonȱ miteinanderȱ verknüpftenȱ Knoten.ȱ Einȱ solcherȱ Wertȱ kannȱ praktischȱ beliebigȱgroßȱsein.ȱWeilȱaufȱdieȱeinzelnenȱDatenȱinȱeinemȱXMLȬWertȱmitȱderȱDaȬ tenmanipulationsspracheȱXQueryȱ(XMLȱQuery)ȱzugegriffenȱwird,ȱwirdȱerȱauchȱalsȱ XDMȬWertȱ bezeichnet.ȱ Hierbeiȱ istȱ XDMȱ dieȱ Abkürzungȱ fürȱ XQueryȱ Dataȱ Model.ȱ DasȱXDMȱberuhtȱaufȱseinenȱVorgängermodellenȱmitȱdenȱBezeichnungenȱ – XMLȱInformationȱSetȱ(Infoset)ȱ – PostȱSchemaȬValidationȱInfosetȱ(PSVI)ȱ Wennȱ einȱ XMLȬWertȱ inȱeineȱ zeichenartigeȱ externeȱFormȱ konvertiertȱ wird,ȱ seinerȱ externȱ codiertenȱ Form,ȱ erscheintȱ erȱ inȱ seinerȱ fürȱ menschlicheȱ Leserȱ geeignetenȱ GestaltȱundȱgewohntenȱSchreibweiseȱalsȱXMLȬDokument.ȱHierbeiȱdarfȱerȱdieȱmaȬ ximaleȱ Größeȱ einesȱ CLOBȬWertesȱ nichtȱ übersteigen.ȱ Dieserȱ istȱ derzeitȱ aufȱ zweiȱ Gigabyteȱbegrenzt.ȱ AllgemeinȱgesprochenȱwirdȱderȱXMLȬDatentypȱmitȱzweiȱMengenȱbeschrieben,ȱderȱ MengeȱderȱmöglichenȱXMLȬWerteȱundȱderȱMengeȱderȱOperationen,ȱdieȱmitȱdiesenȱ Wertenȱ ausgeführtȱ werdenȱ könnenȱ bzw.ȱ dieseȱ Werteȱ erzeugen.ȱ Dieȱ Mengeȱ derȱ möglichenȱXMLȬWerteȱistȱastronomischȱgroß,ȱwennȱmanȱbedenkt,ȱdassȱdieȱAnzahlȱ ihrerȱElementeȱdurchȱdieȱtextförmigeȱRepräsentationȱinȱFormȱeinesȱCLOBȬWertesȱ derȱGrößeȱvonȱzweiȱGBȱbegrenztȱwird.ȱDieȱMengeȱderȱXMLȬOperationenȱbestehtȱ hauptsächlichȱ ausȱ denȱ XMLȬspezifischenȱ eingebautenȱ Funktionenȱ vonȱ SQL/XMLȱ undȱ demȱ Sprachvorratȱ derȱ Spracheȱ XQuery.ȱ Dieȱ Funktionalitätȱ derȱ eingebautenȱ Funktionenȱ kannȱ durchȱ benutzerdefinierteȱ Funktionenȱ wieȱ üblichȱ erweitertȱ werȬ den.ȱ ȱ ȱ 29 3ȱȱXMLȱundȱSQLȱ–ȱVereinigungȱzweierȱWeltenȱ ȱ ȱ ȱ Mengeȱ derȱ mögliȬ chenȱXMLȬWerteȱ ȱ Mengeȱ derȱ XMLȬ Operationenȱ ȱ ȱ Abbildungȱ15:ȱDatentypȱ–ȱspeziellȱXMLȬDatentypȱ InȱDB2ȬSQLȱVersionȱ9.5ȱsindȱXMLȬspezifischeȱFunktionenȱimplementiert,ȱdieȱfolȬ gendenȱZweckenȱdienen:ȱ – publizierenȱvonȱherkömmlichenȱrelationalenȱDatenȱinȱXMLȬDokumentenȱ – zerlegenȱ vonȱ XMLȬDokumentenȱ undȱ speichernȱ derȱ hierbeiȱ gewonnenenȱ DatenȱinȱrelationalenȱTabellenȱ – ladenȱvonȱXMLȬWertenȱundȱmanipulierenȱvonȱDatenȱinȱXMLȬWertenȱ – überprüfenȱvonȱXMLȬDokumentenȱaufȱÜbereinstimmungȱmitȱeinemȱXMLȬ Schemaȱ – aufrufenȱderȱDatenmanipulationsspracheȱXQueryȱausȱSQLȱherausȱundȱ hierbeiȱgewinnenȱvonȱDatenȱausȱXMLȬWerten.ȱ MitȱdenȱPublikationsfunktionenȱvonȱSQL/XMLȱwerdenȱausȱherkömmlichenȱrelatiȬ onalenȱ Datenȱ XMLȬDokumenteȱ inȱ derenȱ datenbankinternenȱ Formȱ generiert,ȱ dieȱ auchȱalsȱXMLȬWerteȱbezeichnetȱwerden.ȱAnschließendȱkönnenȱdieȱXMLȬWerteȱinȱ ihreȱexterne,ȱzeichenförmigeȱGestaltȱkonvertiertȱwerden.ȱSieȱsindȱdieȱvonȱunsȱlesȬ barenȱ XMLȬDokumente.ȱ Denȱ Konvertierungsprozessȱ bezeichnetȱ manȱ alsȱ serialiȬ sieren.ȱ Inȱ derȱ folgendenȱ Tabelleȱ werdenȱ dieȱ Namenȱ derȱ SQL/XMLȬPublikationsȬ funktionenȱaufgeführtȱundȱihreȱVerwendungszweckeȱkurzȱbeschrieben.ȱDieȱPubliȬ kationsfunktionenȱwerdenȱoftȱauchȱalsȱKonstruktorfunktionenȱbezeichnet,ȱweilȱsieȱ datenbankinterneȱXMLȬKonstrukteȱerzeugen.ȱ ȱ Nameȱ Verwendungszweckȱ XMLAGGȱ SieȱistȱeineȱSpaltenfunktionȱ(Mengenfunktion).ȱSieȱfasstȱalleȱ WerteȱeinerȱSpalteȱvomȱTypȱXMLȱzuȱeinemȱeinzigenȱXMLȬ Wertȱzusammen.ȱ XMLATTRIBUTESȱ SieȱerzeugtȱXMLȬAttributeȱeinesȱXMLȬElementesȱausȱrelatiȬ onalenȱDaten.ȱ XMLCOMMENTȱ SieȱerzeugtȱeinenȱXMLȬKommentarȱausȱrelationalenȱDaten.ȱ XMLCONCATȱ Sieȱ fasstȱ eineȱ Anzahlȱ vonȱ skalarenȱ XMLȬWertenȱ zuȱ einemȱ einzigenȱXMLȬWertȱzusammen.ȱ 30ȱ 3.1ȱȱXMLȱinȱSQLȱ–ȱSQL/XMLȱ XMLDOCUMENTȱ SieȱerzeugtȱeinenȱDokumentknoten.ȱMitȱeinemȱKnotenȱdieȬ sesȱ Typsȱ mussȱ einȱ datenbankinternesȱ XMLȬDokumentȱ alsȱ Wurzelknotenȱ beginnen.ȱ Dasȱ Dokumentȱ hatȱ dieȱ Gestaltȱ einesȱBaumes.ȱ XMLELEMENTȱ SieȱerzeugtȱeinȱXMLȬElementȱausȱrelationalenȱDaten.ȱ XMLFORESTȱ SieȱerzeugtȱeineȱFolgeȱvonȱXMLȬElementenȱausȱrelationalenȱ Daten.ȱ XMLNAMESPACESȱ SieȱerzeugtȱeineȱXMLȬNamensraumȬVereinbarung.ȱ XMLPIȱ Sieȱ erzeugtȱ eineȱ XMLȬProcessingȬInstructionȱ (Hinweisȱ fürȱ einenȱParser,ȱderȱdasȱXMLȬDokumentȱverarbeitenȱsoll).ȱ XMLSERIALIZEȱ Sieȱ konvertiertȱ einȱ XMLȬDokumentȱ imȱ XMLȬTypȱ inȱ eineȱ zeichenartigeȱ externeȱ Repräsentationȱ oderȱ einenȱ BLOB.ȱ Hierdurchȱ entstehtȱ ausȱ derȱ datenbankinternenȱ RepräsentaȬ tionȱ einesȱ XMLȬWertesȱ dasȱ korrespondierendeȱ XMLȬ DokumentȱinȱderȱüblichenȱlesbarenȱForm.ȱ XMLTEXTȱ SieȱerzeugtȱeinenȱXMLȬTextwertȱausȱrelationalenȱDaten.ȱ Tabelleȱ2:ȱPublikationsfunktionenȱvonȱSQL/XMLȱ Nebenȱ denȱ Publikationsfunktionenȱ gibtȱ esȱ inȱ SQL/XMLȱ weitereȱ Funktionenȱ zurȱ DurchführungȱderȱuntenȱaufgeführtenȱOperationenȱmitȱXMLȬWerten.ȱ ȱ Nameȱ Verwendungszweckȱ XMLCASTȱ SieȱkonvertiertȱeinenȱWertȱeinesȱgegebenenȱTypsȱinȱdenselȬ benȱ Wertȱ inȱ einemȱ anderenȱ Typ.ȱ Derȱ QuellȬȱ oderȱ derȱ ZielȬ typȱkannȱXMLȱsein.ȱ XMLEXISTSȱ Dasȱ Prädikatȱ prüft,ȱ obȱ einȱ XQueryȬAusdruckȱ einenȱ oderȱ keinenȱXMLȬWertȱzurückgibt.ȱ XMLPARSEȱ SieȱprüftȱeinȱXMLȬDokumentȱinȱZeichenform,ȱobȱesȱwohlgeȬ formtȱist,ȱundȱgibtȱeinenȱXMLȬWertȱinȱinternȱcodierterȱFormȱ zurück.ȱ XMLQUERYȱ SieȱführtȱeinenȱXQueryȬAusdruckȱimȱSQLȬKontextȱausȱundȱ gibtȱeinenȱXMLȬWertȱzurück.ȱ XMLTABLEȱ Sieȱ erzeugtȱ eineȱ relationaleȱ Tabelleȱ ausȱ einemȱ XMLȬDokuȬ ment.ȱȱ 31ȱ 3ȱȱXMLȱundȱSQLȱ–ȱVereinigungȱzweierȱWeltenȱ XMLVALIDATEȱ Sieȱ gibtȱ einenȱ mitȱ einemȱ XMLȬSchemaȱ validierten,ȱ d.ȱ h.ȱ schemakonformenȱXMLȬWertȱzurück.ȱ Tabelleȱ3:ȱSonstigeȱFunktionenȱaußerȱdenȱPublikationsfunktionenȱinȱSQL/XMLȱ 3.2 SQL in XML – XQuery AbȱDB2ȱVersionȱ9.1ȱenthältȱderȱDatenbankprozessorȱnebenȱdemȱSQLȬParserȱauchȱ denȱ XQueryȬParser.ȱ Wirdȱ überȱ dasȱ Eingabefensterȱ desȱ DB2ȬBefehlseditorsȱ eineȱ Eingabeȱ mitȱ demȱ Befehlsbezeichnerȱ XQUERYȱ eingegeben,ȱ soȱ wirdȱ dieȱ AnfordeȬ rungȱ anȱ denȱ XQueryȬParserȱ weitergeleitet.ȱ Istȱ dasȱ ersteȱ Wortȱ imȱ Eingabestromȱ nichtȱ XQUERY,ȱ soȱ wirdȱ dieȱ Anforderungȱ anȱ denȱ SQLȬParserȱ übermittelt.ȱ Nachȱ erfolgreicherȱSyntaxprüfungȱdurchȱdenȱjeweiligenȱParserȱwirdȱdieȱEingabeȱanȱdenȱ gemeinsamenȱ Compiliererȱ weitergeleitet.ȱ Dasȱ vonȱ ihmȱ erzeugte,ȱ optimierteȱ undȱ ausführbareȱProgrammȱwirdȱsodannȱvomȱhypridenȱProzessorȱausgeführt.ȱDieserȱ verwaltetȱdieȱDatenȱentwederȱimȱherkömmlichenȱrelationalenȱoderȱimȱneuȱhinzuȬ gekommenenȱ XMLȬSpeicher.ȱ Dieȱ Abbildungȱ 16ȱ veranschaulichtȱ diesenȱ SachverȬ haltȱ[IBM07].ȱ InȱXQueryȬAusdrückenȱkönnenȱzweiȱXQueryȬFunktionenȱaufgerufenȱwerden,ȱdieȱ einenȱZugriffȱaufȱSQLȬTabellenȱgestatten.ȱSieȱwerdenȱausführlichȱimȱKapitelȱüberȱ XQueryȱerläutert.ȱDieȱZugriffeȱmüssenȱeinenȱXMLȬWertȱzurückgeben.ȱ ȱ Nameȱ Verwendungszweckȱ db2-fn:xmlcolumnȱ SieȱgreiftȱaufȱeineȱXMLȬSpalteȱinȱeinerȱSQLȬTabelleȱzu.ȱInȱ ihremȱ Argumentȱ werdenȱ hierzuȱ derȱ Tabellennameȱ undȱ derȱNameȱeinerȱXMLȬSpalteȱinȱFormȱeinesȱqualifiziertenȱ Namensȱangegeben.ȱ db2-fn:sqlqueryȱ Sieȱ enthältȱ alsȱ Argumentȱ einenȱ gewöhnlichenȱ SELECTȬ BefehlȱinȱSQL.ȱDadurchȱkönnenȱbeliebigeȱlesendeȱZugrifȬ feȱ aufȱ SQLȬDatenȱ erfolgen.ȱ Derȱ Ergebniswertȱ mussȱ alsȱ XMLȬTypȱcodiertȱsein.ȱ Tabelleȱ4:ȱXQueryȬFunktionenȱfürȱdenȱZugriffȱaufȱSQLȬDatenȱ ȱ ȱ ȱ ȱ 32ȱ 3.4ȱȱÜbungenȱ ȱ ȱ ȱ Clientȱ SQLȱ XQUERYȱ ȱ ȱ Serverȱ ȱ ȱ SQLȬParserȱ XQueryȬParserȱ ȱ Compiliererȱ ȱ HypriderȱProzessorȱ ȱ Tabellenspeicherȱ XMLȬSpeicherȱ Abbildungȱ16:ȱStrukturȱdesȱDatenbanksystemsȱDB2ȱV9.5ȱ 3.3 XML Schema – DDL für XML-Dokumente Einȱ XMLȬSchemaȱ istȱ einȱ Bauplanȱ fürȱ schemakonformeȱ XMLȬDokumente.ȱ Unterȱ Beachtungȱ derȱ Vorgabenȱ einesȱ XMLȬSchemasȱ kannȱ einȱ XMLȬValidiererȱ (parser)ȱ prüfen,ȱobȱeinȱzuȱprüfendesȱXMLȬDokumentȱvalide,ȱd.ȱh.ȱkorrektȱist.ȱDB2ȱunterȬ stütztȱ dieȱ Validierungȱ zuȱ speichernderȱ XMLȬDokumenteȱ sowohlȱ mitȱ Schemata,ȱ dieȱ inȱ derȱ modernenȱ Spracheȱ XMLȱSchemaȱ alsȱ auchȱ inȱ derȱ älterenȱ Spracheȱ DTDȱ (DocumentȱTypeȱDefinition)ȱbeschriebenȱsind.ȱ Dieȱ XMLȬSchemaȬBeschreibungsspracheȱ XMLȱSchemaȱ istȱ eineȱ sehrȱ umfangreicheȱ Sprache.ȱSieȱenthältȱeinȱbreitesȱSortimentȱanȱDatentypenȱundȱSprachelementenȱzurȱ Beschreibungȱ beliebigȱ komplexerȱ hierarchischerȱ XMLȬDokumentstrukturen.ȱ Imȱ Kapitelȱ8ȱfindenȱSieȱeineȱkurzeȱEinführungȱinȱdieȱSpracheȱXMLȱSchema.ȱ 3.4 Übungen 1) StellenȱSieȱfest,ȱinȱwelchemȱJahrȱwelcheȱSQLȬNormȱverabschiedetȱwurde.ȱ 2) ErarbeitenȱSieȱsichȱdieȱEntstehungsgeschichteȱvonȱXML.ȱ 3) ErarbeitenȱSieȱsichȱdieȱEntstehungsgeschichteȱvonȱXQuery.ȱ 4) ErarbeitenȱSieȱsichȱdieȱEntstehungsgeschichtenȱvonȱXMLȱSchemaȱundȱDTD.ȱ ȱ 33ȱ 4 Publikation relationaler Daten InȱdiesemȱKapitelȱlernenȱSie,ȱ – welcheȱPublikationsfunktionenȱesȱinȱSQL/XMLȱgibtȱundȱȱ – wieȱ dieseȱ Funktionenȱ eingesetztȱ werden,ȱ umȱ komplexeȱ XMLȬDokumenteȱ zuȱgenerierenȱ – welchenȱ Nutzenȱ dieȱ architekturgetriebeneȱ Entwicklungȱ vonȱ XMLȬDokuȬ mentenȱbringtȱ – welcheȱBedeutungȱdieȱstrukturierteȱundȱästhetischeȱProgrammniederschriftȱ zurȱBeherrschungȱderȱKomplexitätȱleistet.ȱ MitȱIhremȱerworbenenȱWissenȱkönnenȱSieȱsodannȱbeliebigȱkomplexeȱXMLȬDokuȬ menteȱausȱrelationalenȱDatenȱerzeugen.ȱ 4.1 XML-Sprachkonstrukte – ein kurzer Überblick AnȱeinemȱkleinenȱBeispielȱeinesȱXMLȬDokumentesȱwerdenȱdieȱSprachkonstrukteȱ vonȱ XMLȱ gezeigt,ȱ sieheȱ XMLȬDokumentȱ 3.ȱ Fürȱ dieȱ Generierungȱ derȱ SprachȬ konstrukteȱwerdenȱdieȱhierfürȱbestimmtenȱSQL/XMLȬPublikationsfunktionen,ȱdieȱ inȱTabelleȱ2ȱkurzȱaufgeführtȱsind,ȱsodannȱdetailliertȱvorgestelltȱundȱanȱzahlreichenȱ Beispielenȱdemonstriert.ȱ EinȱXMLȬDokumentȱmussȱwohlgeformtȱsein.ȱHierzuȱmussȱesȱfolgendeȱBedingunȬ genȱerfüllen.ȱ – JederȱDatenwertȱeinesȱXMLȬElementesȱmussȱvonȱeinemȱStartȬȱundȱEndeȬtagȱ umschlossenȱsein.ȱ – EinȱXMLȬDokumentȱkannȱnurȱeinȱeinzigesȱWurzelelementȱhaben.ȱ – JedesȱXMLȬElementȱkannȱnurȱeinȱihmȱunmittelbarȱhierarchischȱübergeordȬ netesȱXMLȬElementȱhaben.ȱEinȱXMLȬDokumentȱbesitztȱsomitȱeineȱBaumȬ struktur.ȱ – XMLȬElementeȱ dürfenȱ sichȱ nichtȱ überlappen,ȱ indemȱ dasȱ EndeȬtagȱ einesȱȱ übergeordnetenȱElementesȱvorȱdemȱEndeȬtagȱeinesȱuntergeordnetenȱXMLȬ Elementesȱsteht.ȱ – Einemȱ Elementattributȱ mussȱ einȱ Wertȱ zugeordnetȱ werden.ȱ Dieserȱ mussȱ inȱ Hochkommataȱ(einzelneȱoderȱGänsefüße)ȱeingeschlossenȱsein.ȱ – Folgendeȱ Sonderzeichenȱ dürfenȱ nichtȱ inȱ denȱ Namenȱ undȱ inȱ denȱ Textenȱ verwendetȱwerden,ȱsondernȱmüssenȱdurchȱsoȱgenannteȱEntitiesȱersetztȱwerȬ den:ȱ – SpitzklammerȱaufȱȈȈȱ ȱ Entity:ȱ>ȱ ȱ 35 4ȱȱPublikationȱrelationalerȱDatenȱ – UndȬZeichenȱȈ&Ȉȱ – GänsefußȱȈȱ ȱ – Apostrophȱȇȱ ȱ ȱ ȱ ȱ Entity:ȱ&ȱ Entity:ȱ"ȱ Entity:ȱ'ȱ Wennȱ einȱ XMLȬDokumentȱ dannȱ nochȱ vonȱ einemȱ validierendenȱ Parserȱ unterȱ BeȬ achtungȱderȱVorgabenȱeinesȱXMLȬSchemasȱfürȱkorrektȱerachtetȱwurde,ȱsoȱwirdȱesȱ alsȱvalideȱbezeichnet.ȱWohlgeformtheitȱundȱValiditätȱsindȱsomitȱwesentlicheȱQuaȬ litätskriterienȱfürȱeinȱXMLȬDokument.ȱ Imȱ folgendenȱ einfachenȱ XMLȬDokumentȱ 3ȱ sindȱ dieȱ beispielhaftenȱ XMLȬ Sprachkonstrukteȱdargestellt.ȱDieȱzuȱihrerȱGenerierungȱinȱSQL/XMLȱverfügbarenȱ eingebautenȱ Funktionenȱ werdenȱ anschließendȱ kurzȱ angegeben.ȱ Inȱ denȱ sodannȱ folgendenȱKapitelnȱwerdenȱdieȱeingebautenȱSQL/XMLȬFunktionenȱausführlichȱinȱ ihremȱZusammenwirkenȱdargestellt.ȱ ȱ DerȱinȱderȱSyntaxbeschreibungȱSyntaxȱ8ȱaufgeführteȱZeichenkettenausdruckȱkannȱ einȱbeliebigerȱZeichenkettenausdruckȱinȱSQLȱsein.ȱ Imȱ folgendenȱ Beispielȱ sollȱimȱ XMLȬElementȱ Kundeȱderȱ folgendeȱ Kommentarȱ steȬ hen:ȱ ȱ Alsȱ UnterelementeȱdesȱXMLȬElementsȱKundeȱ sollenȱsodannȱinȱ elementzentrierterȱ FormȱdieȱKundendatenȱfolgen.ȱ 54ȱ 4.7ȱȱXMLCOMMENTȱ–ȱerzeugtȱeinenȱXMLȬKommentarȱ ȱ ȱ ȱ ȱ ȱ ȱ «table» Kunde Relationales Datenbankmodell links Kunde_Nr : CHAR(4) Anrede : CHAR(4) Vorname : CHAR(15) Zuname : CHAR(15) Strasse : CHAR(15) PLZ : CHAR(5) Ort : CHAR(15) XML-Schema-Modell unten ȱ ȱ ȱ «Document» Dokument 1... ȱ ȱ 1... «Processing instruction» XML Deklaration «Element» Kunde 1 ȱ ȱ 1 ȱ ȱ ȱ ȱ ȱ «Element» Anrede 1 «Element» Vorname 1 «Element» Zuname 1 «Element» Strasse «Element» PLZ ȱ ȱ ȱ «Element» Kunde_Nr 1 ȱ ȱ «Comment» Kommentar 1 1 «Element» Ort ȱ ȱ Abbildungȱ23:ȱXMLȬSchemaȬModellȱmitȱKommentarȱ Dieȱ Implementierungȱ derȱ SchemaȬVorgabenȱ mitȱ Anwendungȱ derȱ eingebautenȱ FunktionȱXMLCOMMENT()ȱzeigtȱdasȱfolgendeȱProgramm.ȱ ȱ ȱ ȱ ȱ ȱ 55ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ SELECT XMLSERIALIZE( XMLDOCUMENT( XMLELEMENT( NAME "Kunde", XMLCOMMENT( 'Kunde ' || K.Kunde_Nr || ', ' || TRIM( K.Vorname ) || ', ' || TRIM( K.Zuname ) ), XMLFOREST( K.Kunde_Nr, K.Anrede , K.Vorname , K.Zuname , K.Strasse , K.PLZ , K.Ort ) ) ) AS CLOB VERSION '1.0' INCLUDING XMLDECLARATION ) FROM Kunde AS K WHERE Kunde_Nr = 'K001' ; (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) Programmȱ22:ȱXMLCOMMENT()ȱmitȱkomplexeremȱZeichenkettenausdruck Dieȱ eingebauteȱ SQL/XMLȬFunktionȱ XMLCOMMENT()ȱ inȱ denȱ Zeilenȱ (4)ȱ bisȱ (8)ȱ enthältȱeinenȱkomplexerenȱZeichenkettenausdruck.ȱSeinȱErgebnisȱistȱderȱgeforderȬ teȱXMLȬKommentar.ȱ Ergebnis Elementwert Das ist ein Text ȱ ȱ ȱ ȱ ȱ ȱ 63ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ 4.11 XMLAGG – erzeugt einen XML-Wert Dieȱ eingebauteȱ SQL/XMLȬFunktionȱ XMLCONCAT()ȱ dientȱ hauptsächlichȱ dazu,ȱ mehrereȱXMLȬWerteȱeinerȱTabellenzeileȱzuȱeinemȱeinzigenȱXMLȬWertȱzusammenȬ zubauen.ȱDieȱeingebauteȱSQL/XMLȬFunktionȱXMLAGG()ȱistȱinȱderȱLage,ȱmehrereȱ XMLȬWerteȱ einerȱ Tabellenspalteȱ zuȱ einemȱ einzigenȱ XMLȬWertȱ zusammenzusetȬ zen.ȱ Sieȱ zähltȱ deshalbȱ zuȱ denȱ Spaltenfunktionenȱ vonȱ SQLȱ vergleichbarȱ mitȱ denȱ SpaltenfunktionenȱCOUNT(),ȱSUM()ȱusw.ȱ Merkeȱ XMLCONCATȱȱbildetȱausȱXMLȬWertenȱeinerȱZeileȱeinenȱXMLȬWert.ȱ XMLAGGȱȱ bildetȱausȱXMLȬWertenȱeinerȱSpalteȱeinenȱXMLȬWert.ȱ Beispielȱ XML_Tabelleȱ ȱ ȱ XMLAGGȱ ȱ Spaltennameȱ Spalte_1ȱ Spalte_2ȱ Spalte_3ȱ ȱ ȱ XMLȬWertȱA1ȱ ȱ XMLCONCATȱ XMLȬWertȱC1ȱ XMLȬWertȱC2/A2ȱ XMLȬWertȱC3ȱ ȱ ȱ XMLȬWertȱA3ȱ ȱ Tabelleȱ6:ȱBeispieltabelleȱzurȱErklärungȱvonȱXMLCONCAT()ȱundȱXMLAGG()ȱ DieȱFunktionȱXMLCONCATȱbautȱdieȱdreiȱWerteȱȱ – XMLȬWertȱC1ȱ – XMLȬWertȱC2/A2ȱ – XMLȬWertȱC3ȱ zuȱeinemȱXMLȬWertȱzusammen.ȱ DieȱFunktionȱXMLAGGȱbautȱdieȱdreiȱWerteȱ – XMLȬWertȱA1ȱ – XMLȬWertȱC2/A2ȱ – XMLȬWertȱA3ȱ zuȱeinemȱXMLȬWertȱzusammen.ȱ Dieȱ Wirkungsweiseȱ derȱ beidenȱ SQL/XMLȬFunktionenȱ wirdȱ nunȱ anȱ einemȱ einfaȬ chenȱBeispielȱdemonstriert.ȱDiesesȱimplementiertȱzunächstȱdieȱTabelleȱ6:ȱBeispielȬ tabelleȱzurȱErklärungȱvonȱXMLCONCAT()ȱundȱXMLAGG().ȱAnschließendȱwerdenȱ dieȱbeidenȱeingebautenȱFunktionenȱaufȱdieȱBeispieldatenȱangewendet.ȱȱ DieȱfolgendeȱBeispieltabelleȱbestehtȱausȱdreiȱSpaltenȱjeweilsȱimȱDatentypȱXML.ȱ 64ȱ 4.11ȱȱXMLAGGȱ–ȱerzeugtȱeinenȱXMLȬWertȱ CREATE TABLE XML_Tabelle (Spalte_1 XML, Spalte_2 XML, Spalte_3 XML ) ; (1) (2) (3) (4) (5) (6) Programmȱ27:ȱVereinbarungȱderȱBeispieltabelleȱXML_Tabelleȱ DieȱBeispieltabelleȱwirdȱnunȱmitȱdenȱDemonstrationsdatenȱgeladen.ȱWeilȱdieȱSpalȬ tenȱderȱTabelleȱvomȱDatentypȱXMLȱsind,ȱfindetȱbeimȱLadeprozessȱeineȱimpliziteȱ DatentypumwandlungȱinȱdenȱTypȱXMLȱstatt.ȱ INSERT INTO XML_Tabelle (Spalte_1, Spalte_2, Spalte_3) VALUES (null, 'XML_Wert A1', null), ('XML_Wert C1' , 'XML_Wert C2/A2', 'XML_Wert C3' ), (null, 'XML_Wert A3', null) ; (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) Programmȱ28:ȱLadenȱderȱTabelleȱmitȱBeispieldatenȱ MitȱderȱFunktionȱXMLCONCAT()ȱinȱderȱProgrammzeileȱ(4)ȱbisȱ(7)ȱwerdenȱdieȱdreiȱ XMLȬWerteȱ derȱ Tabellenzeileȱ mitȱ demȱ Wertȱ XML_WertȱC1ȱ inȱ Spalte_1ȱ zuȱ einemȱ XMLȬWertȱzusammengebaut.ȱ ȱ SELECT XMLSERIALIZE( XMLDOCUMENT( XMLELEMENT( NAME "Wurzel", XMLCONCAT( Spalte_1, Spalte_2, Spalte_3 ) ) ) AS CLOB INCLUDING XMLDECLARATION ) FROM XML_Tabelle WHERE XMLCAST(Spalte_1 AS CHAR (11)) = 'XML_Wert C1' ; (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) Programmȱ29:ȱZeilenweiseȱZusammenfassungȱvonȱXMLȬWertenȱmitȱXMLCONCAT()ȱ ȱ ȱ 65ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ Ergebnis xml version="1.0" encoding="UTF-8" ?> XML_Wert C1 XML_Wert C2/A2 XML_Wert C3 ImȱProgrammȱ30ȱwerdenȱmitȱderȱFunktionȱXMLAGG()ȱinȱderȱProgrammzeileȱ(4)ȱ bisȱ (5)ȱ dieȱ dreiȱ XMLȬWerteȱ derȱ Tabellenspalteȱ Spalte_2ȱ zuȱ einemȱ XMLȬWertȱ zuȬ sammengebaut.ȱ ȱ SELECT XMLSERIALIZE( XMLDOCUMENT( XMLELEMENT( NAME "Wurzel", XMLAGG( Spalte_2 ) ) ) AS CLOB INCLUDING XMLDECLARATION ) FROM XML_Tabelle ; (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) Programmȱ30:ȱSpaltenweiseȱZusammenfassungȱvonȱXMLȬWertenȱmitȱXMLAGG()ȱ Ergebnis A1 C2/A2 A3 DieȱSyntaxȱderȱFunktionȱXMLAGG()ȱlautetȱfolgendermaßen.ȱ ȱ ȱ ȱ XMLAGG( XML-Ausdruck [ORDER BY Sortierausdruck [ASC | DESC] [, Sortierausdruck [ASC | DESC]]...] ) Syntaxȱ14:ȱAufbauȱderȱFunktionȱXMLAGG()ȱ Wieȱ ausȱ derȱ Syntaxȱ derȱ Funktionȱ XMLAGG()ȱ ersichtlichȱ ist,ȱ könnenȱ dieȱ XMLȬ Werteȱ einerȱSpalteȱ vorȱ ihremȱ Zusammenbauȱ zuȱ einemȱ einzigenȱWertȱ inȱ eineȱ geȬ wünschteȱSortierfolgeȱgebrachtȱwerden.ȱ 66ȱ 4.11ȱȱXMLAGGȱ–ȱerzeugtȱeinenȱXMLȬWertȱ Imȱ folgendenȱ Programmȱ31ȱ werdenȱ dieȱ XMLȬWerteȱderȱ Spalte_2ȱzunächstȱinȱabȬ steigenderȱFolgeȱsortiert,ȱbevorȱsieȱsodannȱzuȱeinemȱeinzigenȱWertȱvonȱderȱFunkȬ tionȱXMLAGG()ȱzusammengefasstȱwerden.ȱDaȱXMLȬWerteȱdirektȱnichtȱsortierbarȱ sind,ȱ werdenȱ sieȱ zunächstȱ inȱ einenȱ temporärenȱ Sortierbegriffȱ inȱ ZeichenkettenȬ formȱ derȱ Längeȱ 15ȱ Zeichenȱ konvertiert.ȱ Nachȱ diesemȱ Sortierbegriffȱ wirdȱ sodannȱ dieȱSortierungȱvorgenommen,ȱsieheȱZeileȱ(5)ȱbisȱ(7).ȱ ȱ SELECT XMLSERIALIZE( XMLDOCUMENT( XMLELEMENT( NAME "Wurzel", XMLAGG( Spalte_2 ORDER BY XMLCAST (Spalte_2 AS CHAR (15)) DESC ) ) ) AS CLOB INCLUDING XMLDECLARATION ) FROM XML_Tabelle ; (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) Programmȱ31:ȱFunktionȱXMLAGG()ȱmitȱderȱORDERȱBYȬKlauselȱ Ergebnis C2/A2 A3 A1 ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ 67ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ 4.12 Publikation der Kunden und ihren Rechnungen NachdemȱwirȱdieȱPublikationsfunktionenȱvonȱSQL/XMLȱinȱihrenȱgrundsätzlichenȱ Wirkungsweisenȱ nunȱ kennen,ȱ könnenȱ wirȱ unsȱ weiterenȱ Beispielenȱ zuwenden.ȱ Dieseȱ erfordernȱ denȱkombiniertenȱ EinsatzȱderȱSQL/XMLȬFunktionenȱzurȱLösungȱ komplexererȱAnforderungenȱanȱdieȱGenerierungȱvonȱXMLȬDokumenten.ȱ Daȱ dieȱ zuȱ generierendenȱ XMLȬDokumenteȱ üblicherweiseȱ hierarchischȱ tiefȱ geȬ schachtelteȱ Baumstrukturenȱ sind,ȱ müssenȱ auchȱ dieȱ sieȱ generierendenȱ SQL/XMLȬ Funktionenȱ hierarchischȱ tiefȱ ineinanderȱ geschachteltȱ werden.ȱ Zwischenȱ derȱ DaȬ tenarchitekturȱ desȱzuȱgenerierendenȱ XMLȬDokumentesȱ undȱderȱ ProgrammarchiȬ tekturȱ desȱ SQLȬProgramms,ȱ dasȱ diesesȱ XMLȬDokumentȱ erzeugt,ȱ bestehtȱ eineȱ spiegelbildlicheȱundȱwechselseitigeȱIdentität.ȱ ProgrammeȱmitȱtiefȱgeschachteltenȱFunktionenȱsindȱnichtȱeinfachȱzuȱüberblicken.ȱ SieȱentfaltenȱsehrȱschnellȱeineȱhoheȱKomplexität.ȱUmȱdieseȱKomplexitätȱbestmögȬ lichȱzuȱbeherrschen,ȱsindȱeineȱgrafischeȱDarstellungȱihresȱBauplansȱundȱeineȱhoheȱ DisziplinȱbeiȱderȱProgrammniederschriftȱerforderlich.ȱȱ Speziellȱ dieȱ schließendenȱ Klammernȱ derȱ ineinanderȱ geschachteltenȱ SQL/XMLȬ Funktionenȱ müssenȱ mitȱ hoherȱ darstellerischerȱ Disziplinȱ immerȱanȱ ihremȱ erwartȬ barenȱPlatzȱniedergeschriebenȱwerden.ȱBereitsȱgeringeȱVerstößeȱgegenȱdiesesȱeinȬ facheȱ Gebotȱ führenȱ zuȱ einerȱ kaumȱ nochȱ beherrschbarenȱ Komplexitätȱ bereitsȱ beiȱ kleinenȱSQLȬProgrammen.ȱ InȱdenȱfolgendenȱKapitelnȱwirdȱdieȱGenerierungȱdesȱhierarchischȱtiefȱgegliedertenȱ XMLȬDokumentesȱ Kundenrechnungenȱ erläutert.ȱ Esȱ wirdȱ hierbeiȱ dieȱ Technikȱ desȱ evolutionärenȱPrototypingȱsowohlȱimȱModellentwurfȱalsȱauchȱbeiȱderȱImplemenȬ tierungȱangewendet.ȱDabeiȱwirdȱderȱaktuelleȱPrototypȱaufȱseinemȱVorgängerȱaufȬ bauendȱentwickelt.ȱȱ Weiterhinȱ wirdȱ derȱ architekturgetriebeneȱ Programmentwicklungsansatzȱ konseȬ quentȱ beibehalten.ȱ Hierbeiȱ wirdȱ zunächstȱ derȱ Bauplanȱ desȱ zuȱ entwickelndenȱ XMLȬDokumentesȱ entworfen.ȱ Weilȱ derȱ Bauplanȱ desȱ XMLȬDokumentesȱ undȱ derȱ BauplanȱdesȱProgrammsȱspiegelbildlichȱzueinanderȱpassen,ȱgehtȱausȱdemȱBauplanȱ desȱXMLȬDokumentesȱhervor,ȱanȱwelcherȱStelleȱdesȱhieraufȱfolgendenȱSQL/XMLȬ ProgrammsȱwelcheȱeingebauteȱFunktionȱvonȱSQL/XMLȱzuȱverwendenȱist.ȱ ȱ ȱ ȱ ȱ ȱ 68ȱ 4.12ȱȱPublikationȱderȱKundenȱundȱihrenȱRechnungenȱ ȱ Ausgangspunktȱ derȱ weiterenȱ Untersuchungenȱ istȱ dasȱ bekannteȱ relationaleȱ Datenbankdiagrammȱ (RDBD).ȱ Seineȱ Strukturȱ ergibtȱ sichȱ einsȬzuȬeinsȱ ausȱ demȱ ihmȱ zugrundeȱ liegendenȱ EntitätsȬBeziehungsȬDiagrammȱ (ERD),ȱ weilȱdieȱausȱ denȱEntitätstypenȱabgeleitetenȱReȬ lationstypenȱ allesamtȱ sichȱ inȱ derȱ drittenȱ Normalformȱ befinden.ȱ ȱ ȱ ȱ ȱ ȱ DasȱRDBDȱkenntȱkeineȱhierarchischenȱAbhängigkeitenȱ zwischenȱ denȱ Relationen.ȱ Ganzȱ andersȱ sindȱ dieȱ VerȬ hältnisseȱ beimȱ zuȱ generierendenȱ XMLȬDokument.ȱ SeiȬ neȱStrukturȱistȱhierarchisch.ȱ ȱ ȱ ȱ ȱ Derȱ erforderlicheȱ Transformationsprozessȱ zwischenȱ derȱ relationalenȱ Datenhaltungȱ inȱ denȱ DatenbanktabelȬ lenȱ undȱ derȱ hierarchischenȱ Repräsentationȱ dieserȱ relaȬ tionalenȱ Datenȱ inȱ denȱ XMLȬDokumentenȱ mussȱ mitȱ demȱ geeignetenȱ Einsatzȱ derȱ eingebautenȱ Funktionenȱ vonȱ SQL/XMLȱ undȱ weitererȱ SQLȬSprachmittelȱ erfolȬ gen.ȱ ȱ ȱ ȱ ȱ ȱ Dieȱ Strukturȱ desȱ letztendlichȱ zuȱ generierendenȱ XMLȬ Dokumentesȱ zeigtȱ dieȱ Abbildungȱ 26.ȱ Sieȱ drücktȱ aus,ȱ dassȱ dasȱ XMLȬDokumentȱ elementzentriertȱ zuȱ entwiȬ ckelnȱist.ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ Abbildungȱ25:ȱRelationalesȱDatenbankdiagrammȱ ȱ Rechnungsschreibungȱ 69ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ ȱ Abbildungȱ26:ȱArchitekturȱdesȱXMLȬDokumentesȱKundenrechnungenȱ 70ȱ 4.12ȱȱPublikationȱderȱKundenȱundȱihrenȱRechnungenȱ 4.12.1 XML-Dokument Alle Kunden Imȱ erstenȱ Entwicklungsschrittȱ wirdȱ dasȱ XMLȬDokumentȱ Alleȱ Kundenȱ inȱ derȱ eleȬ mentzentriertenȱ Formȱ erzeugt.ȱ Beiȱ ihmȱ istȱ dieȱ bisherigeȱ Einschränkungȱ aufgehoȬ ben,ȱdieȱdarinȱbestandenȱhat,ȱdassȱnurȱdieȱDatenȱdesȱeinenȱKundenȱmitȱderȱKunȬ dennummerȱK001ȱimȱXMLȬDokumentȱausgegebenȱwurden.ȱ Dieȱ beidenȱ Baupläne,ȱ dieȱ desȱ relationalenȱ Datenbankmodellsȱ undȱ desȱ hierarchiȬ schenȱXMLȬDokumentenmodells,ȱsehenȱwieȱfolgtȱaus.ȱ ȱ ȱ ȱ ȱ ȱ ȱ «table» Kunde Relationales Datenbankmodell Kunde_Nr : CHAR(4) Anrede : CHAR(4) Vorname : CHAR(15) Zuname : CHAR(15) Strasse : CHAR(15) PLZ : CHAR(5) Ort : CHAR(15) ȱ ȱ ȱ ȱ ȱ XML-Schema-Modell «Document» Dokument 1 «Processing instruction» XML Deklaration 1 «Element» Alle_Kunden ȱ ȱ * «Element» Kunde ȱ ȱ ȱ Die Multiplizität viele (*) erfordert den Einsatz der SQL/XML-Funktion XMLAGG ȱ 1 «Element» Kunde_Nr 1 «Element» Anrede 1 «Element» Vorname 1 «Element» Zuname 1 «Element» Strasse 1 «Element» PLZ ȱ ȱ ȱ ȱ «Element» Ort ȱ ȱ 1 ȱ Abbildungȱ27:ȱXMLȬDokumentȱAlle_Kundenȱ 71ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ Vergleichtȱ manȱ dasȱ obigeȱ XMLȬSchemaȬModellȱ mitȱ seinerȱ Vorgängerversionȱ inȱ Abbildungȱ20,ȱbeiȱderȱdieȱEinschränkungȱaufȱnurȱeinenȱKundenȱgilt,ȱdannȱerkenntȱ man,ȱdassȱdasȱneueȱXMLȬWurzelelementȱAlle_Kundenȱnunȱvorhandenȱist.ȱWeiterȬ hin,ȱdassȱdieȱKompositionsbeziehung,ȱwelcheȱAlle_KundenȱmitȱdemȱXMLȬElementȱ Kundeȱverbindet,ȱmitȱderȱMultiplizitätȱvieleȱ(UML:ȱ*)ȱausgezeichnetȱist.ȱ Dieȱ Multiplizitätȱ vieleȱ bedeutet,ȱ dassȱ vieleȱ XMLȬWerteȱ derȱ Artȱ Kundeȱ zuȱ einemȱ einzigenȱ XMLȬWertȱ zusammenzufassenȱ sind.ȱ Dieserȱ istȱ demȱ XMLȬElementȱ AlȬ le_Kundenȱ alsȱ Elementwertȱ einzufügen,ȱ sieheȱ Programmzeilenȱ (3)ȱ undȱ (4).ȱ Dieȱ ZusammenfassungȱvielerȱgleichartigerȱXMLȬElementwerteȱ inȱ einerȱ Spalteȱzuȱnurȱ einemȱ Wertȱ leistetȱ dieȱ SQL/XMLȬFunktionȱ XMLAGG(),ȱ sieheȱ Zeilenȱ (4)ȱ bisȱ (16).ȱ Dieȱ demȱ XMLȬElementȱ Kundeȱ hierarchischȱuntergeordnetenȱ XMLȬElementeȱ KunȬ de_Nr,ȱ Anredeȱ usw.ȱ werdenȱ sinnvollȱ weilȱ übersichtlichȱ mitȱ derȱ eingebautenȱ SQL/XMLȬFunktionȱXMLFOREST()ȱerzeugt,ȱsieheȱZeilenȱ(6)ȱbisȱ(14).ȱ DasȱfolgendeȱSQL/XMLȬProgrammȱgeneriertȱdasȱgeforderteȱXMLȬDokument.ȱ ȱ SELECT XMLSERIALIZE( CONTENT XMLDOCUMENT( XMLELEMENT( NAME "Alle_Kunden", XMLAGG( XMLELEMENT( NAME "Kunde", XMLFOREST( K.Kunde_Nr AS "Kunde_Nr", K.Anrede AS "Anrede" , K.Vorname AS "Vorname" , K.Zuname AS "Zuname" , K.Strasse AS "Strasse" , K.PLZ AS "PLZ" , K.Ort AS "Ort" ) ) ) ) ) AS CLOB INCLUDING XMLDECLARATION ) AS Ergebnis FROM Kunde K ; Programmȱ32:ȱXMLȬDokumentȱAlle_Kundenȱ 72ȱ (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) 4.12ȱȱPublikationȱderȱKundenȱundȱihrenȱRechnungenȱ Ergebnis K001 Herr Hugo Mueller Gartenstr. 4a 69123 Heidelberg K002 Herr Georg Mayer Neckarstr. 1 69123 Heidelberg K003 Frau Eva Schulze Hauptstr. 7 69502 Hemsbach Eineȱ etwasȱ übersichtlichereȱ Lösungȱ derselbenȱ Aufgabenstellungȱ enthältȱ dasȱ folȬ gendeȱProgrammȱ33.ȱInȱihmȱistȱdieȱErzeugungȱderȱXMLȬElementeȱKundeȱundȱihrerȱ ihnenȱhierarchischȱuntergeordnetenȱXMLȬElementeȱKunde_Nr,ȱAnredeȱusw.ȱinȱderȱ FROMȬKlauselȱinȱeineȱtemporäreȱNebentabelleȱ(SQL:ȱLATERAL)ȱmitȱdemȱNamenȱ XML_KundeȱundȱderȱSpalteȱXML_Spalte_Kundeȱausgelagert,ȱsieheȱZeileȱ(9)ȱbisȱ(23).ȱ DieseȱLateralȬTabelleȱwirdȱmitȱderȱUnteranfrageȱaufȱdieȱTabelleȱKundeȱaufgebaut.ȱ Dieȱ XMLȬWerteȱ inȱderȱSpalteȱXML_Spalte_KundeȱderȱLateralȬTabelleȱXML_Kundeȱ werdenȱ inȱ derȱ Hauptanfrageȱ vonȱ derȱ SQL/XMLȬFunktionȱ XMLAGG()ȱ zuȱ einemȱ einzigenȱ Wertȱ zusammengefasst,ȱ sieheȱ Zeileȱ (4).ȱ Derȱ Ergebniswertȱ wirdȱ sodannȱ derȱ Funktionȱ XMLELEMENT()ȱ zurȱVerfügungȱ gestellt,ȱ dieȱ dasȱ XMLȬElementȱ AlȬ le_Kundenȱgeneriert,ȱsieheȱZeileȱ(3).ȱ ȱ ȱ ȱ 73ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ ȱ SELECT XMLSERIALIZE( CONTENT XMLDOCUMENT( XMLELEMENT( NAME "Alle_Kunden", XMLAGG(XML_Kunde.XML_Spalte_Kunde ) ) ) AS CLOB INCLUDING XMLDECLARATION ) AS Ergebnis FROM LATERAL (SELECT XMLELEMENT( NAME "Kunde", XMLFOREST( K.Kunde_Nr AS "Kunde_Nr", K.Anrede AS "Anrede" , K.Vorname AS "Vorname" , K.Zuname AS "Zuname" , K.Strasse AS "Strasse" , K.PLZ AS "PLZ" , K.Ort AS "Ort" ) ) FROM Kunde K ) AS XML_Kunde (XML_Spalte_Kunde) ; (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) Programmȱ33:ȱXMLȬDokumentȱAlle_KundenȱmitȱtemporärerȱLateralȬTabelleȱ 4.12.2 XML-Dokument Alle Kunden mit ihren Rechnungen Inȱ dasȱ XMLȬDokumentȱ Alle_Kundenȱ werdenȱ nunȱ imȱ anstehendenȱ ErweiterungsȬ schrittȱnochȱderenȱRechnungenȱmitȱaufgenommen.ȱ Dieȱ beidenȱ Baupläne,ȱ dieȱ desȱ relationalenȱ Datenbankmodellsȱ undȱ desȱ hierarchiȬ schenȱ XMLȬDokumentenmodellsȱ sindȱ inȱ Abbildungȱ 28ȱ dargestellt.ȱ Imȱ Vergleichȱ zuȱAbbildungȱ27:ȱXMLȬDokumentȱAlle_KundenȱsindȱjetztȱnochȱdasȱXMLȬElementȱ Rechnungenȱ undȱ dasȱ XMLȬElementeȱ Rechnungȱ mitȱ seinenȱ abhängigenȱ XMLȬ Elementenȱ Rechnung_Nr,ȱ Kunde_Nrȱ usw.ȱ hinzugekommen.ȱ Dieȱ XMLȬElementeȱ Rechnungenȱ undȱ Rechnungȱ sindȱ überȱ eineȱ Kompositionsbeziehungȱ mitȱ derȱ MulȬ tiplizitätȱvieleȱ(UML:ȱ*)ȱmiteinanderȱverbunden.ȱ Zwischenȱ denȱ XMLȬElementenȱ Alle_Kundenȱ undȱ Kundeȱ sowieȱ Rechnungenȱ undȱ RechnungȱbestehtȱsomitȱjeȱeineȱKompositionsbeziehungȱmitȱderȱMultiplizitätȱvieleȱ (*).ȱ Programmtechnischȱ erfordertȱ eineȱ Multiplizitätȱ derȱ Artȱ vieleȱ denȱ Einsatzȱ derȱ Spaltenfunktionȱ XMLAGG().ȱ Spaltenfunktionenȱ sindȱ inȱ SQLȱ jedochȱ direktȱ nichtȱ ineinanderȱschachtelbar.ȱBeziehenȱsichȱdieȱjeweiligenȱFunktionenȱXMLAGG()ȱaufȱ eineȱ Spalteȱ einerȱ temporärenȱ LateralȬTabelle,ȱ soȱ kannȱ überȱ diesenȱ Umwegȱ eineȱ hierarchischeȱ Schachtelungȱ auchȱ derȱ SQL/XMLȬFunktionȱ XMLAGG()ȱ programmȬ technischȱumgesetztȱwerden.ȱȱ 74ȱ 4.12ȱȱPublikationȱderȱKundenȱundȱihrenȱRechnungenȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ Abbildungȱ28:ȱXMLȬDokumentȱAlleȱKundenȱmitȱihrenȱRechnungenȱ DiesenȱLösungswegȱdesȱEinsatzesȱvonȱtemporärenȱNebentabellenȱ(SQL:ȱLATERALȱ früherȱauchȱTABLE)ȱwerdenȱwirȱinȱdenȱfolgendenȱProgrammenȱeinschlagen.ȱ DasȱfolgendeȱProgrammȱ34ȱimplementiertȱdieȱobigeȱArchitekturȱundȱgeneriertȱdasȱ geforderteȱXMLȬDokument.ȱ ȱ 75ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ SELECT XMLSERIALIZE( CONTENT XMLDOCUMENT( XMLELEMENT( NAME "Alle_Kunden", XMLAGG(XML_Kunde.XML_Spalte_Kunde ) ) ) AS CLOB INCLUDING XMLDECLARATION ) AS Ergebnis FROM LATERAL (SELECT XMLELEMENT( NAME "Kunde", XMLFOREST( K.Kunde_Nr AS "Kunde_Nr", K.Anrede AS "Anrede" , K.Vorname AS "Vorname" , K.Zuname AS "Zuname" , K.Strasse AS "Strasse" , K.PLZ AS "PLZ" , K.Ort AS "Ort" ), XMLELEMENT( NAME "Rechnungen", (SELECT XMLAGG(XML_Rechnung.XML_Spalte_Rechnung) FROM LATERAL (SELECT XMLELEMENT( NAME "Rechnung", XMLFOREST( R.Rechnung_Nr AS "Rechnung_Nr", R.Kunde_Nr AS "Kunde_Nr" , R.Datum AS "Datum" , R.Betrag AS "Betrag" ) ) FROM Rechnung AS R WHERE R.Kunde_Nr = K.Kunde_Nr ) AS XML_Rechnung (XML_Spalte_Rechnung) ) OPTION EMPTY ON NULL ) ) FROM Kunde AS K ) AS XML_Kunde (XML_Spalte_Kunde) ; (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) Programmȱ34:ȱXMLȬDokumentȱAlleȱKundenȱmitȱihrenȱRechnungenȱ Abȱ derȱ Programmzeileȱ (21)ȱ bisȱ (39)ȱ wirdȱ derȱ Zwischenknotenȱ vomȱ Typȱ XMLȬ Elementȱ mitȱ demȱ Namenȱ Rechnungenȱ mitȱ seinenȱ abhängigenȱ Knotenȱ erzeugt.ȱ Inȱ derȱZeileȱ(22)ȱwirdȱdieȱFunktionȱXMLAGG()ȱaufȱXMLȬWerteȱderȱSpalteȱXML_SpalȬ te_Rechnungȱ derȱ LateralȬTabelleȱ XML_Rechnungȱ angewendet.ȱ Dieseȱ Schachtelungȱ derȱFunktionȱXMLAGG()ȱinȱdieȱgleichnamigeȱFunktionȱinȱZeileȱ(4)ȱistȱnurȱdeshalbȱ SQLȬkonform,ȱ weilȱ beideȱ Funktionenȱ ihreȱ zuȱ aggregierendenȱ Datenȱ ausȱ Spaltenȱ 76ȱ 4.12ȱȱPublikationȱderȱKundenȱundȱihrenȱRechnungenȱ temporärerȱNebentabellenȱ(LATERAL)ȱbeziehen.ȱEineȱdirekteȱSchachtelungȱohneȱ eineȱTrennungȱüberȱtemporäreȱZwischentabellenȱführtȱzuȱeinemȱSQLȬFehler.ȱ Damitȱ dieȱ Unteranfrageȱ inȱ Zeileȱ (22)ȱ aufȱ Datenȱ derȱ Tabelleȱ Rechnungȱ nurȱ RechȬ nungsdatenȱ desȱ aktuellenȱ Kundenȱ derȱ Hauptanfrageȱ erhältȱ undȱ inȱ XMLȬKnotenȱ konvertiert,ȱistȱeineȱKoppelungȱderȱHauptanfrageȱmitȱderȱUnteranfrageȱerforderȬ lich.ȱ Eineȱ solcheȱ Unteranfrage,ȱ dieȱ jeȱ Zeileȱ derȱ Hauptanfrageȱ ausgeführtȱ wird,ȱ bezeichnetȱ manȱ inȱ SQLȱ auchȱ alsȱ eineȱ korrelierteȱUnteranfrage.ȱ Dieȱ Korrelationȱ erȬ folgtȱ inȱ derȱ WHEREȬKlauselȱ derȱ Programmzeileȱ (35).ȱ Imȱ Gleichheitsprädikatȱ R.Kunde_Nrȱ=ȱK.Kunde_NrȱsindȱdieȱbeidenȱKorrelationsnamenȱRȱfürȱRechnungȱundȱ Kȱ fürȱ Kundeȱ zurȱ Qualifizierungȱ derȱ beidenȱ Spaltenȱmitȱ jeȱ demȱ Namenȱ Kunde_Nrȱ verwendetȱworden.ȱDurchȱdenȱKorrelationsnamenȱKȱwirdȱderȱBezugȱderȱUnteranȬ frageȱzurȱaktuellenȱZeileȱderȱHauptanfrageȱhergestellt.ȱInȱZeileȱ(38)ȱstehtȱdieȱKlauȬ selȱ OPTIONȱ EMPTYȱ ONȱ NULL.ȱ Mitȱ ihrȱ wirdȱ festgelegt,ȱ dassȱ einȱ leeresȱ XMLȬ ElementȱRechnungenȱerzeugtȱwerdenȱsoll,ȱfallsȱeinȱKundeȱkeineȱRechnungenȱhat.ȱ DasȱgenerierteȱXMLȬDokumentȱistȱbereitsȱrechtȱumfangreich.ȱDeshalbȱsindȱeinigeȱ Dokumententeileȱkollabiert.ȱVorȱihrenȱStartȬTagsȱstehtȱeinȱPluszeichenȱ(+).ȱEsȱbeȬ sagt,ȱ dassȱ dasȱ Teildokumentȱ durchȱ eineȱ Expansionȱ sichtbarȱ gemachtȱ werdenȱ könnte.ȱMitȱdemȱMinuszeichenȱwirdȱangezeigt,ȱdassȱeineȱKollabierungȱmöglichȱist.ȱ DieseȱSteuereinrichtungenȱwerdenȱvomȱInternetexplorerȱderȱFirmaȱMicrosoftȱzurȱ Verfügungȱgestellt.ȱ Ergebnis - - K001 Herr Hugo Mueller Gartenstr. 4a 69123 Heidelberg R001 K001 2008-04-04 000013000.00 + + - K003 Frau Eva Schulze Hauptstr. 7 77ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ 69502 Hemsbach 4.12.3 XML-Dokument Kundenrechnungen Inȱ dasȱ XMLȬDokumentȱ AlleȱKundenȱmitȱihrenȱRechnungenȱ werdenȱ nunȱ imȱ letztenȱ ErweiterungsschrittȱnochȱderenȱRechnungspositionenȱundȱdieȱmitȱdiesenȱverbunȬ denenȱArtikelȱaufgenommen.ȱ Dieȱ beidenȱ Baupläne,ȱ dieȱ desȱ relationalenȱ Datenbankmodellsȱ undȱ desȱ hierarchiȬ schenȱXMLȬDokumentmodellsȱsindȱinȱAbbildungȱ29ȱdargestellt.ȱȱ Imȱ Vergleichȱ zuȱ Abbildungȱ 28ȱ sindȱ jetztȱ nochȱ dasȱ XMLȬElementȱ Positionenȱ undȱ dasȱ XMLȬElementȱ Positionȱ mitȱ seinenȱ abhängigenȱ XMLȬElementenȱ Rechnung_Nr,ȱ Artikel_Nr,ȱAnzahlȱundȱArtikelȱhinzugekommen.ȱDesȱWeiterenȱsindȱnochȱdieȱvomȱ XMLȬElementȱArtikelȱabhängigenȱXMLȬElementeȱArtikel_Nr,ȱNameȱundȱPreisȱinȱdasȱ Modellȱ mitȱ aufgenommen.ȱ Dieȱ XMLȬElementeȱ Positionenȱ undȱ Positionȱ sindȱ überȱ eineȱKompositionsbeziehungȱmitȱderȱMultiplizitätȱvieleȱ(UML:ȱ*)ȱmiteinanderȱverȬ bunden.ȱ ImȱGesamtmodellȱsindȱsomitȱjetztȱdreiȱKompositionsbeziehungenȱmitȱjeȱderȱMulȬ tiplizitätȱ vieleȱ (UML:ȱ *)ȱ aufȱ demȱ hierarchischenȱ Pfadȱ zwischenȱ denȱ XMLȬEleȬ mentenȱ Alle_Kundenȱ undȱ Kunde,ȱ Rechnungenȱ undȱ Rechnungȱ sowieȱ Positionenȱ undȱ Positionȱvorhanden.ȱWieȱwirȱschonȱkennenȱgelerntȱhaben,ȱerfordertȱeineȱMultipliȬ zitätȱ derȱ Artȱ vieleȱ programmtechnischȱ denȱ Einsatzȱ derȱ Spaltenfunktionȱ XMLȬ AGG().ȱ Somitȱ mussȱ letztlichȱ dieȱ Spaltenfunktionenȱ XMLAGG()ȱ dreimalȱ ineinanȬ derȱgeschachteltȱangewendetȱwerden.ȱDaȱdiesȱinȱSQLȱjedochȱdirektȱnichtȱmöglichȱ ist,ȱwerdenȱnunȱdreiȱtemporäreȱLateralȬTabellenȱbenötigt.ȱDieseȱwerdenȱmitȱkorreȬ liertenȱ Unteranfragenȱ aufgebautȱ undȱ mitȱ denȱ erforderlichenȱ Datenȱ imȱ XMLȬTypȱ gefüllt.ȱ Inȱ derȱ folgendenȱ Abbildungȱ 29:ȱ XMLȬDokumentȱ undȱ RDBDȱ Kundenrechnungenȱ sindȱdieȱbeidenȱModelle,ȱdasȱrelationaleȱDatenbankmodellȱundȱdasȱhierausȱabgeȬ leiteteȱXMLȬSchemaȬModellȱdargestellt.ȱ 78ȱ 4.12ȱȱPublikationȱderȱKundenȱundȱihrenȱRechnungenȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ Abbildungȱ29:ȱXMLȬDokumentȱundȱRDBDȱKundenrechnungenȱ 79ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ DieȱprogrammtechnischeȱUmsetzungȱdesȱXMLȬSchemaȬModellsȱKundenrechnunȬ genȱ demonstriertȱdasȱ folgendeȱ Programmȱ35.ȱHinzugekommenȱzuȱProgrammȱ34ȱ istȱderȱProgrammteilȱabȱZeileȱ(33)ȱbisȱ(71).ȱȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ SELECT XMLSERIALIZE( CONTENT XMLDOCUMENT( XMLELEMENT( NAME "Alle_Kunden", XMLAGG(XML_Kunde.XML_Spalte_Kunde ) ) ) AS CLOB INCLUDING XMLDECLARATION ) AS Ergebnis FROM LATERAL (SELECT XMLELEMENT( NAME "Kunde", XMLFOREST( K.Kunde_Nr AS "Kunde_Nr", K.Anrede AS "Anrede" , K.Vorname AS "Vorname" , K.Zuname AS "Zuname" , K.Strasse AS "Strasse" , K.PLZ AS "PLZ" , K.Ort AS "Ort" ), XMLELEMENT( NAME "Rechnungen", (SELECT XMLAGG(XML_Rechnung.XML_Spalte_Rechnung) FROM LATERAL (SELECT XMLELEMENT( NAME "Rechnung", XMLFOREST( R.Rechnung_Nr AS "Rechnung_Nr", R.Kunde_Nr AS "Kunde_Nr" , R.Datum AS "Datum" , R.Betrag AS "Betrag" ), (SELECT XMLELEMENT( NAME "Positionen", XMLAGG( XML_Position.XML_Spalte_Position) ) FROM LATERAL (SELECT XMLELEMENT( NAME "Position", XMLFOREST ( P.Rechnung_Nr AS "Rechnung_Nr", P.Artikel_Nr AS "Artikel_Nr" , P.Anzahl AS "Anzahl" ), ȱ 80ȱ (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) 4.12ȱȱPublikationȱderȱKundenȱundȱihrenȱRechnungenȱ ȱ ȱ XMLELEMENT( NAME "Artikel", XMLFOREST( A.Artikel_Nr AS "Artikel_Nr", A.Name AS "Name" , A.Preis AS "Preis" ) ) ȱ ȱ ȱ ȱ ȱ ) FROM ȱ Position P INNER JOIN Artikel A ON P.Artikel_Nr = A.Artikel_Nr WHERE P.Rechnung_Nr = R.Rechnung_Nr ) AS XML_Position (XML_Spalte_Position) ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ; ) ) FROM Rechnung AS R WHERE R.Kunde_Nr = K.Kunde_Nr ) AS XML_Rechnung (XML_Spalte_Rechnung) ) OPTION EMPTY ON NULL ) ) FROM Kunde AS K ) AS XML_Kunde (XML_Spalte_Kunde) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) ȱ Programmȱ35:ȱKundenrechnungenȱ Inȱ Programmzeileȱ (33)ȱ bisȱ (71)ȱ wirdȱ derȱ Teilȱ desȱ XMLȬDokumentsȱ generiert,ȱ derȱ mitȱ demȱ XMLȬElementȱ Positionenȱ beginntȱ undȱ alleȱ XMLȬElementeȱ enthält,ȱ dieȱ diesemȱXMLȬElementȱhierarchischȱuntergeordnetȱsind.ȱDieȱneuȱhinzukommendenȱ PositionsȬȱ undȱ ArtikeldatenȱwerdenȱinȱderȱLateralȬTabelleȱ XML_PositionȱundȱdeȬ renȱSpalteȱXML_Spalte_PositionȱmitȱAnwendungȱeinerȱkorreliertenȱUnteranfrageȱinȱ FormȱvonȱXMLȬWertenȱgesammelt.ȱȱ DaȱdieȱMultiplizitätȱderȱBeziehungȱnamensȱbetreffenȱzwischenȱPositionȱundȱArtikelȱ vonȱderȱArtȱeinfachȱ(UML:ȱ1)ȱist,ȱgibtȱesȱfürȱeineȱPositionszeileȱgenauȱeineȱArtikelȬ zeile.ȱMitȱHilfeȱdesȱINNERȱJOINȬOperatorsȱinȱZeileȱ(63)ȱwirdȱdeshalbȱeineȱPositiȬ onszeileȱmitȱihrerȱArtikelzeileȱzuȱeinerȱErgebniszeileȱverbunden.ȱDieȱrelationalenȱ Datenȱ einerȱ solchenȱ Ergebniszeileȱ werdenȱ sodannȱ inȱ denȱ Zeilenȱ (42)ȱ bisȱ (59)ȱ inȱ ihreȱkorrespondierendenȱXMLȬElementeȱumgewandelt.ȱAnschließendȱwerdenȱsieȱ inȱderȱLateralȬTabelleȱXML_Positionȱgespeichert.ȱ 81ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ SchließlichȱfasstȱdieȱFunktionȱXMLAGG()ȱinȱZeileȱ(35)ȱdieȱgesammeltenȱXMLȬspeȬ zifischenȱPositionsȬȱundȱArtikeldatenȱzuȱeinemȱXMLȬWertȱzusammenȱundȱordnetȱ diesenȱdemȱXMLȬElementȱPositionenȱinȱZeileȱ(34)ȱzu.ȱ WieȱmanȱimȱProgrammbeispielȱersieht,ȱerfordertȱdieȱHerstellungȱdesȱbereitsȱrechtȱ komplexenȱ XMLȬDokumentesȱ einȱ analogȱ komplexesȱ SQL/XMLȬProgramm.ȱ Esȱ mussȱ nochmalsȱ ausdrücklichȱ empfohlenȱ werden,ȱ beiȱ derȱ Programmniederschriftȱ höchsteȱ Schreibdisziplinȱ waltenȱ zuȱ lassen.ȱ Dieȱ schließendeȱ Argumentklammerȱ sollteȱ sofortȱ zeitlichȱ nachȱ ihrerȱ öffnendenȱ Klammerȱ aufȱ dieȱ Folgezeileȱ unterȱ denȱ Namenȱ derȱ SQL/XMLȬFunktionȱ geschriebenȱ werden.ȱ Dieseȱ einfacheȱ SchreibtechȬ nikȱ bewahrtȱ erfahrungsgemäßȱ vorȱ vielȱ Kummerȱ undȱ unnötigȱ langerȱ EntwickȬ lungszeit.ȱ Ohneȱ dieseȱ Darstellungstechnikȱ desȱ SQLȬCodesȱ istȱ auchȱ eineȱ Pflegeȱ desselbenȱnurȱnochȱunterȱerschwertenȱBedingungenȱmöglich.ȱ Ergebnis + - - - - + 82ȱ K002 Herr Georg Mayer Neckarstr. 1 69123 Heidelberg R003 K002 2008-04-05 000005000.00 R003 A001 00001. A001 Computer 000005000.00 4.12ȱȱPublikationȱderȱKundenȱundȱihrenȱRechnungenȱ 4.12.4 XML-Dokument Kundenrechnungen attributzentriert Imȱ folgendenȱ Beispielȱ wirdȱ dargestellt,ȱ wieȱ dasȱ XMLȬDokumentȱ KundenrechnunȬ genȱ inȱ attributzentrierterȱ Formȱ zunächstȱ inȱ derȱ Architekturȱ seinesȱ XMLȬSchemasȱ aussieht,ȱ sieheȱ Abbildungȱ 30.ȱ Anschließendȱ wirdȱ dieserȱ Bauplanȱ inȱ seinȱ korresȬ pondierendesȱ SQL/XMLȬProgrammȱ umgesetzt,ȱ sieheȱ Programmȱ 36:ȱ XMLȬDokuȬ mentȱ undȱ RDBDȱ Kundenrechnungenȱ attributzentriert.ȱ Anȱ beidenȱ SoftwaredokuȬ mentenȱ werdenȱ dieȱ Gemeinsamkeitenȱ undȱ Unterschiedeȱ desȱ elementzentriertenȱ undȱ desȱ attributzentriertenȱ Entwicklungsansatzesȱ inȱ einemȱ komplexerenȱ Umfeldȱ sichtbar.ȱ VergleichtȱmanȱdieȱbeidenȱProgramme,ȱdieȱdenȱelementzentriertenȱundȱdenȱattriȬ butzentriertenȱDokumentenentwurfȱimplementieren,ȱsoȱerkenntȱmanȱderenȱstrukȬ turelleȱ Identität.ȱ Lediglichȱ dieȱ SQL/XMLȬFunktionȱ XMLFOREST()ȱ inȱ Programmȱ 35:ȱKundenrechnungenȱistȱdurchȱdieȱFunktionȱXMLATTRIBUTES()ȱinȱProgrammȱ36:ȱ XMLȬDokumentȱundȱRDBDȱKundenrechnungenȱattributzentriertȱersetztȱworden.ȱ Dasȱ Ergebnisȱ desȱattributzentriertenȱ Programmsȱ istȱ untenȱ dargestellt.ȱ Hierbeiȱistȱ wiederȱderȱKundeȱK002ȱmitȱallȱseinenȱDatenȱexpandiert.ȱDieȱbeidenȱKundenȱK001ȱ undȱK003ȱsindȱkollabiertȱdargestellt.ȱ Ergebnis - + - + ȱ 83ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ Abbildungȱ30:ȱXMLȬDokumentȱundȱRDBDȱKundenrechnungenȱattributzentriertȱ 84ȱ 4.12ȱȱPublikationȱderȱKundenȱundȱihrenȱRechnungenȱ DasȱfolgendeȱProgrammȱ36ȱimplementiertȱdieȱobigeȱArchitektur.ȱ ȱ SELECT XMLSERIALIZE( CONTENT XMLDOCUMENT( XMLELEMENT( NAME "Alle_Kunden", XMLAGG(XML_Kunde.XML_Spalte_Kunde ) ) ) AS CLOB INCLUDING XMLDECLARATION ) AS Ergebnis FROM LATERAL (SELECT XMLELEMENT( NAME "Kunde", XMLATTRIBUTES( K.Kunde_Nr AS "Kunde_Nr", K.Anrede AS "Anrede" , K.Vorname AS "Vorname" , K.Zuname AS "Zuname" , K.Strasse AS "Strasse" , K.PLZ AS "PLZ" , K.Ort AS "Ort" ), XMLELEMENT( NAME "Rechnungen", (SELECT XMLAGG(XML_Rechnung.XML_Spalte_Rechnung) FROM LATERAL (SELECT XMLELEMENT( NAME "Rechnung", XMLATTRIBUTES( R.Rechnung_Nr AS "Rechnung_Nr", R.Kunde_Nr AS "Kunde_Nr" , R.Datum AS "Datum" , R.Betrag AS "Betrag" ), (SELECT XMLELEMENT( NAME "Positionen", XMLAGG( XML_Position.XML_Spalte_Position ) ) FROM LATERAL (SELECT XMLELEMENT( NAME "Position", XMLATTRIBUTES ( P.Rechnung_Nr AS "Rechnung_Nr", P.Artikel_Nr AS "Artikel_Nr" , P.Anzahl AS "Anzahl" ), (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) 85ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ ȱ XMLELEMENT( NAME "Artikel", XMLATTRIBUTES( A.Artikel_Nr AS "Artikel_Nr", A.Name AS "Name" , A.Preis AS "Preis" ) ) ȱ ȱ ȱ ȱ ȱ ȱ ) FROM ȱ Position P INNER JOIN Artikel A ON P.Artikel_Nr = A.Artikel_Nr WHERE P.Rechnung_Nr = R.Rechnung_Nr ) AS XML_Position (XML_Spalte_Position) ȱ ȱ ȱ ȱ ) ) FROM Rechnung AS R WHERE R.Kunde_Nr = K.Kunde_Nr ) AS XML_Rechnung (XML_Spalte_Rechnung) ȱ ȱ ȱ ) OPTION EMPTY ON NULL ȱ ) ) FROM Kunde AS K ) AS XML_Kunde (XML_Spalte_Kunde) ȱ ȱ ȱ ; Programmȱ36:ȱXMLȬDokumentȱundȱRDBDȱKundenrechnungenȱattributzentriertȱ 86ȱ (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) 4.13ȱȱPublikationȱRechnungenȱihreȱKundenȱundȱArtikelȱ 4.13 Publikation Rechnungen ihre Kunden und Artikel ImȱfolgendenȱBeispielȱwirdȱdasȱZusammenwirkenȱderȱSQL/XMLȬSprachmittelȱanȱ einerȱ weiterenȱ Aufgabenstellungȱ untersuchtȱ undȱ demonstriert.ȱ Dieȱ Aufgabeȱ beȬ stehtȱdarin,ȱdassȱalleȱRechnungenȱmitȱderenȱKundenȱundȱdenȱhiervonȱbetroffenenȱ Artikelnȱ inȱ einemȱ XMLȬDokumentȱ ausgegebenȱ werden.ȱ Inȱ jedemȱ RechnungsȬ,ȱ KundenȬ,ȱPositionsȬȱundȱArtikelȬXMLȬElementȱsollȱzunächstȱeinȱXMLȬKommentarȱ stehen.ȱDieserȱsollȱdieȱimȱXMLȬElementȱenthaltenenȱInformationenȱkurzȱundȱeinȬ fachȱ lesbarȱ zusammenfassen.ȱ Weiterhinȱ sollȱ esȱ dreiȱ Namensräumeȱ geben,ȱ denȱ NamensraumȱdesȱKundenvokabulars,ȱdenȱdesȱRechnungsvokabularsȱundȱdenȱdesȱ Artikelvokabulars.ȱ Dasȱ zuȱ erzeugendeȱ XMLȬDokumentȱ sollȱ imȱ gemischtenȱ EntȬ wicklungsansatzȱentworfenȱundȱimplementiertȱwerden.ȱHierbeiȱsollenȱdieȱPrimärȬ schlüsselȱ alsȱ XMLȬAttributeȱ undȱ dieȱ Nichtschlüsselȱ alsȱ XMLȬElementeȱ imȱ DokuȬ mentȱerscheinen.ȱ Dieȱ Architekturȱ desȱ zuȱ erzeugendenȱ XMLȬDokumentesȱ istȱ inȱ derȱ folgendenȱ Abbildungȱ31:ȱXMLȬSchemaȬModellȱRechnungenȱihreȱKundenȱundȱArtikelȱdargestellt.ȱ BeiȱderȱDarstellungȱmussteȱderȱbeschränkteȱPlatzȱaufȱeinerȱBuchseiteȱberücksichȬ tigtȱwerden.ȱȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ 87ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ Abbildungȱ31:ȱXMLȬSchemaȬModellȱRechnungenȱihreȱKundenȱundȱArtikelȱ 88ȱ 4.13ȱȱPublikationȱRechnungenȱihreȱKundenȱundȱArtikelȱ DieȱImplementierungȱdesȱXMLȬSchemaȬModellsȱmitȱSprachmittelnȱvonȱSQL/XMLȱ zeigtȱdasȱfolgendeȱProgrammȱ37.ȱ ȱ SELECT ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ XMLSERIALIZE( CONTENT XMLDOCUMENT( XMLELEMENT( NAME "Rechnungen", XMLNAMESPACES( 'http://www.Alfred-Moos.de/Kunde' AS "Ku", 'http://www.Alfred-Moos.de/Artikel' AS "Ar", DEFAULT 'http://www.Alfred-Moos.de/Rechnung' ), XMLAGG(XML_Rechnung.XML_Spalte_Rechnung ) ) ) AS CLOB INCLUDING XMLDECLARATION ) AS Ergebnis FROM LATERAL (SELECT XMLELEMENT( NAME "Rechnung", XMLNAMESPACES( 'http://www.Alfred-Moos.de/Kunde' AS "Ku", 'http://www.Alfred-Moos.de/Artikel' AS "Ar", DEFAULT 'http://www.Alfred-Moos.de/Rechnung' ), XMLATTRIBUTES(R.Rechnung_Nr AS "Rechnung_Nr" ), XMLCOMMENT( 'Daten von Rechnung ' || R.Rechnung_Nr || ': ' || R.Kunde_Nr || ', ' || CHAR(R.Datum, EUR) || ', ' || CHAR(R.Betrag) ), XMLFOREST(R.Kunde_Nr AS "Ku:Kunde_Nr", R.Datum AS "Datum" , R.Betrag AS "Betrag" ), (SELECT XMLELEMENT( NAME "Ku:Kunde", XMLATTRIBUTES( K.Kunde_Nr AS "Ku:Kunde_Nr" ), XMLCOMMENT( 'Daten von Kunde ' || K.Kunde_Nr || ': ' || K.Anrede || ', ' || TRIM(K.Vorname) || ', ' || TRIM(K.Zuname) || ', ' || TRIM(K.Strasse) || ', ' || K.PLZ || ', ' || TRIM(K.Ort) ), (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) ȱ ȱ ȱ 89ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ 90ȱ XMLFOREST( K.Anrede K.Vorname K.Zuname K.Strasse K.PLZ K.Ort ) AS AS AS AS AS AS "Ku:Anrede" , "Ku:Vorname", "Ku:Zuname" , "Ku:Strasse", "Ku:PLZ" , "Ku:Ort" ) FROM Kunde K WHERE K.Kunde_Nr = R.Kunde_Nr ), XMLELEMENT( NAME "Positionen", (SELECT XMLAGG( XML_Position.XML_Spalte_Position ) FROM LATERAL (SELECT XMLELEMENT( NAME "Position", XMLATTRIBUTES( P.Rechnung_Nr AS "Rechnung_Nr", P.Artikel_Nr AS "Ar:Artikel_Nr" ), XMLCOMMENT( 'Daten von Position ' || P.Rechnung_Nr || ' ' || P.Artikel_Nr || ': ' || CHAR(P.Anzahl) ), XMLFOREST( P.Anzahl AS "Anzahl" ), (SELECT XMLELEMENT( NAME "Ar:Artikel", XMLATTRIBUTES( A.Artikel_Nr AS "Ar:Artikel_Nr" ), XMLCOMMENT( 'Daten von Artikel ' || A.Artikel_Nr || ': ' || TRIM(A.Name) || ', ' || CHAR(A.Preis) ), (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) 4.13ȱȱPublikationȱRechnungenȱihreȱKundenȱundȱArtikelȱ XMLFOREST( A.Name AS "Ar:Name", A.Preis AS "Ar:Preis" ) ) FROM Artikel A WHERE A.Artikel_Nr = P.Artikel_Nr ) ) FROM Position P WHERE P.Rechnung_Nr = R.Rechnung_Nr ) AS XML_Position (XML_Spalte_Position) ) ) ) FROM Rechnung R ) AS XML_Rechnung (XML_Spalte_Rechnung) ; (97) (98) (99) (100) (101) (102) (103) (104) (105) (106) (107) (108) (109) (110) (111) (112) (113) (114) (115) Programmȱ37:ȱRechnungenȱihreȱKundenȱundȱArtikelȱ Dieȱ Deklarationȱ derȱ Namensräumeȱ mussȱ zweimalȱ erfolgen.ȱ Dasȱ eineȱ Mal,ȱ damitȱ inȱ dasȱ XMLȬElementȱ Rechnungenȱ dieȱ Namensraumdeklarationenȱ XMLȬkonformȱ eingefügtȱwerden,ȱsieheȱProgrammzeileȱ(4)ȱbisȱ(8).ȱDasȱzweiteȱMal,ȱdamitȱdieȱNaȬ mensraumpräfixeȱ imȱ Sichtbarkeitsbereichȱ derȱ weiterenȱ SQL/XMLȬFunktionsaufȬ rufeȱliegen,ȱsieheȱProgrammzeileȱ(16)ȱbisȱ(20).ȱ Dasȱ schemakonformeȱ XMLȬDokument,ȱ dasȱ vonȱ obigemȱ Programmȱ generiertȱ wurde,ȱsiehtȱdannȱwieȱfolgtȱaus.ȱLediglichȱdieȱRechnungȱR003ȱwirdȱuntenȱaufgeȬ listetȱumȱdieȱLängeȱdesȱDokumentesȱzuȱreduzieren.ȱDieȱanderenȱRechnungenȱsindȱ kollabiert.ȱ Ergebnis - + + Herr Georg Mayer 91ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ Neckarstr. 1 69123 Heidelberg Computer 000005000.00 4.14 Übungen GehenȱSieȱbeiȱderȱLösungȱderȱfolgendenȱÜbungenȱarchitekturgetriebenȱvor,ȱindemȱ SieȱzuerstȱdasȱModellȱdesȱzuȱgenerierendenȱXMLȬDokumentesȱerstellenȱundȱerstȱ dannȱdieȱImplementierungȱmitȱSQL/XMLȱvornehmen.ȱ JedesȱXMLȬDokumentȱmussȱmitȱeinerȱXMLȬDeklarationsanweisungȱbeginnen.ȱ 1) GebenȱSieȱdenȱArtikelȱA001ȱinȱelementzentrierterȱDarstellungȱaus.ȱȱ 2) GebenȱSieȱalleȱArtikelȱinȱelementzentrierterȱDarstellungȱaus.ȱ 3) GebenȱSieȱdenȱArtikelȱA001ȱinȱattributzentrierterȱDarstellungȱaus.ȱ 4) GebenȱSieȱalleȱArtikelȱinȱattributzentrierterȱDarstellungȱaus.ȱ 5) Gebenȱ Sieȱ alleȱ Artikelȱ inȱ gemischterȱ Darstellungȱ aus.ȱ Dieȱ Artikelnummerȱ istȱ Attribut.ȱ 6) Gebenȱ Sieȱ denȱ Artikelȱ A001ȱ undȱ dieȱ vonȱ ihmȱ abhängigenȱ Positionenȱ inȱ eleȬ mentzentrierterȱDarstellungȱaus.ȱ 7) GebenȱSieȱalleȱArtikelȱundȱdieȱvomȱjeweiligenȱArtikelȱabhängigenȱPositionenȱ inȱelementzentrierterȱDarstellungȱaus.ȱ 8) GebenȱSieȱdenȱArtikelȱA001,ȱdieȱvonȱihmȱabhängigenȱPositionenȱundȱdieȱvonȱ derȱjeweiligenȱPositionȱabhängigeȱRechnungȱinȱelementzentrierterȱDarstellungȱ aus.ȱ 9) GebenȱSieȱalleȱArtikel,ȱdieȱvonȱdiesenȱabhängigenȱPositionenȱundȱdieȱvonȱderȱ jeweiligenȱPositionȱabhängigeȱRechnungȱinȱelementzentrierterȱDarstellungȱaus.ȱ 10) GebenȱSieȱdenȱArtikelȱA001,ȱdieȱvonȱihmȱabhängigenȱPositionenȱundȱdieȱvonȱ derȱ jeweiligenȱ Positionȱ abhängigeȱ Rechnungȱ undȱ denȱ vonȱ derȱ jeweiligenȱ RechnungȱabhängigenȱKundenȱinȱelementzentrierterȱDarstellungȱaus.ȱ 92ȱ 4.14ȱȱÜbungenȱ 11) GebenȱSieȱalleȱArtikel,ȱdieȱvonȱihnenȱabhängigenȱPositionenȱundȱdieȱvonȱderȱ jeweiligenȱ Positionȱ abhängigeȱ Rechnungȱ undȱ denȱ vonȱ derȱ jeweiligenȱ RechȬ nungȱabhängigenȱKundenȱinȱelementzentrierterȱDarstellungȱaus.ȱ 12) GebenȱSieȱdieȱRechnungȱR001,ȱihrenȱKunden,ȱihreȱPositionenȱundȱderenȱArtiȬ kelȱinȱelementzentrierterȱFormȱaus.ȱ 13) GebenȱSieȱdieȱRechnungȱR001,ȱihrenȱKunden,ȱihreȱPositionenȱundȱderenȱArtiȬ kelȱinȱattributzentrierterȱFormȱaus.ȱ 14) GebenȱSieȱdieȱRechnungȱR001,ȱihrenȱKunden,ȱihreȱPositionenȱundȱderenȱArtiȬ kelȱ inȱ gemischterȱ Formȱ aus.ȱ Dieȱ jeweiligenȱ Schlüsselȱ –ȱ PrimärȬȱ undȱ FremdȬ schlüsselȱ–ȱsollenȱAttributeȱsein.ȱ 15) Gebenȱ Sieȱ denȱ Kundenȱ K001ȱ mitȱ seinenȱ Rechnungen,ȱ derenȱ Positionenȱ undȱ denȱbetroffenenȱArtikelnȱinȱelementzentrierterȱFormȱaus.ȱZuȱBeginnȱeinesȱjeȬ denȱElementesȱistȱeinȱKommentarȱeinzufügen,ȱderȱdenȱElementwertȱzusätzlichȱ alsȱKommentarȱangibt.ȱ 16) Gebenȱ Sieȱ denȱ Kundenȱ K001ȱ mitȱ seinenȱ Rechnungen,ȱ derenȱ Positionenȱ undȱ denȱ betroffenenȱ Artikelnȱ inȱ elementzentrierterȱ Formȱ aus.ȱ Dieȱ XMLȬ spezifischenȱ Vokabelnȱ derȱ Kundendatenȱ stammenȱ ausȱ demȱ Namensraumȱ http://www.AlfredȬMoos.de/Kunde.ȱ Dieȱ Vokabelnȱ derȱ Rechnungsdatenȱ sindȱ imȱ Namensraumȱ http://www.AlfredȬMoos.de/Rechnungȱ definiert.ȱ Dieȱ VokaȬ belnȱ derȱ PositionsȬȱ undȱ Artikeldatenȱ stammenȱ ausȱ denȱ Namensräumenȱ http://www.AlfredȬMoos.de/Positionȱundȱhttp://www.AlfredȬMoos.de/Artikel.ȱ 17) GebenȱSieȱalleȱKundenȱmitȱihrenȱRechnungen,ȱderenȱPositionenȱundȱdenȱ beȬ troffenenȱArtikelnȱinȱelementzentrierterȱFormȱaus.ȱDieȱXMLȬspezifischenȱVoȬ kabelnȱderȱKundendatenȱstammenȱausȱdemȱNamensraumȱhttp://www.AlfredȬ Moos.de/Kunde.ȱ Dieȱ Vokabelnȱ derȱ Rechnungsdatenȱ sindȱ imȱ Namensraumȱ http://www.AlfredȬMoos.de/Rechnungȱ definiert.ȱ Dieȱ Vokabelnȱderȱ PositionsȬȱ undȱ Artikeldatenȱ stammenȱ ausȱ denȱ Namensräumenȱ http://www.AlfredȬ Moos.de/Positionȱundȱhttp://www.AlfredȬMoos.de/Artikel.ȱ 18) GebenȱSieȱalleȱKundenȱmitȱihrenȱRechnungen,ȱderenȱPositionenȱundȱdenȱbeȬ troffenenȱ Artikelnȱ inȱ gemischterȱ Formȱ aus.ȱ Dieȱ XMLȬspezifischenȱ Vokabelnȱ derȱ Kundendatenȱ stammenȱ ausȱ demȱ Namensraumȱ http://www.AlfredȬ Moos.de/Kunde.ȱ Dieȱ Vokabelnȱ derȱ Rechnungsdatenȱ sindȱ imȱ Namensraumȱ http://www.AlfredȬMoos.de/Rechnungȱ definiert.ȱ Dieȱ Vokabelnȱ derȱ PositionsȬȱ undȱ Artikeldatenȱ stammenȱ ausȱ denȱ Namensräumenȱ http://www.AlfredȬ Moos.de/Positionȱundȱhttp://www.AlfredȬMoos.de/Artikel.ȱ 19) GebenȱSieȱalleȱKundenȱmitȱihrenȱRechnungen,ȱderenȱPositionenȱundȱdenȱbeȬ troffenenȱ Artikelnȱ inȱ elementzentrierterȱ Formȱ aus.ȱ Kommentierenȱ Sieȱ jedesȱ XMLȬElementȱ mitȱ einemȱ inȱ ihmȱ stehendenȱ XMLȬKommentar.ȱ Versehenȱ Sieȱ dasȱWurzelelementȱmitȱeinemȱVerarbeitungshinweisȱfürȱdieȱXMLȬParser.ȱ 93ȱ 4ȱȱPublikationȱrelationalerȱDatenȱ 20) Beschreibenȱ Sie,ȱ wasȱ manȱ inȱ XMLȱ unterȱ einerȱ Entitätȱ (entity)ȱ versteht.ȱ UntersuchenȱsieȱderenȱVerwendungȱanȱeinemȱBeispiel,ȱdasȱSieȱvomȱInternetȬ ExplorerȱderȱFirmaȱMicrosoftȱoderȱeinemȱvergleichbarenȱWerkzeugȱdarstellenȱ lassen.ȱ ȱ 94ȱ 5 XML-Dokumente relational speichern InȱdiesemȱKapitelȱlernenȱSie,ȱ – wieȱeineȱTabelleȱmitȱSpaltenȱvomȱDatentypȱXMLȱangelegtȱwirdȱ – wieȱeinȱXMLȬDokumentȱalsȱeinȱrelationalerȱXMLȬWertȱgespeichertȱwird.ȱ Mitȱ Ihremȱ erworbenenȱ Wissenȱ könnenȱ Sieȱ sodannȱ beliebigȱ komplexeȱ XMLȬ DokumenteȱalsȱGanzesȱspeichern.ȱ 5.1 Spalte vom Datentyp XML vereinbaren Dieȱ Vereinbarungȱ einerȱ relationalenȱ Tabelleȱ mitȱ Spaltenȱ vomȱ Datentypȱ XMLȱ istȱ sehrȱeinfach.ȱZurȱDemonstrationȱvereinbarenȱwirȱdieȱTabelleȱXML_Kundeȱmitȱderȱ herkömmlichenȱPrimärschlüsselspalteȱKunde_NrȱundȱeinerȱSpalteȱmitȱdemȱNamenȱ XML_Dokument.ȱ Kunde_Nrȱ sollȱ wiederȱ vomȱ Datentypȱ CHARȱ (4)ȱ sein.ȱ Dieȱ Spalteȱ XML_DokumentȱistȱvomȱDatentypȱXML.ȱȱ Eineȱ XMLȬSpalteȱ kannȱ wederȱ eineȱ PrimärȬȱ nochȱ eineȱ Fremdschlüsselspalteȱ sein.ȱ AuchȱkannȱfürȱeineȱXMLȬSpalteȱkeinȱDefaultȬWertȱangegebenȱwerden.ȱEineȱXMLȬ Spalteȱ hatȱ keineȱ Größenbegrenzung.ȱ Wirdȱ einȱ XMLȬWertȱ inȱ einenȱ CLOBȬWertȱ konvertiert,ȱ kannȱ dieserȱ Ergebniswertȱ inȱ DB2ȱ Versionȱ 9.5ȱ jedochȱ nurȱ zweiȱ GigaȬ byteȱ Platzȱ belegen.ȱ Hiermitȱ istȱindirektȱ eineȱ Größenbegrenzungȱgegeben.ȱ Dieȱ inȬ ternenȱ XMLȬWerteȱ werdenȱ nichtȱ imȱ relationalenȱ Tabellenspeicherȱ sondernȱ imȱ XMLȬSpeicherȱabgelegt,ȱsieheȱauchȱAbbildungȱ16:ȱStrukturȱdesȱDatenbanksystemsȱ DB2ȱV9.5.ȱ Imȱ Zugeȱ derȱ vonȱ unsȱ praktiziertenȱ architekturgetriebenenȱ Softwareentwicklungȱ erstellenȱ wirȱ zunächstȱ dasȱ Modellȱ derȱ Tabelleȱ XML_Kundeȱ bevorȱ wirȱ sieȱ mitȱ SQL/XMLȱimplementieren.ȱ ȱ ȱ ȱ ȱ «table» XML_Kunde Kunde_Nr : CHAR(4) XML_Dokument : XML ȱ Abbildungȱ32:ȱRelationstypȱmitȱeinerȱSpalteȱvomȱDatentypȱXMLȱ ȱ 95 5ȱȱXMLȬDokumenteȱrelationalȱspeichernȱ Dieȱ Implementierungȱ derȱ Relationȱ XML_Kundeȱ istȱ sehrȱ einfach.ȱ Eineȱ Spalteȱ vomȱ Datentypȱ XMLȱ wirdȱ hierbeiȱ lediglichȱ mitȱ demȱ Datentypbezeichnerȱ XMLȱ ausgeȬ zeichnet,ȱsieheȱProgrammzeileȱ(5).ȱ CREATE TABLE XML_Kunde (Kunde_Nr CHAR (4) NOT NULL PRIMARY KEY, XML_Dokument XML ) ; (1) (2) (3) (4) (5) (6) (7) Programmȱ38:ȱVereinbarungȱeinerȱTabelleȱmitȱeinerȱXMLȬSpalteȱ 5.2 XML-Daten in Spalte vom Datentyp XML laden Inȱ eineȱ Spalteȱ vomȱ Datentypȱ XMLȱ könnenȱ nurȱ wohlgeformteȱ XMLȬDokumenteȱ gespeichertȱwerden.ȱEinȱsolchesȱDokumentȱwirdȱinternȱcodiertȱalsȱeinȱDatenbaumȱ inȱGestaltȱeinesȱXDMȬObjektesȱ(XQueryȱDataȱModelȬObjekt)ȱhinterlegt.ȱExternȱkannȱ dasȱ XMLȬDokumentȱ inȱ seinerȱ zeichenartigenȱ Gestaltȱ abgeliefertȱ werden.ȱ Imȱ folȬ gendenȱBeispielȱladenȱwirȱeinȱXMLȬDokument,ȱdasȱdenȱKundenȱK001ȱinȱeinfachsȬ terȱFormȱbeschreibt.ȱDasȱDokumentexemplarȱsiehtȱinȱUMLȱwieȱfolgtȱaus.ȱ ȱ ȱ ȱ ȱ «Document» K001:XML_Dokument 1 ȱ «Element» Kunde ȱ Kunde_Nr = K001 ȱ 1 «Element» Name 1 «Element» Vorname 1 «Element» Zuname 1 1 «Textk» Hugo «Textk» Mueller ȱ Abbildungȱ33:ȱDokumentenexemplarȱüberȱKundeȱK001ȱ ImȱfolgendenȱProgrammȱwirdȱdasȱzuȱladendeȱXMLȬDokumentȱalsȱZeichenkettenȬ ausdruckȱ angeliefert.ȱ Erȱ erstrecktȱ sichȱ vonȱ derȱ Programmzeileȱ (4)ȱ bisȱ (9).ȱ Damitȱ dasȱ XMLȬDokumentȱ gutȱ lesbarȱ ist,ȱ sindȱ seineȱ Bestandteileȱ ästhetischȱ eingerücktȱ undȱuntereinanderȱgeschrieben.ȱȱ VomȱDatenbankprozessorȱwirdȱdiesesȱzeichenartigeȱXMLȬDokumentȱimplizitȱaufȱ Gültigkeitȱgeprüftȱ(engl.ȱtoȱparse,ȱtoȱvalidate),ȱinȱseineȱinternȱcodierteȱXDMȬFormȱ konvertiertȱundȱinȱdieȱSpalteȱXML_Dokumentȱgespeichert.ȱ ȱ ȱ 96ȱ 5.2ȱȱXMLȬDatenȱinȱSpalteȱvomȱDatentypȱXMLȱladenȱ INSERT INTO XML_Kunde (Kunde_Nr, XML_Dokument) VALUES ('K001', ' ' ' Hugo ' Mueller ' '' ) ; ' ' ' ' ' || || || || || (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) Programmȱ39:ȱLadeprogrammȱfürȱXMLȬDokumentȱdesȱKundenȱK001ȱmitȱimpliziterȱGülȬ tigkeitsprüfungȱ Dieȱ Prüfungȱ aufȱ Gültigkeitȱ kannȱ auchȱ mitȱ derȱ eingebautenȱ SQL/XMLȬFunktionȱ XMLPARSE()ȱexplizitȱdurchgeführtȱwerden.ȱ DieȱSyntaxȱvonȱXMLPARSE()ȱlautetȱfolgendermaßen.ȱ ȱ ȱ ȱ XMLPARSE( DOCUMENT Zeichenkettenausdruck {STRIP WHITESPACE | PRESERVE WHITESPACE} ) Syntaxȱ15:ȱSQL/XMLȬFunktionȱXMLPARSE()ȱ Dieȱ Syntaxȱ besagt,ȱ dassȱ dasȱ XMLȬDokumentȱ alsȱ Zeichenkettenausdruckȱ angelieȬ fertȱ werdenȱ muss.ȱ Dieȱ Notationskonstanteȱ DOCUMENTȱ erinnertȱ daran,ȱ dassȱ esȱ wohlgeformtȱseinȱmuss.ȱDieȱsoȱgenanntenȱwhiteȱspaces,ȱdasȱsindȱȱ – – – – mehrereȱLeerzeichenȱnacheinanderȱ TabulatorȬSteuerzeichenȱ WagenrücklaufȬSteuerzeichenȱundȱ NeueȬZeileȬSteuerzeichenȱ werdenȱ standardmäßigȱdurchȱ einȱLeerzeichenȱ ersetztȱ (STRIPȱ WHITESPACE).ȱ Istȱ dieseȱ Dienstleistungȱ nichtȱ gewünscht,ȱ soȱ mussȱ manȱ dieȱ Klauselȱ RESERVEȱ WHIȬ TESPACEȱalternativȱeinsetzten.ȱ 97ȱ 5ȱȱXMLȬDokumenteȱrelationalȱspeichernȱ DasȱLadeprogrammȱmitȱderȱFunktionȱXMLPARSE()ȱsiehtȱwieȱfolgtȱaus.ȱ INSERT INTO XML_Kunde (Kunde_Nr, XML_Dokument) VALUES ('K001', XMLPARSE( DOCUMENT ' ' ' Hugo ' Mueller ' '' ) ) ; ' ' ' ' ' || || || || || (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) Programmȱ40:ȱLadeprogrammȱfürȱXMLȬDokumentȱdesȱKundenȱK001ȱmitȱexpliziterȱGülȬ tigkeitsprüfungȱ Dasȱ geladeneȱ XMLȬDokumentȱ kannȱ sehrȱ einfachȱ ausgegebenȱ werden.ȱ Amȱ einȬ fachstenȱ istȱ dieȱ impliziteȱ Serialisierung.ȱ Hierbeiȱ wirdȱ lediglichȱ derȱ Nameȱ derȱ XMLȬSpalteȱ inȱ derȱ Projektionsklauselȱ desȱ Befehlsȱ SELECTȱ angegeben,ȱ sieheȱ ProȬ grammzeileȱ(1)ȱvonȱProgrammȱ41.ȱȱ Zumȱ selbenȱ Ergebnisȱ führtȱ derȱ Einsatzȱ derȱ eingebautenȱ SQL/XMLȬFunktionȱ XMLSERIALIZE(),ȱ mitȱ derȱ dieȱ gewohnteȱ expliziteȱ Serialisierungȱ inȱ einenȱ geȬ wünschtenȱtextartigenȱexternenȱDatentypȱgesteuertȱwird,ȱsieheȱZeileȱ(5)ȱbisȱ(7).ȱ SELECT XML_Dokument FROM XML_Kunde ; SELECT XMLSERIALIZE( XML_Dokument AS CLOB ) FROM XML_Kunde ; Programmȱ41:ȱImpliziteȱundȱexpliziteȱSerialisierungȱdesȱXMLȬWertes Ergebnis - Hugo Mueller ȱ 98ȱ (1) (2) (3) (4) (5) (6) (7) (8) (9) 5.3ȱȱKundendatenȱvomȱDatentypȱXMLȱladenȱ Auchȱ dieȱ eingebauteȱ SQL/XMLȬFunktionȱ XMLCAST()ȱ kannȱ zurȱ Konvertierungȱ desȱ XMLȬWertesȱ angewendetȱ werden.ȱ XMLCAST()ȱ entnimmtȱ demȱ XMLȬDokuȬ mentȱ jedochȱ nurȱ dieȱ Werteȱ derȱ XMLȬElementeȱ undȱ fügtȱ sieȱ zuȱ einemȱ ZeichenȬ kettenwertȱzusammen.ȱ ȱ SELECT XMLCAST(XML_Dokument AS CHAR(15)) AS Ergebnis FROM XML_Kunde ; (1) (2) (3) Programmȱ42:ȱKonvertierungȱdesȱXMLȬWertesȱinȱeinenȱZeichenkettenwertȱ Ergebnis ERGEBNIS ––––––––––––––– HugoMueller 5.3 Kundendaten vom Datentyp XML laden ImȱvorherigenȱBeispielȱhabenȱwirȱeinȱsehrȱeinfachesȱXMLȬDokumentȱinȱdieȱSpalteȱ XML_Dokumentȱ geladen.ȱ Hierbeiȱ wurdeȱ dieȱ grundsätzlicheȱ Funktionalitätȱ vonȱ SQL/XMLȱ fürȱ dasȱ Ladenȱ vonȱ XMLȬDokumentenȱ geklärt.ȱ Imȱ nunȱ folgendenȱ BeiȬ spielȱwerdenȱwirȱdasȱXMLȬDokumentȱinȱdieȱSpalteȱXML_Dokumentȱladen,ȱdasȱdenȱ Kundenȱ K001,ȱ Hugoȱ Müller,ȱ beschreibt.ȱ Seinȱ XMLȬSchemaȬModellȱ basiertȱ aufȱ Abbildungȱ 29:ȱ XMLȬDokumentȱ undȱ RDBDȱ Kundenrechnungen.ȱ Dasȱ dortigeȱ WurȬ zelelementȱ Alle_Kundenȱ wirdȱ weggelassen.ȱ Dasȱ neueȱ Wurzelelementȱ istȱ sodannȱ dasȱXMLȬElementȱKunde,ȱsieheȱAbbildungȱ34.ȱȱ DasȱXMLȬDokumentȱgenerierenȱwirȱausȱdenȱbekanntenȱrelationalenȱDaten.ȱDaȱdasȱ ErgebnisȱdesȱGenerierungsprozessesȱnichtȱalsȱeinȱexternȱlesbares,ȱzeichenförmigesȱ XMLȬDokumentȱ benötigtȱ wird,ȱ sondernȱ nurȱ inȱ seinerȱ internȱ codiertenȱ Formȱ inȱ GestaltȱeinesȱXDMȬObjektes,ȱverzichtenȱwirȱaufȱdieȱSerialisierung.ȱDasȱinternȱcoȬ dierteȱXDMȬObjektȱspeichernȱwirȱsomitȱunmittelbarȱalsȱXDMȬBaumȱinȱdieȱSpalteȱ XML_Dokument.ȱ Wegenȱ derȱ hohenȱ strukturellenȱ Ähnlichkeitȱ desȱ neuenȱ XMLȬ SchemasȱmitȱdemȱSchemaȱaufȱSeiteȱ79ȱhatȱauchȱdasȱerforderlicheȱLadeprogrammȱ großeȱ Ähnlichkeitenȱ mitȱ demȱ Publikationsprogrammȱ Programmȱ 35:ȱ KundenrechȬ nungen.ȱȱ ȱ ȱ ȱ ȱ 99ȱ 5ȱȱXMLȬDokumenteȱrelationalȱspeichernȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ Abbildungȱ34:ȱXMLȬSchemaȬModellȱKundenrechnungȱ 100ȱ 5.3ȱȱKundendatenȱvomȱDatentypȱXMLȱladenȱ Dasȱ folgendeȱ SQL/XMLȬProgrammȱ lädtȱ dasȱ XMLȬDokumentȱ inȱ seinerȱ internenȱ XDMȬFormȱinȱdieȱSpalteȱXML_DokumentȱderȱTabelleȱXML_Kunde.ȱAlsȱerstesȱProȬ jektionselementȱ inȱ derȱ Programmzeileȱ (4)ȱ wirdȱ derȱ Primärschlüsselwertȱ K001ȱ anȱ denȱ Ladeprozessȱ übergeben.ȱ Ihmȱ folgtȱ dasȱ XMLȬDokumentȱ inȱ seinerȱ internenȱ FormȱinȱGestaltȱeinesȱXDMȬBaumes,ȱderȱabȱProgrammzeileȱ(5)ȱgeneriertȱwird.ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ INSERT INTO XML_Kunde (Kunde_Nr, XML_Dokument) SELECT 'K001', XMLDOCUMENT( XML_Kunde.XML_Spalte_Kunde ) FROM LATERAL (SELECT XMLELEMENT( NAME "Kunde", XMLFOREST( K.Kunde_Nr AS "Kunde_Nr", K.Anrede AS "Anrede" , K.Vorname AS "Vorname" , K.Zuname AS "Zuname" , K.Strasse AS "Strasse" , K.PLZ AS "PLZ" , K.Ort AS "Ort" ), XMLELEMENT( NAME "Rechnungen", (SELECT XMLAGG(XML_Rechnung.XML_Spalte_Rechnung) FROM LATERAL (SELECT XMLELEMENT( NAME "Rechnung", XMLFOREST( R.Rechnung_Nr AS "Rechnung_Nr", R.Kunde_Nr AS "Kunde_Nr" , R.Datum AS "Datum" , R.Betrag AS "Betrag" ), (SELECT XMLELEMENT( NAME "Positionen", XMLAGG( XML_Position.XML_Spalte_Position) ) FROM LATERAL (SELECT XMLELEMENT( NAME "Position", XMLFOREST ( P.Rechnung_Nr AS "Rechnung_Nr", P.Artikel_Nr AS "Artikel_Nr" , P.Anzahl AS "Anzahl" ), (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) ȱ ȱ 101ȱ 5ȱȱXMLȬDokumenteȱrelationalȱspeichernȱ XMLELEMENT( NAME "Artikel", XMLFOREST( A.Artikel_Nr AS "Artikel_Nr", A.Name AS "Name" , A.Preis AS "Preis" ) ) ȱ ȱ ȱ ȱ ȱ ȱ ȱ ) FROM Position P INNER JOIN Artikel A ON P.Artikel_Nr = A.Artikel_Nr WHERE P.Rechnung_Nr = R.Rechnung_Nr ) AS XML_Position (XML_Spalte_Position) ȱ ȱ ȱ ȱ ȱ ) ) FROM Rechnung AS R WHERE R.Kunde_Nr = K.Kunde_Nr ) AS XML_Rechnung (XML_Spalte_Rechnung) ȱ ȱ ȱ ) OPTION EMPTY ON NULL ȱ ) ) FROM Kunde AS K WHERE K.Kunde_Nr = 'K001' ) AS XML_Kunde (XML_Spalte_Kunde) ȱ ȱ ȱ ; (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) Programmȱ43:ȱGenerierungȱdesȱXMLȬDokumentesȱKundenrechnungȱfürȱKundeȱK001ȱ Inȱ Programmzeileȱ (78)ȱ werdenȱ dieȱ Datenȱ fürȱ denȱ Kundenȱ K001ȱ ausȱ derȱ Tabelleȱ Kundeȱselektiert.ȱ ImȱfolgendenȱProgrammȱwerdenȱdieȱgeladenenȱDatenȱdesȱXMLȬDokumentesȱexȬ plizitȱ serialisiertȱ undȱ inȱZeichenformȱausgegeben.ȱ Dabeiȱ wirdȱ nochȱ inȱ derȱerstenȱ ZeileȱdesȱXMLȬDokumentesȱdieȱXMLȬDeklarationȱgeneriert,ȱsieheȱProgrammzeileȱ (3).ȱ SELECT XMLSERIALIZE( CONTENT XML_Dokument AS CLOB INCLUDING XMLDECLARATION ) FROM XML_Kunde WHERE Kunde_Nr = 'K001' ; Programmȱ44:ȱAusgabeȱdesȱgeladenenȱXMLȬDokumentesȱinȱZeichenform 102ȱ (1) (2) (3) (4) (5) (6) (7) 5.4ȱȱÜbungenȱ Ergebnis - K001 Herr Hugo Mueller Gartenstr. 4a 69123 Heidelberg R001 K001 2008-04-04 000013000.00 R001 A001 00002. A001 Computer 000005000.00 R001 A002 00003. A002 Drucker 000001000.00 + 5.4 Übungen Gehenȱ Sieȱ beiȱ derȱ Lösungȱ derȱ folgendenȱ Übungȱ architekturgetriebenȱ vor,ȱ indemȱ Sieȱ zuerstȱ dasȱ Modellȱ desȱ XMLȬDokumentesȱ erstellenȱ undȱ erstȱ dannȱ dieȱ ImpleȬ mentierungȱ mitȱ SQL/XMLȱ vornehmen.ȱ Jedesȱ XMLȬDokumentȱ mussȱ mitȱ einerȱ XMLȬDeklarationsanweisungȱbeginnen.ȱ 1) Ladenȱ Sieȱ alleȱ Artikelȱ inȱ elementzentrierterȱ Darstellungȱ inȱ dieȱ Spalteȱ DokuȬ mentȱderȱTabelleȱArtikel_XML.ȱ ȱ 103ȱ 6 XML-Daten manipulieren – XQuery InȱdiesemȱKapitelȱlernenȱSieȱ – dieȱSprachkonzepteȱvonȱXQueryȱ – denȱEinsatzȱderȱSprachelementeȱvonȱXQueryȱundȱ – wieȱDatenȱinȱeinemȱXMLȬDokumentȱgelesenȱwerden.ȱ Mitȱ Ihremȱ erworbenenȱ Wissenȱ könnenȱ Sieȱ sodannȱ inȱ beliebigȱ komplexenȱ XMLȬ DokumentenȱnavigierenȱundȱderenȱDatenȱmitȱderȱSpracheȱXQueryȱverarbeiten.ȱ 6.1 Die Sprache XQuery DieȱSpracheȱXQueryȱ(engl.ȱXMLȱQueryȱLanguage)ȱistȱeineȱfunktionaleȱSprache.ȱSieȱ wurdeȱ vomȱ WorldȱWideȱWebȱConsortiumȱ (W3C)ȱ definiert.ȱ Ihrȱ primäresȱ EinsatzgeȬ bietȱ istȱ dieȱ Verarbeitungȱ vonȱ XMLȬDatenȱ inȱ internȱ codiertenȱ XMLȬDokumenten,ȱ dieȱ inȱ DB2ȱ inȱ Gestaltȱ vonȱ XDMȬObjektenȱ (XDM:ȱ XQueryȱDataȱModel)ȱ vorliegen.ȱ EinȱsolchesȱXDMȬObjektȱwirdȱalsȱEintragȱinȱeinerȱSequenzȱgespeichert.ȱ 6.1.1 Das Datenmodell von XQuery – Einführung DasȱDatenmodellȱvonȱXQuery,ȱdasȱXQueryȱDataȱModel,ȱabgekürztȱdasȱXDM,ȱbautȱ aufȱ derȱ Sequenzȱ auf.ȱ Eineȱ Sequenzȱ (engl.ȱ sequence)ȱ istȱ eineȱ Sammlungȱ einzelnerȱ Werte.ȱ Inȱ ihrȱ herrschtȱ dieȱ serielleȱ Zugangsordnung.ȱ Derȱ Eintragȱ (engl.ȱ item),ȱ derȱ alsȱersterȱinȱdieȱSequenzȱeingestelltȱwurde,ȱwirdȱauchȱalsȱersterȱausȱihrȱausgegeȬ ben.ȱ Somitȱ ähneltȱ dieȱ Sequenzȱ einerȱ seriellen,ȱ fortlaufendenȱ Datei.ȱ Eineȱ Sequenzȱ kannȱ auchȱ alsȱ eineȱ Datenschlangeȱ (engl.ȱ queue)ȱ gesehenȱ werden.ȱ Eineȱ Sequenzȱ funktioniertȱsomitȱnachȱderȱEingabeȬ/Ausgabemethodeȱfirstȱinȱ–ȱfirstȱout,ȱd.ȱh.ȱderȱ Eintrag,ȱderȱalsȱersterȱeingestelltȱwurde,ȱwirdȱauchȱalsȱersterȱausgegeben.ȱGenauer,ȱ inȱ derȱ Reihenfolge,ȱ inȱ welcherȱ dieȱ Einträgeȱ eingestelltȱ wurden,ȱ inȱ genauȱ dieserȱ Reihenfolgeȱ werdenȱ sieȱ auchȱ wiederȱ ausgegeben.ȱ Dieȱ einzelnenȱ Einträgeȱ sindȱ prinzipiellȱ unterschiedlichȱ aufgebaut,ȱ d.ȱ h.ȱ sieȱ sindȱ Ausprägungenȱ vonȱ unterȬ schiedlichenȱTypen.ȱEinȱundȱderselbeȱWertȱkannȱmehrfachȱjeȱinȱGestaltȱeinesȱEinȬ tragsȱeingetragenȱwerden.ȱIdentischeȱEinträgeȱsindȱsomitȱmöglich.ȱ Imȱ Gegensatzȱ zumȱ XDMȱ bautȱ dasȱ relationaleȱ Datenbankmodellȱ (RDBD)ȱ aufȱ derȱ Relationȱauf.ȱSieȱistȱeineȱSpielartȱderȱmathematischenȱMenge.ȱIhreȱBestandteileȱsindȱ dieȱ Tupel.ȱ Sieȱ sindȱ Ausprägungenȱ desselbenȱ Typs.ȱ Einȱ Tupelȱ bestehtȱ ausȱ einemȱ PrimärschlüsselwertȱundȱeinerȱkonstantenȱAnzahlȱvonȱnullȱbisȱvielenȱNichtschlüsȬ selwerten.ȱ Wieȱ inȱ derȱ mathematischenȱ Mengeȱ kraftȱ Definitionȱ erforderlich,ȱ sindȱ dieȱTupelȱeinmalig,ȱidentischȱaufgebautȱundȱungeordnet.ȱEsȱistȱsomitȱunbestimmt,ȱ inȱwelcherȱReihenfolgeȱdieȱTupelȱausȱderȱRelationȱausgegebenȱwerden.ȱ ȱ105 6ȱȱXMLȬDatenȱmanipulierenȱ–ȱXQueryȱ Inȱ derȱ folgendenȱ Tabelleȱ sindȱ dieȱ wesentlichenȱ Merkmaleȱ derȱ beidenȱ Modelleȱ gegenübergestellt.ȱ Merkmalȱ XDMȱ RDBDȱ BezeichnungȱderȱDaȬ tenmengeȱ Sequenzȱ Relationȱ Sortierordnungȱ Zugangsordnungȱ Unordnungȱ Datenelementȱ Eintragȱ Tupelȱ StrukturȱderȱDateneleȬ menteȱ Einträgeȱsindȱprinzipiellȱ unterschiedlichȱstruktuȬ riert,ȱd.ȱh.ȱsieȱsindȱvonȱ unterschiedlichemȱTyp.ȱ TupelȱsindȱgleichȱstrukȬ turiert,ȱsindȱvomȱselbenȱ Typ.ȱ AuftrittȱeinesȱDateneleȬ mentesȱ mehrmaligȱ einmaligȱ Tabelleȱ7:ȱGegenüberstellungȱdesȱXDMȱundȱdesȱRDBDȱ Dasȱ Datenmodellȱ vonȱ XQueryȱ beruhtȱ aufȱ denȱ Vorgängerdatenmodellenȱ mitȱ denȱ Bezeichnungen:ȱ – XMLȱInformationȱSetȱ(Infoset)ȱ – PostȱSchemaȬValidationȱInfosetȱ(PSVI)ȱ Sieȱwerdenȱhierȱnichtȱweiterȱbehandelt.ȱ Wieȱwirȱgesehenȱhaben,ȱistȱeineȱSequenzȱeineȱgeordneteȱZusammenfassungȱ(engl.ȱ collection)ȱvonȱnullȱbisȱvielenȱEinträgenȱ(engl.ȱitems).ȱEinȱEintragȱistȱentwederȱeinȱ skalarerȱWertȱoderȱeinȱXDMȬKnoten.ȱ Einenȱ skalarenȱ Wertȱ bezeichnetȱ manȱ inȱ XQueryȱ auchȱ alsȱ atomarenȱ Wert,ȱ weilȱ erȱ nichtȱ weiterȱ unterteilbarȱ ist.ȱ Einȱ atomarerȱ Wertȱ istȱ dieȱ Ausprägungȱ einesȱ inȱ derȱ Datendefinitionsspracheȱ XMLȱ Schemaȱ eingebautenȱ Datentyps.ȱ Dieȱ eingebautenȱ Datentypenȱ vonȱ XMLȱ Schemaȱ sindȱ sehrȱ umfangreich.ȱ Deshalbȱ werdenȱ sieȱ inȱ eiȬ nemȱfolgendenȱKapitelȱseparatȱundȱsystematischȱbehandelt.ȱȱ BeispieleȱfürȱSequenzenȱ AtomareȱGanzzahlȱ ȱ AtomareȱZeichenketteȱ ȱ DreiȱatomareȱWerteȱ ȱ ZweiȱatomareȱZeichenkettenȱ XMLȬElementȬKnotenȱ ȱ AtomareȱWerteȱundȱȱ XMLȬElementȬKnotenȱȱ ȱ – LeereȱSequenzȱ ȱ ȱ – – – – – – 106ȱ 2ȱ ȇhalloȇȱ (2,ȱ3,ȱ4)ȱ (ȇhalloȇ,ȱȇFreundeȇ)ȱ ȱ (2,ȱ,ȱȇhalloȇ)ȱ ()ȱ 6.1ȱȱDieȱSpracheȱXQueryȱ Einȱ Eintragȱ inȱ einerȱ XQueryȬSequenzȱ kannȱ einȱ XMLȬDokumentȱ inȱ seinerȱ internȱ codiertenȱFormȱsein.ȱEinȱsolcherȱEintragȱistȱeineȱAusprägung,ȱd.ȱh.ȱeinȱExemplarȱ desȱ XQueryȱ Datenmodellsȱ (XDM).ȱ Erȱ wirdȱ alsȱ XDMȬKnotenȱ oderȱ kurzȱ Knotenȱ bezeichnet.ȱ Einȱ Eintragȱ istȱ somitȱ prinzipiellȱ vergleichbarȱ mitȱ einemȱ relationalenȱ Tupel,ȱ dasȱ einȱ Exemplarȱ einesȱ Relationstypsȱ ist.ȱ Hierbeiȱ istȱ jedochȱ zuȱ beachten,ȱ dassȱalleȱTupelȱeinerȱRelationȱtypidentischȱsind.ȱDieȱKnotenȱeinerȱSequenzȱkönnenȱ jedochȱExemplareȱvonȱunterschiedlichenȱTypenȱsein.ȱ Einȱ Exemplarȱ desȱ XDM,ȱ d.ȱ h.ȱ dieȱ internȱ codierteȱ Formȱ einesȱ XMLȬDokumentes,ȱ wirdȱ inȱ Gestaltȱ einesȱ Datenbaumesȱ dargestellt.ȱ Zurȱ Konstruktionȱ einesȱ solchenȱ XDMȬBaumesȱ könnenȱ Ausprägungenȱ vonȱ siebenȱ XDMȬKnotenartenȱ verwendetȱ werden:ȱ – – – – – – Dokumentknotenȱ Elementknotenȱ Attributknotenȱ Textknotenȱ Kommentarknotenȱ Verarbeitungshinweisknotenȱ(PI)ȱ Documentȱ Elementȱ Attributeȱ Textȱ Commentȱ ProcessingȱInstructionȱ InȱobjektorientierterȱBetrachtungsweiseȱsindȱdieȱKnotenartenȱKlassen.ȱEineȱKlasseȱ istȱderȱBauplan,ȱd.ȱh.ȱdieȱDefinitionȱeinesȱObjekts.ȱDieȱnachȱihrenȱVorgabenȱausgeȬ prägtenȱ Objekteȱ sindȱ dieȱXDMȬKnotenȱ imȱ XDMȬBaum.ȱ Hiermitȱkannȱ manȱ allgeȬ meinȱgesprochenȱeineȱKlasseȱauchȱalsȱeinenȱBegriffȱauffassen,ȱderȱdurchȱdenȱKlasȬ sennamenȱbezeichnetȱwird.ȱDieȱBegriffsintensionȱistȱderȱausȱderȱAusformulierungȱ derȱKlasseȱbestehendeȱBauplanȱderȱObjekte.ȱDieȱExtensionȱistȱschließlichȱdieȱMenȬ geȱderȱausgeprägtenȱObjekte.ȱSomitȱkönnenȱauchȱdieȱXDMȬKnotenartenȱallgemeinȱ alsȱ Begriffeȱ vonȱ XQueryȱ aufgefasstȱ werden.ȱ Sieȱ habenȱ einenȱ Namen,ȱ eineȱ inȱ XQueryȱ vordefinierteȱ Intensionȱ undȱ eineȱ Mengeȱ vonȱ Extensionen.ȱ Dieȱ einzelnenȱ ExtensionenȱsindȱsodannȱletztendlichȱdieȱausgeprägtenȱXDMȬKnotenȱinȱderȱMenȬ geȱallerȱXDMȬBäume.ȱ DenȱZusammenhangȱderȱdargestelltenȱXQueryȬspezifischenȱGrundbegriffeȱkannȱ manȱübersichtlichȱinȱeinemȱUMLȬKlassendiagrammȱdarstellen.ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ 107ȱ 6ȱȱXMLȬDatenȱmanipulierenȱ–ȱXQueryȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ Sequenz * Eintrag Atomarer Wert Datentyp Knoten Zeichenkettenwert Identität ȱ Abbildungȱ35:ȱGrundbegriffeȱdesȱXDMȱ «Document» Dokument «Element» Element Elementname Typ des Wertes Getypter Wert «Attribut» Attribut Attributname Typ des Wertes Getypter Wert «Textk» Text Getypter«Comment» Wert Kommentar «Processing-Instruction» Verarbeitungshinweis Zielsystemname ȱ WieȱmanȱausȱdemȱKlassendiagrammȱsieht,ȱbestehtȱeineȱSequenzȱausȱnullȱbisȱvielenȱ Einträgen.ȱ Einȱ Eintragȱ istȱ entwederȱ einȱ atomarerȱWertȱ oderȱ einȱ XDMȬKnoten.ȱ Einȱ Knotenȱ seinerseitsȱ istȱ einerȱ derȱ sechsȱ Knotenartenȱ desȱ XDMȬDatenmodells.ȱ Dieȱ Attributeȱ Zeichenkettenwertȱ undȱ Identitätȱ vonȱ Knotenȱ werdenȱ anȱ dieseȱ erbendenȱ Knotenartenȱ vererbt.ȱ Diesȱ wirdȱ durchȱ dieȱ Generalisierungsbeziehungȱ vonȱ UML,ȱ demȱ Pfeilȱ mitȱ derȱ hohlenȱ Spitzeȱ dargestellt.ȱ Zusätzlichȱ zuȱ diesenȱ vonȱ derȱ Klasseȱ Knotenȱ geerbtenȱ Attributenȱ enthaltenȱ dieȱ beidenȱ Klassenȱ Elementȱ undȱ Attributȱ nochȱihreȱsieȱspezialisierendenȱeigenenȱAttribute.ȱ JederȱKnotenȱhatȱeineȱeigeneȱIdentität.ȱInȱobjektorientierterȱSprechweiseȱbezeichȬ netȱ manȱ diesenȱ Sachverhaltȱ auchȱ mitȱ derȱ Objektidentitätȱ (engl.ȱ objectȱ identity,ȱ OIDȱ).ȱAufȱdenȱWertȱderȱIdentitätȱkannȱnichtȱdirektȱzugegriffenȱwerden.ȱWeiterȬ hinȱ hatȱ jederȱ Knotenȱ einenȱ Wertȱ inȱ Zeichenkettenform.ȱ Inȱ einemȱ Elementknotenȱ wirdȱzusätzlichȱderȱNameȱdesȱvonȱihmȱinternȱrepräsentiertenȱXMLȬElementes,ȱderȱ DatentypȱdesȱElementwertesȱundȱderȱElementwertȱinȱseinerȱdatentypspezifischenȱ Formȱdargestellt.ȱGleichesȱgiltȱfürȱeinenȱAttributknoten.ȱ 108ȱ 6.1ȱȱDieȱSpracheȱXQueryȱ Aufȱ denȱ Einsatzȱ dieserȱ Knotenartenȱ zurȱ Konstruktionȱ vonȱ XDMȬBäumenȱ undȱ derenȱprogrammtechnischeȱHandhabungȱgehenȱwirȱimȱnächstenȱKapitelȱausführȬ lichȱein.ȱ 6.1.2 Befehl XQuery in DB2-Client eingeben BevorȱwirȱunsȱmitȱtheoretischenȱAspektenȱtieferȱbeschäftigen,ȱwollenȱwirȱzunächstȱ einfacheȱ XQueryȬBefehleȱ inȱ denȱ DB2ȬClientȱ eingeben.ȱ Dabeiȱ werdenȱ wirȱ auchȱ kurzȱdieȱÄhnlichkeitenȱzwischenȱderȱEingabeȱvonȱXQueryȬȱundȱSQLȬBefehlenȱinȱ dieȱDB2ȬClientȱbehandeln.ȱHierdurchȱgewinnenȱwirȱschnellȱeinȱtieferesȱVerständȬ nisȱfürȱdieȱneueȱSpracheȱinȱDB2ȱundȱlassenȱkeineȱKluftȱzwischenȱTheorieȱundȱPraȬ xisȱaufkommen.ȱEinȱsolcherȱDB2ȬClientȱkannȱderȱ – Befehlseditorȱoderȱderȱ – Befehlszeilenprozessorȱ sein.ȱ BeginntȱeineȱEingabeȱinȱeinenȱDB2ȬClientȱmitȱdemȱWortȱXQUERY,ȱdannȱwirdȱderȱ DatenstromȱanȱdenȱXQueryȬParserȱvonȱDB2ȱgeleitet,ȱansonstenȱanȱdenȱSQLȬParser.ȱ Dasȱ Wortȱ XQUERYȱ istȱ derȱ Nameȱ einesȱ DB2ȬKommandosȱ undȱ gehörtȱ nichtȱ zurȱ XQueryȬSprache.ȱDasȱDB2ȬKommandoȱXQUERYȱ kannȱinȱ jederȱ Kombinationȱvonȱ GroßȬȱ undȱ Kleinbuchstabenȱ geschriebenȱ werden.ȱ Wirdȱ derȱ atomareȱ Wertȱ 1ȱ anȱ XQueryȱgeschickt,ȱkannȱdasȱKommandoȱbeispielsweiseȱwieȱfolgtȱaussehen.ȱ Beispielȱ XQUERY 1 xquery 1 XQuery 1 xquErY 1 DB2ȬXQueryȱantwortetȱhieraufȱmitȱdemȱErgebnisȱ 1 ––––––––––––––––– 1 DieȱSpracheȱXQueryȱselbstȱunterscheidetȱjedochȱzwischenȱGroßȬȱundȱKleinschreiȬ bungȱderȱWorte.ȱSchlüsselworteȱderȱSprache,ȱdieȱNotationskonstanten,ȱwerdenȱinȱ Kleinbuchstabenȱ geschrieben.ȱ Sieȱ sindȱ nichtȱ reserviert.ȱ Dieȱ restlichenȱ Worte,ȱ dieȱ Notationsvariablen,ȱdieȱvomȱProgrammiererȱfreiȱgewähltȱwerden,ȱkönnenȱinȱeinerȱ MischungȱvonȱGroßȬȱundȱKleinbuchstabenȱgeschriebenȱwerden.ȱ DieȱVerwendungȱdesȱDB2ȬBefehlsȱXQUERYȱistȱähnlichȱeinfachȱundȱwirkungsvollȱ wieȱ dieȱ Verwendungȱ derȱ SQLȬKlauselȱ VALUES.ȱ Auchȱ mitȱ VALUESȱ kannȱ manȱ sehrȱeinfachȱeinȱoderȱmehrereȱSQLȬAusdrückeȱanȱdenȱSQLȬParserȱvonȱDB2ȱschiȬ ckenȱ undȱ vonȱ diesemȱ imȱ Kommandomodusȱ ausführenȱ lassen.ȱ Beideȱ Parser,ȱ derȱ XQueryȬȱundȱderȱSQLȬParserȱschickenȱdieȱErgebnisseȱinȱexternȱlesbarerȱZeichenȬ 109ȱ 6ȱȱXMLȬDatenȱmanipulierenȱ–ȱXQueryȱ formȱzurück.ȱIstȱhierbeiȱeineȱSerialisierungȱvonȱinternȱcodiertenȱXMLȬWertenȱerȬ forderlich,ȱsoȱerfolgtȱdieȱSerialisierungȱimplizitȱdurchȱdenȱDatenbankprozessor.ȱ Inȱ derȱ folgendenȱ Tabelleȱzeigenȱ wirȱ dieȱ einfacheȱHandhabungȱ beiderȱ SpracheinȬ richtungenȱinȱDB2.ȱ SQL – VALUES XQuery – XQUERY Atomare Ganzzahl VALUES 1 XQUERY 1 Atomare Zeichenkette VALUES 'hallo' XQUERY 'hallo' Drei atomare Ganzzahlen VALUES 2, 3, 4 XQUERY 2, 3, 4 Zwei atomare Zeichenketten VALUES 'hallo', 'Freunde' XQUERY 'hallo', 'Freunde' XML-Element-Knoten VALUES XMLPARSE( DOCUMENT '' ) XQUERY Tabelleȱ8:ȱÄhnlichkeitenȱzwischenȱSQLȬȱundȱXQueryȬAufrufenȱinȱDB2ȱ Dieȱ beidenȱParser,ȱderȱSQLȬParserȱundȱderȱXQueryȬParser,ȱ behandelnȱ dieȱeingeȬ gebenenȱWerteȱinȱderȱihremȱjeweiligenȱWeltbildȱkonformenȱArt,ȱdemȱrelationalenȱ undȱdemȱdokumentenorientiertenȱWeltbild.ȱDerȱSQLȬParserȱerkenntȱdenȱeingegeȬ benenȱ Wertestromȱ alsȱ eineȱ Relation.ȱ Derȱ XQueryȬParserȱ betrachtetȱ ihnȱ alsȱ eineȱ Sequenz.ȱ SowohlȱdieȱRelationȱalsȱauchȱdieȱSequenzȱstellenȱwirȱnunȱinȱTabellenformȱdarȱundȱ fügenȱ inȱ beideȱ dieȱ zweiȱ atomarenȱ Zeichenkettenȱ ȇhalloȇȱ undȱ ȇFreundeȇȱ ein.ȱ Dieȱ folgendeȱRelationȱbestehtȱausȱzweiȱTupelȱmitȱjeȱeinemȱWert.ȱDieȱSequenzȱbestehtȱ ausȱzweiȱEinträgen.ȱ ȱ Relationȱ Sequenz halloȱ halloȱ Freundeȱ Freundeȱ Abbildungȱ36:ȱGegenüberstellungȱvonȱRelationȱundȱSequenzȱ ȱ ȱ ȱ ȱ 110ȱ ȱ 6.1ȱȱDieȱSpracheȱXQueryȱ Datenstrom an SQL-Parser Datenstrom an SQL-Parser VALUES 'hallo', 'Freunde' Antwort 1 ––––––– hallo Freunde XQUERY 'hallo', 'Freunde' Antwort 1 ––––––– hallo Freunde Tabelleȱ9:ȱBehandlungȱeinerȱRelationȱundȱSequenzȱdurchȱdieȱParserȱ Andersȱ istȱ dasȱ Parserverhalten,ȱ wennȱ derȱ Eingabestromȱ nichtȱ einenȱ atomarenȱ WertȱjeȱTupel,ȱsondernȱmehrereȱatomareȱWerteȱjeȱTupelȱbzw.ȱjeȱSequenzȱumfasst.ȱ ImȱfolgendenȱBeispielȱbestehtȱdieȱEingabeȱinȱdenȱSQLȬParserȱausȱzweiȱTupelȱmitȱjeȱ zweiȱ Datenworten.ȱ Dieȱ Eingabeȱ inȱ denȱ XQueryȬParserȱ istȱ ausȱ zweiȱ Sequenzenȱ zusammengesetztȱmitȱebenfallsȱjeweilsȱzweiȱDatenworten.ȱWieȱmanȱanȱdenȱAusȬ gabenȱ beiderȱ Systemeȱ sieht,ȱ behältȱ SQLȱ dieȱ Tupelstrukturierungȱ inȱ derȱ Relationȱ bei.ȱXQueryȱhingegenȱbautȱdieȱbeidenȱSequenzenȱzuȱeinerȱSequenzȱzusammen.ȱ Datenstrom an SQL-Parser Datenstrom an SQL-Parser VALUES ('hallo', 'Freunde'), ('guten', 'Morgen' ) XQUERY ('hallo', 'Freunde'), ('guten', 'Morgen' ) Antwort Antwort 1 ––––– hallo guten 1 –––––––– hallo Freunde guten Morgen 2 ––––––– Freunde Morgen Tabelleȱ10:ȱBehandlungȱvonȱkomplexenȱTupelȱundȱSequenzenȱ ȱ ȱ Relation hallo guten ȱ ȱ Freunde Morgen Sequenz hallo Freunde guten Morgen Abbildungȱ37:ȱUnterschiedlicheȱBehandlungȱvonȱTupelȱundȱSequenzenȱ Eineȱ Sequenzȱ wirdȱ inȱ einemȱ Sequenzausdruckȱ zusammengebaut.ȱ Dasȱ Kommaȱ fungiertȱinȱeinemȱSequenzausdruckȱalsȱdyadischerȱOperator,ȱd.ȱh.ȱalsȱeinȱOperator,ȱ vorȱundȱnachȱdemȱjeȱeinȱOperandȱsteht.ȱFürȱdieȱLesbarkeitȱistȱesȱvorteilhaft,ȱeinenȱ Sequenzausdruckȱ inȱ rundenȱ Klammernȱ einzuklammern.ȱ Dieseȱ Darstellungsartȱ 111ȱ 6ȱȱXMLȬDatenȱmanipulierenȱ–ȱXQueryȱ vermitteltȱ auchȱ optischȱ denȱ Eindruckȱ einerȱ geschlossenenȱ Einheit.ȱ Eineȱ Sequenzȱ kannȱ ausȱ Wertenȱ unterschiedlichsterȱ Typenȱ bestehen.ȱ Eineȱ rundeȱ Klammerȱ aufȱ undȱzuȱ()ȱistȱeineȱleereȱSequenz.ȱ BeispieleȱfürȱSequenzenȱ SequenzȱausȱGanzzahlenȱ (1, 2, 3) SequenzȱausȱreellenȱZahlenȱ (1.1, 2.2, 3.3) SequenzȱausȱganzenȱundȱreellenȱZahlenȱ (1.1, 2, 3.3) SequenzȱausȱZahlenȱundȱTextzeichenȱ (1, 2.2, 'a') SequenzȱausȱSequenzenȱ (1, (2.2, 3), (4), (), 5, 'a')ȱ Tabelleȱ11:ȱSequenzenȱausȱaufgezähltenȱatomarenȱWertenȱ Dieȱ Operandenȱ einesȱ KommaȬOperatorsȱ könnenȱ auchȱ Ausdrückeȱ sein.ȱ Imȱ FolȬ gendenȱgehenȱwirȱkurzȱaufȱeinigeȱAusdrucksartenȱein.ȱInȱeinemȱspäterenȱKapitelȱ werdenȱdieȱAusdrucksartenȱsodannȱsystematischȱbehandelt.ȱ BeispieleȱfürȱSequenzenȱmitȱAusdrückenȱalsȱOperandenȱ SequenzȱausȱganzzahligenȱAusdrückenȱ (1 + 1, 2 + 2, 3 + 3) SequenzȱausȱreellzahligenȱAusdrückenȱ (1.1 + 1.1, 3.3 – 1.1) SequenzȱausȱgemischtzahligenȱAusdrückenȱ (1.1 + 1, 2 – 1.1) Sequenzȱ ausȱ Textwortenȱ undȱ VerkettungsȬ funktionȱconcat()ȱ ('hallo', concat('Fre', 'unde')) SequenzȱausȱAusdrückenȱinȱSequenzenȱ ((1.1 div 2.2), (concat('a', 'b' ))) Tabelleȱ12:ȱSequenzenȱmitȱAusdrückenȱ DieȱAusdrückeȱderȱobigenȱBeispieleȱverwendenȱarithmetischeȱOperatorenȱundȱdieȱ inȱXQueryȱeingebauteȱFunktionȱconcat()ȱzurȱVerkettungȱvonȱZeichendaten.ȱ InȱXQueryȱgibtȱesȱdieȱfolgendenȱarithmetischenȱOperatoren.ȱSieȱwerdenȱvonȱlinksȱ nachȱrechtsȱabgearbeitet.ȱ Operatorȱ Bedeutungȱ Beispielȱ ȱ +ȱ –ȱ Vorzeichenoperator:ȱ positivȱ negativȱ -1 ȱ *ȱ Punktrechnung:ȱ Multiplikationȱȱ 112ȱ --1 -+1 2 * 3 6.1ȱȱDieȱSpracheȱXQueryȱ divȱȱ idivȱȱ modȱ Divisionȱ ganzzahligeȱDivisionȱȱ Modulodivisionȱ 2 div 3 7 idiv 3 7 mod 3ȱ ȱ +ȱ –ȱ Strichrechnung:ȱ Additionȱ Subtraktionȱ 1 + 1 5 – 2ȱ Tabelleȱ13:ȱArithmetischeȱOperatorenȱ DieȱSyntaxȱderȱeingebautenȱFunktionȱconcat()ȱlautetȱwieȱfolgt.ȱ ȱ ȱ concat( atomarer Wert, atomarer Wert [, atomarer Wert] ...) Syntaxȱ16:ȱEingebauteȱFunktionȱconcat()ȱ SollȱeineȱSequenzȱEinträgeȱausȱeinemȱBereichȱvonȱunmittelbarȱbenachbartenȱganzȬ zahligenȱ Wertenȱ enthalten,ȱ soȱ kannȱ fürȱ dieȱ Herstellungȱ derȱ Einträgeȱ einȱ BeȬ reichsausdruckȱ eingesetztȱ werden.ȱ Einȱ Wertebereichsausdruckȱ bestehtȱ ausȱ dreiȱ Bestandteilen,ȱdemȱdyadischenȱOperatorȱto,ȱvorȱdemȱderȱAusdruckȱfürȱdieȱAngaȬ beȱ derȱ Untergrenzeȱ desȱ Wertebereichesȱ steht.ȱ Nachȱ demȱ Operatorȱ toȱ stehtȱ derȱ Ausdruck,ȱderȱdenȱgrößtenȱWertȱdesȱWertebereichesȱangibt,ȱdieȱObergrenze.ȱȱ BeispieleȱfürȱdieȱErzeugungȱvonȱSequenzenȱmitȱHilfeȱdesȱBereichsoperatorsȱto.ȱ SequenzȱausȱeinemȱganzzahligenȱWertebereichȱ (1 to 3) SequenzȱausȱzweiȱganzzahligenȱWertebereichenȱ (1 to 3, 5 to 7) SequenzȱausȱzweiȱganzzahligenȱWertebereichenȱ –ȱbesserȱlesbarȱ ((1 to 3), (5 to 7)) SequenzȱausȱzweiȱganzzahligenȱWertebereichenȱ undȱEinzelwertȱ ((1 to 3), (5 to 7), 9) SequenzȱinȱabsteigenderȱFolgeȱ (reverse(1 to 3)) Tabelleȱ14:ȱWertebereichsausdrückeȱzurȱErzeugungȱvonȱganzzahligenȱSequenzenȱ XQueryȱ istȱ eineȱ funktionaleȱ Sprache.ȱ Dasȱ bedeutetȱ auch,ȱ dassȱ nachȱ demȱ DB2Ȭ Befehlsnamenȱ XQUERYȱ dieȱ Implementierungȱ derȱ Hauptfunktionȱ beginnt.ȱ Dieseȱ hatȱ keinenȱ Namen.ȱ Sieȱ wirdȱ jedochȱ vomȱ Datenbankprozessorȱ DB2ȱ aufgerufen,ȱ wennȱ inȱ ihrȱ keinȱ Syntaxfehlerȱ gefundenȱ wurde.ȱ Dieȱ anonymeȱ Hauptfunktionȱ mussȱeineȱSequenzȱenthalten,ȱdieȱauchȱleerȱseinȱkann.ȱAuchȱdieȱSequenzȱhatȱkeiȬ nenȱNamen.ȱWieȱinȱderȱfunktionalenȱProgrammierungȱüblich,ȱwirdȱdasȱErgebnisȱ 113ȱ 6ȱȱXMLȬDatenȱmanipulierenȱ–ȱXQueryȱ derȱFunktionȱdurchȱdieȱAnweisungȱreturnȱanȱdieȱStelleȱihresȱAufrufsȱzurückgegeȬ ben.ȱBeiȱeinerȱanonymenȱSequenzȱistȱdieȱXQueryȬKlauselȱreturnȱebenfallsȱanonym.ȱ InȱXQueryȱistȱdieserȱMechanismusȱetwasȱverschleiert,ȱweilȱzumȱeinenȱdieȱHauptȬ sequenzȱ keinenȱ Namenȱ hatȱ undȱ zumȱ anderenȱ ihreȱ Einträgeȱ durchȱ einȱ implizitesȱ undȱnichtȱsichtbaresȱreturnȱanȱdenȱDatenbankprozessorȱinȱserialisierterȱFormȱzuȬ rückgegebenȱ werden.ȱ Wieȱ manȱ hierausȱ erkennt,ȱ istȱ dasȱ Arbeitenȱ mitȱ implizitenȱ Standardkonzeptenȱzwarȱsehrȱeffizient.ȱEsȱverschleiertȱjedochȱauchȱdieȱeigentlicheȱ FunktionsweiseȱundȱistȱdeshalbȱfürȱdenȱAnfängerȱnichtȱsofortȱeinsichtig.ȱ Eineȱ Sequenzȱ kannȱ manȱ jedochȱ auchȱ anȱ eineȱ XQueryȬVariableȱ binden.ȱ Hiermitȱ machtȱmanȱdieseȱSequenzȱexplizitȱundȱprogrammtechnischȱanfassbar.ȱIhreȱWerteȱ könnenȱsodannȱmitȱderȱXQueryȬKlauselȱreturnȱanȱdenȱDatenbankprozessorȱexpliȬ zitȱzurückgegebenȱwerden.ȱȱ EineȱXQueryȬVariableȱbeginntȱmitȱdemȱDollarzeichenȱ$ȱgefolgtȱvonȱeinerȱbeliebiȬ genȱ Kombinationȱ alphanumerischerȱ Zeichen.ȱ Sieȱ wirdȱ inȱ einemȱ soȱ genanntenȱ FLWORȬAusdruckȱvereinbart.ȱInȱihmȱistȱsieȱbekanntȱundȱwirdȱinȱihmȱauchȱgenutzt.ȱ (FLWOR:ȱ ausgesprochenȱ engl.ȱ wieȱ flowerȱ –ȱ Blume).ȱ FLWORȬAusdrückeȱ werdenȱ inȱ einemȱ späterenȱ Kapitelȱ intensivȱ behandelt.ȱ EinȱFLWORȬAusdruckȱ bestehtȱ ausȱ denȱKlauselnȱfor,ȱlet,ȱwhere,ȱorderȱundȱreturn.ȱDieȱbeidenȱBestandteileȱletȱundȱreturnȱ sindȱfürȱunsereȱaktuellenȱZweckeȱbedeutsam.ȱ InȱRahmenȱdesȱminimalenȱFLWORȬAusdrucksȱletȱundȱreturn,ȱdieȱzusammenȱeineȱ Einheitȱbilden,ȱwirdȱeineȱXQueryȬVariableȱvereinbartȱundȱmitȱeinerȱSequenzȱverȬ bunden.ȱDieȱEinträgeȱderȱSequenzȱwerdenȱsodannȱmitȱderȱKlauselȱreturnȱausȱderȱ FunktionȱanȱdenȱDatenbankprozessorȱimplizitȱserialisiertȱzurückgegeben.ȱ ImȱfolgendenȱBeispielȱsollȱanȱdieȱXQueryȬVariableȱ$_explizite_SequenzȱdieȱSequenzȱ (1,ȱȇaȇ)ȱgebundenȱundȱmitȱderȱKlauselȱreturnȱserialisiertȱanȱdenȱDatenbankprozesȬ sorȱ zurückgegebenȱ werden.ȱ Dieserȱ stelltȱ sodannȱ dasȱ serialisierteȱ Ergebnisȱ demȱ DB2ȬClientȱ zurȱ Verfügung,ȱ derȱ sieȱ ausgibt.ȱ Dieȱ Sequenzȱ wirdȱ mitȱ demȱ ZuweiȬ sungsoperator,ȱ derȱ ausȱ demȱ Doppelpunktȱ undȱ demȱ Gleichheitszeichenȱ bestehtȱ :=,ȱ anȱdieȱXQueryȬVariableȱgebunden,ȱsieheȱProgrammzeileȱ(2).ȱ XQUERY let $_explizite_Sequenz := (1, 'a') return $_explizite_Sequenz (1) (2) (3) Programmȱ45:ȱSequenzȱistȱanȱXQueryȬVariableȱgebundenȱ Ergebnisȱ 1 –––––––– 1 a Eineȱ Sequenzȱ kannȱ auchȱ ausȱ Sequenzenȱ zusammengebautȱ werden,ȱ dieȱ jeweilsȱ überȱ eineȱ XQueryȬVariableȱ referenziertȱ werden.ȱ Dasȱ istȱ naheȱ liegend,ȱ dennȱ eineȱ 114ȱ 6.1ȱȱDieȱSpracheȱXQueryȱ Variableȱist,ȱgenauȱsoȱwieȱeinȱLiteral,ȱeinȱminimalerȱAusdruck.ȱDasȱfolgendeȱBeiȬ spielȱdemonstriertȱdiesenȱKonstruktionsansatz.ȱ XQUERY let let let let let $Ganzzahlsequenz $Zeichenkettensequenz $Leere_Sequenz $Wertebereich_Sequenz $Ergebnissequenz := := := := := (1, 2) ('hallo', 'Freunde') () (5 to 7) ($Ganzzahlsequenz , $Zeichenkettensequenz, $Leere_Sequenz , $Wertebereich_Sequenz ) return $Ergebnissequenz (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) Programmȱ46:ȱSequenzȱwirdȱausȱSequenzenȱmehrererȱVariablenȱkonstruiert Ergebnisȱ 1 –––––––––– 1 2 hallo Freunde 5 6 7 6.1.3 Übungen 1) Stellenȱ Sieȱ dieȱ Werteȱ ȇXQueryȇȱ ȇistȇȱ ȇeinfachȇȱ alsȱ dreiȱ Einträgeȱ inȱ dieȱ anonymeȱ SequenzȱeinȱundȱgebenȱSieȱdieseȱSequenzȱmitȱeinemȱanonymenȱreturnȱaus.ȱ 2) Stellenȱ Sieȱdieȱ Werteȱ ȇXQueryȇȱ ȇistȇȱ ȇeinfachȇȱ alsȱdreiȱ Einträgeȱ inȱ eineȱ Sequenzȱ einȱundȱweisenȱSieȱdieseȱSequenzȱderȱReferenzvariablenȱ$Sequenz_Refȱzu.ȱAnȬ schließendȱgebenȱSieȱdieȱEinträgeȱdieserȱSequenzȱmitȱderȱKlauselȱreturnȱaus.ȱ 3) Erzeugenȱ Sieȱ eineȱ benannteȱ Sequenzȱ ausȱ Einträgen,ȱ dieȱ sichȱ ausȱ folgendenȱ Ausdrückenȱergeben:ȱ1ȱ+ȱ1,ȱ–1ȱ+ȱ2,ȱ3ȱ–ȱ1,ȱ7ȱ*ȱ3,ȱ10ȱdivȱ2,ȱ22.2ȱdivȱ2.2,ȱ10ȱmodȱ3,ȱ8ȱ idivȱ3,ȱȇhalloȇ,ȱȇFreundeȇ,ȱconcat(ȇgutenȱȇ,ȱȇMorgenȇ).ȱGebenȱSieȱdieȱEinträgeȱderȱ SequenzȱmitȱderȱKlauselȱreturnȱaus.ȱ 4) Erzeugenȱ Sieȱ eineȱ benannteȱ Sequenzȱ ausȱ Einträgen,ȱ dieȱ sichȱ ausȱ folgendenȱ Ausdrückenȱ ergeben:ȱ 10ȱ toȱ 15,ȱ 25ȱ toȱ 30,ȱ reverseȱ (ȱ 55ȱ toȱ 60),ȱ ().ȱ Gebenȱ Sieȱ dieȱ EinträgeȱderȱSequenzȱmitȱderȱKlauselȱreturnȱaus.ȱ 5) Erzeugenȱ Sieȱ eineȱ benannteȱ Sequenzȱ ausȱ Einträgen,ȱ dieȱ sichȱ ausȱ Einträgenȱ vorherȱ erstellterȱ undȱ benannterȱ Sequenzenȱ ergeben.ȱ Gebenȱ Sieȱ dieȱ ErgebnisȬ sequenzȱmitȱderȱKlauselȱreturnȱaus.ȱ ȱ 115ȱ 6ȱȱXMLȬDatenȱmanipulierenȱ–ȱXQueryȱ 6.2 Konstruktoren zur Erzeugung von XDM-Knoten Fürȱ dieȱ interneȱ Darstellungȱ vonȱ XMLȬDokumentenȱ sindȱ besondersȱ diejenigenȱ Einträgeȱ inȱ einerȱ Sequenzȱ bedeutsam,ȱ dieȱ ausȱ XDMȬKnotenȱ aufgebautȱ sind.ȱ Wieȱ bereitsȱausgeführt,ȱhandeltȱesȱsichȱhierbeiȱumȱfolgendeȱKnotenarten:ȱ – – – – – – Dokumentknotenȱ Elementknotenȱ Textknotenȱ Attributknotenȱ Verarbeitungshinweisknotenȱ(PI)ȱ KommentarȬKnotenȱ documentȱ elementȱ textȱ attributeȱ Processingȱinstructionȱ commentȱ Einȱ XDMȬKnotenȱ wirdȱ mitȱ einemȱ Knotenkonstruktorȱ oderȱ kurzȱ gesagtȱ einemȱ Konstruktorȱerzeugt.ȱInȱXQueryȱwerdenȱzweiȱKonstruktorartenȱunterschiedenȱ – direkterȱKonstruktorȱ – berechneterȱKonstruktor.ȱ EinȱdirekterȱKonstruktorȱliegtȱdannȱvor,ȱwennȱderȱtextförmigeȱXMLȬTextȱalsȱLiteȬ ralȱinȱeinerȱSequenzȱaufgeführtȱwird.ȱDerȱTextȱwirdȱhierbeiȱnichtȱalsȱZeichenketȬ tenliteralȱinȱHochkommataȱgeschrieben.ȱDasȱXMLȬElementȱȱhalloȱȱ istȱ solchȱ einȱ direkterȱ Konstruktor.ȱ Imȱ folgendenȱ Programmȱ erzeugtȱ derȱ direkteȱ Konstruktorȱ einenȱ Eintragȱ inȱ derȱ anonymenȱ Sequenz.ȱ Derȱ Eintragȱ istȱ vomȱ Typȱ Elementknoten.ȱ Beispielȱ XQUERY ( hallo ) Ergebnis hallo ImȱnächstenȱSchrittȱwollenȱwirȱdasȱXMLȬDokumentȱdesȱKundenȱmitȱderȱKundenȬ nummerȱ K001ȱundȱ mitȱ denȱ Namenselementenȱ Vornameȱ gleichȱ Hugoȱundȱ Zunameȱ gleichȱ Muellerȱ imȱ gemischtenȱ Entwicklungsansatzȱ inȱ XQueryȱ mitȱ einemȱ direktenȱ Konstruktorȱ implementieren.ȱ Dieȱ Kundennummerȱ wirdȱ alsȱ Attributȱ desȱ XMLȬ ElementsȱKundeȱausgestaltet.ȱDieȱXMLȬElementeȱVornameȱundȱZunameȱsollenȱdemȱ XMLȬElementȱ Nameȱ hierarchischȱuntergeordnetȱsein.ȱDerȱfolgendeȱ Bauplanȱstelltȱ dasȱausgeprägteȱXMLȬDokumentȱinȱderȱSpracheȱUMLȱinȱGestaltȱeinesȱObjektmoȬ dellsȱdar.ȱ 116ȱ 6.2ȱKonstruktorenȱzurȱErzeugungȱvonȱXDMȬKnotenȱ ȱ «Element» K001:Kunde ȱ ȱ + Kunde_Nr : string = K001 ȱ 1 «Element» Name «Element» 1 Vorname «Element» Zuname 1 1 1 «Wert» Hugo «Wert» Mueller Abbildungȱ38:ȱObjektmodellȱdesȱKundenȱK001ȱinȱgemischtemȱAnsatzȱ DieȱImplementierungȱdesȱDokumentmodellsȱinȱXQueryȱmitȱeinemȱdirektenȱKonȬ struktorȱundȱeinerȱbenanntenȱSequenzȱzeigtȱdasȱfolgendeȱProgramm.ȱ XQUERY let $Sequenz := ( Hugo Mueller ) return $Sequenz (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) Programmȱ47:ȱXMLȬDokumentȱmitȱdirektemȱKonstruktorȱerzeugtȱ Inȱ denȱ Programmzeilenȱ(3)ȱ bisȱ (8)ȱ wirdȱdasȱXMLȬElementȱ KundeȱinȱGestaltȱeinesȱ direktenȱ Konstruktorsȱ alsȱ Elementknotenȱ inȱ dieȱ Sequenzȱ eingebracht.ȱ Derȱ EleȬ mentknotenȱ Kundeȱ istȱ einȱ komplexerȱ Elementknoten,ȱ weilȱ erȱ dasȱ Attributȱ KunȬ de_Nrȱ undȱ denȱ ihmȱ hierarchischȱ untergeordnetenȱ Elementknotenȱ Nameȱ hat.ȱ Dieȱ KlauselȱreturnȱinȱderȱProgrammzeileȱ(10)ȱgibtȱdenȱgesamtenȱInhaltȱderȱSequenzȱinȱ serialisierterȱTextformȱaus.ȱ Ergebnis Hugo Mueller Ausȱ demȱ direktenȱ Konstruktorȱ inȱ Programmȱ 47ȱ bautȱ XQueryȱ einenȱ internenȱ XDMȬBaumȱ auf.ȱ Derȱ Zeigerȱ aufȱ dasȱ Wurzelelementȱ wirdȱ hierbeiȱ inȱ derȱ Sequenzȱ vermerkt.ȱDerȱXDMȬBaumȱbestehtȱaufȱderȱhöchstenȱEbeneȱausȱdemȱWurzelknoten.ȱ DieserȱrepräsentiertȱdasȱWurzelelementȱKunde.ȱDiesemȱElementknotenȱistȱeinȱAtȬ tributknotenȱzugeordnet,ȱderȱdasȱAttributȱKunde_NrȱimȱBaumȱimplementiert.ȱDemȱ Attributknotenȱ istȱ seinȱ Wertknotenȱ untergeordnet.ȱ Seinȱ Wertȱ istȱ dieȱ KundenȬ 117ȱ 6ȱȱXMLȬDatenȱmanipulierenȱ–ȱXQueryȱ nummerȱK001.ȱWeiterhinȱistȱdemȱElementknotenȱKundeȱderȱElementknotenȱNameȱ hierarchischȱ untergeordnet.ȱ Derȱ Elementknotenȱ Nameȱ istȱ derȱ Vorgängerknotenȱ seinerȱ hierarchischenȱ ElementȬNachfolgerknotenȱ Vornameȱ undȱ Zuname.ȱ Beideȱ NachfolgerknotenȱhabenȱnochȱjeȱeinenȱWertknotenȱfürȱdieȱDarstellungȱderȱWerteȱ HugoȱundȱMuellerȱuntergeordnet.ȱ ȱ ȱ ȱ ȱ Sequenzȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ «Element» Kunde 1 1 «Element» Name 1 «Element» Vorname 1 «Element» Zuname «Attribut» Kunde_Nr 1 1 1 «Wert» Hugo «Wert» Mueller «Wert» K001 ȱ ȱ Abbildungȱ39:ȱXDMȬBaumȱderȱinternenȱRepräsentationȱdesȱdirektenȱKonstruktorsȱ EinȱsolcherȱXDMȬBaumȱkannȱauchȱmitȱdemȱEinsatzȱvonȱberechnetenȱKonstruktoȬ ren,ȱ d.ȱ h.ȱ mitȱ berechnetenȱ Knoten,ȱ konstruiertȱ werden.ȱ Dieȱ Anwendungȱ vonȱ beȬ rechnetenȱ Konstruktorenȱ istȱ ähnlichȱ demȱ Einsatzȱ derȱ eingebautenȱ PublikationsȬ funktionenȱvonȱSQL/XML.ȱAuchȱmitȱihnenȱwerdenȱinterneȱXMLȬKnotenȱimȱXDMȬ Baumȱerzeugt.ȱ DieȱNamenȱderȱKonstruktorenȱfürȱdieȱberechneteȱKonstruktionȱvonȱXDMȬKnotenȱ entsprechenȱdenȱNamenȱderȱXDMȬKnoten,ȱwelcheȱdurchȱdieȱKonstruktorenȱausȬ geprägtȱwerden.ȱ Knotenartȱ Konstruktornameȱ Dokumentknotenȱ document Elementknotenȱ element Attributknotenȱ attribute Textknotenȱ text Kommentarknotenȱ comment Verarbeitungshinweisknotenȱ processing-instructionȱ Tabelleȱ15:ȱXDMȬKnotenartenȱundȱNamenȱihrerȱKonstruktorenȱ Imȱ FortgangȱderȱAusführungenȱ stellenȱ wirȱdieȱ KnotenartenȱzurȱKonstruktionȱ eiȬ nesȱ XDMȬBaumesȱ grafischȱ inȱ UMLȱ dar.ȱ Hierbeiȱ zeigenȱ wirȱ vornehmlich,ȱ welcheȱ KnotenartenȱvonȱderȱgeradeȱdargestelltenȱKnotenartȱabhängigȱseinȱkönnen.ȱNachȱ 118ȱ 6.2ȱKonstruktorenȱzurȱErzeugungȱvonȱXDMȬKnotenȱ derȱ grafischenȱ Darstellungȱ beschreibenȱ wirȱ dieȱ Syntaxȱ desȱ jeweiligenȱ KonstrukȬ tors.ȱHieraufȱgebenȱwirȱeineȱAnzahlȱinteressanterȱBeispiele.ȱ Elementknoten Dieȱ Ausführungenȱ beginnenȱ wirȱ mitȱ demȱ berechnetenȱ Konstruktorȱ fürȱ dieȱ KonȬ struktionȱeinesȱElementknotens.ȱSeinȱXQueryȬNameȱlautetȱelement.ȱDaȱdieȱNamenȱ derȱ berechnetenȱ Konstruktorenȱ inȱ XQueryȱ inȱ Kleinbuchstabenȱ geschriebenȱ werȬ den,ȱ sindȱ auchȱ dieȱ Knotennamenȱ inȱ denȱ folgendenȱ UMLȬDiagrammenȱ inȱ KleinȬ buchstabenȱgeschrieben.ȱ Wieȱ ausȱ demȱ UMLȬDiagrammȱ ersichtlichȱ ist,ȱ kannȱ vonȱ einemȱ XDMȬKnotenȱ derȱ ArtȱelementȱeineȱVielzahlȱderȱrechtsȱaufgeführtenȱKnotenartenȱhierarchischȱabhänȬ gigȱsein.ȱEinȱKnotenȱderȱArtȱattributeȱistȱdemȱElementknotenȱjedochȱbeigeordnet.ȱ ȱ ȱ element element ȱ * ȱ * ȱ * text ȱ processing-instruction * ȱ * ȱ ȱ ȱ comment * attribute atomarer Wert ȱ Abbildungȱ40:ȱDerȱKonstruktorȱelementȱprägtȱeinenȱXDMȬElementknotenȱausȱ DieȱSyntaxȱdesȱberechnetenȱKonstruktorsȱelementȱistȱfolgende.ȱ ȱ ȱ element XML-Elementname {[ Inhaltsausdruck ] } Syntaxȱ17:ȱBerechneterȱKonstruktorȱelementȱ Wieȱ ausȱ derȱSyntaxȱ ersichtlichȱist,ȱfolgtȱ aufȱdenȱ Bezeichnerȱ desȱKonstruktorsȱ eleȬ mentȱderȱNameȱdesȱauszuprägendenȱXMLȬElementesȱinȱseinerȱinternenȱFormȱalsȱ XDMȬKnotenȱ imȱ XDMȬKnotenbaum.ȱ Hieraufȱ folgtȱ einȱ Paarȱ geschweifterȱ KlamȬ mern.ȱInȱdiesenȱKlammernȱkannȱeinȱInhaltsausdruckȱangegebenȱwerden,ȱderȱausȱ einerȱSequenzȱvonȱKnotenȱderȱinȱAbbildungȱ40ȱaufgeführtenȱArtenȱund/ȱoderȱausȱ atomarenȱWertenȱbesteht.ȱWirdȱderȱInhaltsausdruckȱnichtȱangegeben,ȱsoȱwirdȱeinȱ KnotenȱfürȱeinȱleeresȱXMLȬElementȱausgeprägt.ȱ 119ȱ 6ȱȱXMLȬDatenȱmanipulierenȱ–ȱXQueryȱ Beispieleȱ EinȱElementknotenȱfürȱeinȱleeresȱXMLȬElementȱwirdȱausgeprägt.ȱ XQUERY element Leeres_Element{} (1) (2) Programmȱ48:ȱBerechneterȱKonstruktorȱelementȱprägtȱKnotenȱfürȱleeresȱXMLȬElementȱ ausȱ Ergebnis Demȱ Elementknotenȱ desȱ XMLȬElementesȱ Nameȱ sollenȱ dieȱ beidenȱ Elementknotenȱ derȱXMLȬElementeȱVornameȱundȱZunameȱhierarchischȱuntergeordnetȱwerden.ȱDerȱ Knotenȱ Vornameȱ sollȱ denȱ Inhaltsausdruckȱ Hugoȱ undȱ derȱ Knotenȱ Nachnameȱ denȱ InhaltsausdruckȱMuellerȱenthalten.ȱ XQUERY element Name{ element Vorname{ 'Hugo' }, element Zuname{ 'Mueller' } } (1) (2) (3) (4) (5) Programmȱ49:ȱBerechneterȱKonstruktorȱelementȱistȱhierarchischȱgeschachteltȱ Ergebnis Hugo Mueller DieȱInhaltsausdrückeȱfürȱdieȱBildungȱderȱXDMȬKnotenȱwerdenȱnunȱinȱGestaltȱvonȱ SequenzenȱmitȱatomarenȱWertenȱangereichert.ȱ XQUERY element Name{ 'hallo', element Vorname{ 'Hugo', 1, 2 }, element Zuname{ ('Mueller', 'a', 'b') } } Programmȱ50:ȱInhaltsausdrückeȱinȱGestaltȱvonȱSequenzenȱausȱatomarenȱWertenȱ Ergebnis hallo 120ȱ (1) (2) (3) (4) (5) 6.2ȱKonstruktorenȱzurȱErzeugungȱvonȱXDMȬKnotenȱ Hugo 1 2 Mueller a b WieȱausȱdemȱErgebnisȱersichtlichȱist,ȱführtȱderȱatomareȱWertȱȇhalloȇȱinȱProgrammȬ zeileȱ (2)ȱ zuȱ demȱ Wertȱ halloȱ imȱ XMLȬElementȱ Name.ȱ Hieraufȱ folgenȱ sodannȱ dieȱ hierarchischȱuntergeordnetenȱ XMLȬElementeȱ Vornameȱundȱ Zuname.ȱ Dieȱ jeweiligeȱ Sequenzȱ ausȱ atomarenȱ Wertenȱ inȱ Programmzeileȱ (3)ȱ undȱ (4)ȱ wirdȱ zuȱ einemȱ ErȬ gebniswertȱzusammengefasst.ȱDieȱeinzelnenȱWerteȱwerdenȱhierbeiȱdurchȱLeerzeiȬ chenȱ voneinanderȱ getrennt.ȱ Einȱ XMLȬElement,ȱ demȱ sowohlȱ Textwerteȱ alsȱ auchȱ weitereȱXMLȬElementeȱuntergeordnetȱsind,ȱbezeichnetȱmanȱauchȱalsȱeinȱkompleȬ xesȱXMLȬElement.ȱ Dokumentknoten Einȱ Dokumentknotenȱ istȱ derȱ hierarchischȱ höchsteȱ Repräsentantȱ einesȱ XDMȬ Baumes.ȱ Erȱ istȱ jedochȱ insoweitȱ einȱ virtuellerȱ Knoten,ȱ alsȱ erȱ inȱ derȱ textförmigenȱ Ausgabeȱeinesȱ XMLȬDokumentesȱnichtȱerscheint.ȱ Einȱ Dokumentknotenȱ wirdȱmitȱ Einsatzȱ desȱ berechnetenȱ Konstruktorsȱ documentȱ ausgeprägt.ȱ Dieȱ hierbeiȱ entsteȬ hendeȱReferenzȱaufȱdasȱKnotenexemplarȱwirdȱinȱeineȱXQueryȬVariableȱoderȱeineȱ Sequenzȱgespeichert.ȱ Imȱ folgendenȱ UMLȬDiagrammȱ istȱ zuȱ sehen,ȱ Knotenȱ welcherȱ Artenȱ einemȱ DokuȬ mentknotenȱuntergeordnetȱwerdenȱkönnen.ȱȱ DasȱKnotendiagrammȱzeigt,ȱdassȱXDMȬKnotenȱderȱdargestelltenȱvierȱArtenȱeinemȱ KnotenȱvomȱTypȱdocumentȱuntergeordnetȱseinȱkönnen.ȱAuchȱatomareȱWerteȱsindȱ möglich.ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ document element * text * * comment processing-instruction * atomarer Wert * ȱ Abbildungȱ41:ȱDerȱKonstruktorȱdocumentȱprägtȱeinenȱXDMȬDokumentknotenȱausȱ 121ȱ 6ȱȱXMLȬDatenȱmanipulierenȱ–ȱXQueryȱ DieȱSyntaxȱdesȱberechnetenȱKonstruktorsȱdocumentȱistȱsehrȱeinfachȱundȱlautetȱwieȱ folgt.ȱ ȱ ȱ document { Inhaltsausdruck } Syntaxȱ18:ȱBerechneterȱKonstruktorȱdocumentȱ Wieȱ manȱ sieht,ȱ hatȱ einȱ XDMȬDokumentknotenȱ keinenȱ Namen.ȱ Imȱ geschweiftenȱ KlammernpaarȱwirdȱeinȱInhaltsausdruckȱangegeben.ȱErȱbestehtȱausȱeinerȱSequenzȱ vonȱ Knotenȱ derȱ inȱ Abbildungȱ 41ȱ aufgeführtenȱ abhängigenȱ Knotenarten.ȱ Auchȱ atomareȱ Werteȱ sindȱ angebbar.ȱ Wieȱ imȱ UMLȬDiagrammȱ auchȱ ersichtlichȱ ist,ȱ sindȱ Attributknotenȱnichtȱzugelassen.ȱ Unterȱ einemȱ Dokumentknotenȱ könnenȱ mehrereȱ Wurzelknotenȱ vomȱ Typȱ elementȱ angeordnetȱwerden.ȱDasȱausȱdemȱDokumentknotenȱmitȱallȱseinenȱuntergeordneȬ tenȱ Knotenȱ generierteȱ XMLȬDokumentȱ istȱ beiȱ mehrerenȱ Wurzelknotenȱ jedochȱ nichtȱmehrȱwohlgeformt.ȱDennȱWohlgeformtheitȱerlaubtȱnurȱeinenȱXMLȬElementȬ knotenȱalsȱexterneȱtextförmigeȱDokumentenwurzelȱinȱeinemȱXMLȬDokument.ȱ Beispiel:ȱDokumentȱbestehtȱausȱleeremȱXMLȬElementȱ InȱdieȱanonymeȱHauptsequenzȱvonȱXQueryȱsollȱeinȱEintragȱaufȱeinenȱDokumentȬ knotenȱ eingefügtȱ werden.ȱ Vonȱ ihmȱ sollȱ lediglichȱ dasȱ leereȱ XMLȬElementȱ Nameȱ abhängigȱsein.ȱ ȱ ȱ Sequenz ȱ ȱ «Document» Dokument 1 «Element» Name Abbildungȱ42:ȱArchitekturȱdesȱZusammenhangsȱzwischenȱHauptsequenz,ȱDokumentȬ knotenȱundȱElementknotenȱ Dieȱ Umsetzungȱ derȱ obigenȱ Vorgabenȱ mitȱ berechnetenȱ Konstruktorenȱ lautetȱ inȱ XQueryȱsodannȱwieȱfolgt.ȱ XQUERY document{ element Name{} } Programmȱ51:ȱXDMȬBaumȱbestehtȱausȱDokumentȬȱundȱElementknoten Ergebnis 122ȱ (1) (2) (3) (4) 6.2ȱKonstruktorenȱzurȱErzeugungȱvonȱXDMȬKnotenȱ DasȱausgegebeneȱXMLȬDokumentȱbestehtȱausȱdemȱleerenȱXMLȬElement.ȱDerȱDoȬ kumentknotenȱimȱXDMȬBaumȱistȱnurȱinternȱvorhandenȱundȱwirdȱnichtȱausgegeȬ ben.ȱ Beispiel:ȱDokumentȱbestehtȱausȱgeschachteltenȱXMLȬElementenȱ InȱdieȱanonymeȱHauptsequenzȱvonȱXQueryȱsollȱeinȱDokumentknotenȱeingehängtȱ werden.ȱVonȱihmȱsollȱdasȱXMLȬElementȱNameȱabhängigȱsein.ȱDiesemȱWurzeleleȬ mentȱ Nameȱ sollenȱ dieȱ beidenȱ Elementknotenȱ Vornameȱ mitȱ demȱ Wertȱ Hugoȱ undȱ ZunameȱmitȱdemȱWertȱMüllerȱhierarchischȱuntergeordnetȱsein.ȱ ȱ ȱ ȱ Sequenzȱ ȱ ȱ ȱ ȱ ȱ «Document» Dokument «Element» Name 1 1 1 «Element» Vorname «Element» Zuname ȱ 1 1 «Wert» Hugo «Wert» Mueller ȱ ȱ Abbildungȱ43:ȱDokumentȱmitȱgeschachteltenȱXMLȬElementenȱ DieȱUmsetzungȱdesȱModelsȱinȱdieȱSpracheȱXQueryȱundȱdamitȱdieȱErzeugungȱdesȱ entsprechendȱ strukturiertenȱ XDMȬBaumesȱ zeigtȱ dasȱ folgendeȱ Programmȱ 52,ȱ dasȱ dieȱhierfürȱerforderlichenȱberechnetenȱKonstruktorenȱeinsetzt.ȱ XQUERY document{ element Name{ element Vorname{'Hugo' }, element Zuname{ 'Mueller'} } } (1) (2) (3) (4) (5) (6) (7) Programmȱ52:ȱXDMȬBaumȱbestehtȱausȱDokumentȬȱundȱgeschachteltenȱElementknotenȱ Ergebnis Hugo Mueller Imȱ folgendenȱ Beispielȱ wirdȱ einȱ XDMȬBaumȱ aufgebaut,ȱ derȱ alleȱ zulässigenȱ KnoȬ tenartenȱeinesȱXMLȬElementknotensȱundȱeinenȱatomarenȱWertȱenthält.ȱȱ ȱ 123ȱ 6ȱȱXMLȬDatenȱmanipulierenȱ–ȱXQueryȱ ȱ 1 ȱ ȱ «Attribut» Kunde_Nr «Element» K001:Kunde ȱ «Document» Dokument ȱ 1 1 «Processing-Instruction» XML_Parser_Y 1 «Element» Name ȱ ȱ 1 ȱ ȱ 1 ȱ 1 ȱ 1 «Element» Vorname 1 «Element» Zuname 1 «Wert» K001 1 «Wert» Argument 1 1 «Wert» Hugo «Wert» Mueller «Comment» Kommentar «Textk» Text «Atom» Hallo ȱ Abbildungȱ44:ȱKnotenȱallerȱKnotenartenȱunterȱdemȱElementknotenȱElementȱ Dieȱ auszuprägendenȱ Knotenȱ werdenȱ unterȱ demȱ Elementknotenȱ Kundeȱ desȱ KunȬ denȱmitȱderȱKundennummerȱK001ȱangeordnet.ȱDasȱneueȱDokumentmodellȱbauenȱ wirȱaufȱderȱBasisȱvonȱAbbildungȱ39ȱauf.ȱDieȱimpliziteȱSequenzȱvonȱXQueryȱstellenȱ wirȱhinfortȱnurȱnochȱinȱAusnahmefällenȱimȱUMLȬDiagrammȱdar.ȱ Bevorȱ wirȱ dieȱ obigeȱ Architekturȱ inȱ einemȱ korrespondierendeȱ XQueryȬProgrammȱ implementieren,ȱ benötigenȱ wirȱ nochȱ dieȱ Syntaxȱ derȱ berechnetenȱ Konstruktorenȱ fürȱȱ – – – – einȱAttributȱ einenȱVerarbeitungshinweisȱ einenȱKommentarȱundȱ einenȱText.ȱ DieȱSyntaxȱdesȱberechnetenȱKonstruktorsȱattributeȱlautet:ȱ ȱ ȱ attribute XML-Attributname {[ Inhaltsausdruck ]} Syntaxȱ19:ȱBerechneterȱKonstruktorȱattributeȱ DieȱSyntaxȱdesȱberechnetenȱKonstruktorsȱprocessingȬinstruction lautet:ȱ ȱ ȱ processing-instruction Zielsystemname {[ Inhaltsausdruck ]} Syntaxȱ20:ȱBerechneterȱKonstruktorȱprocessingȬinstructionȱ DieȱSyntaxȱdesȱberechnetenȱKonstruktorsȱcomment lautet:ȱ 124ȱ 6.2ȱKonstruktorenȱzurȱErzeugungȱvonȱXDMȬKnotenȱ ȱ ȱ comment { Inhaltsausdruck } Syntaxȱ21:ȱBerechneterȱKonstruktorȱcommentȱ DieȱSyntaxȱdesȱberechnetenȱKonstruktorsȱtext lautet:ȱ ȱ ȱ text { Inhaltsausdruck } Syntaxȱ22:ȱBerechneterȱKonstruktorȱtextȱ DieȱImplementierungȱderȱArchitekturȱinȱAbbildungȱ44ȱinȱXQueryȱsiehtȱsodannȱ wieȱfolgtȱaus.ȱ XQUERY document { element Kunde{ attribute Kunde_Nr{'K001'}, processing-instruction XML_Parser_Y{ 'Argument' }, element Name{ element Vorname{'Hugo'}, element Zuname{'Mueller'} }, comment{'Kommentar'}, text{'Text'}, 'Hallo' } } (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) Programmȱ53:ȱAbhängigeȱKnotenartenȱvonȱElementȬKnotenȱinȱberechnetenȱKonstruktoȬ renȱundȱAtom Ergebnis Hugo Mueller (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) Programmȱ166:ȱXMLȬSchemaȱKundeȱundȱseineȱRechnungenȱ–ȱbenutzerdefinierteȱDatenȬ typenȱ InȱdenȱProgrammzeilenȱ(2)ȱbisȱ(9)ȱvonȱProgrammȱ166ȱwirdȱdasȱSchemaȱvereinbart.ȱ Zuȱ denȱ bereitsȱ bekanntenȱ Sprachbestandteilenȱ desȱ Spracheelementsȱ ȱ kommtȱ nochȱ dasȱ Attributȱ elementFormDefaultȱ =ȱ ȈqualifiedȈȱ hinzu.ȱ Hiermitȱ wirdȱ festgelegt,ȱ dassȱ inȱ denȱ XMLȬDokumentenȱ aufȱ derȱ Objektebeneȱ qualifizierteȱ EleȬ 307ȱ 10ȱȱXMLȬDatenȱdefinierenȱ–ȱXMLȱSchemaȱ mentnamenȱ zuȱ verwendenȱ sind.ȱ Dieseȱ bestehenȱ ausȱ denȱ dortȱ vereinbartenȱ NaȬ mensraumpräfixenȱundȱdenȱimȱSchemaȱdeklariertenȱElementnamen.ȱ DieȱverkürzteȱSyntaxȱvonȱȱzeigtȱdieȱfolgendeȱSyntaxbeschreibung.ȱ ȱ ȱ ȱ ȱ Syntaxȱ36:ȱSpracheelementȱȱ InȱdenȱProgrammzeilenȱ(11)ȱbisȱ(47)ȱsindȱdieȱbenutzerdefiniertenȱDatentypenȱdeȬ finiert.ȱ Sieȱ stehenȱ direktȱ nachȱdemȱSpracheelementȱȱ undȱ werdenȱdurchȱ einenȱNamenȱ bezeichnet.ȱJederȱDatentypnameȱbeginntȱmitȱ derȱVorsilbeȱTyp_ȱgeȬ folgtȱvomȱeigentlichenȱNamen.ȱSomitȱhandeltȱesȱsichȱumȱbenannteȱDatentypen,ȱdieȱ globalȱimȱgesamtenȱSchemaȱbekannt,ȱd.ȱh.ȱsichtbarȱsind.ȱDieȱDatentypnamenȱsindȱ hierbeiȱ allgemeinȱ gesprochenȱ dieȱ Begriffsnamen.ȱ Dieȱ zurȱ näherenȱ DatentypbeȬ stimmungȱ verwendetenȱ Fassettenȱ sindȱ allgemeinȱ gesprochenȱ dieȱ Intensionenȱ desȱ definiertenȱBegriffs.ȱ AmȱBeispielȱdesȱbenutzerdefiniertenȱTypsȱTyp_AnredeȱinȱdenȱProgrammzeilenȱ(18)ȱ bisȱ(24)ȱwirdȱderȱZusammenhangȱnäherȱerläutert.ȱMitȱdemȱAttributwertȱdesȱAttriȬ butsȱnameȱinȱZeileȱ(18)ȱwirdȱderȱBegriffsname,ȱd.ȱh.ȱderȱNameȱdesȱDatentypsȱfestȬ gelegt.ȱ SeineȱIntensionen,ȱd.ȱ h.ȱdieȱihnȱdefinierendenȱEigenschaften,ȱ werdenȱ ihmȱ inȱ denȱ Zeilenȱ (19)ȱ bisȱ (22)ȱ inȱ Gestaltȱ vonȱ Fassettenȱ zugeordnet.ȱ Diesȱ istȱ zunächstȱ derȱeingebauteȱBasistypȱxs:stringȱinȱderȱZeileȱ(19)ȱmitȱHilfeȱdesȱAttributsȱbaseȱdesȱ Spracheelementsȱ.ȱDieȱEinschränkungȱderȱmöglichenȱWerteȱdesȱDatenȬ typsȱTyp_AnredeȱerfolgtȱinȱzweiȱSchritten.ȱZuerstȱwirdȱmitȱderȱFassetteȱȱ dieȱLängeȱderȱmöglichenȱZeichenkettenȱaufȱvierȱZeichenȱeingeschränkt.ȱImȱzweiȬ tenȱSchrittȱwerdenȱmitȱderȱzweimaligenȱAnwendungȱderȱFassetteȱȱ dieȱ zulässigenȱ Werteȱ festgelegt.ȱ Inȱ derȱ herkömmlichenȱ Datenbanktechnikȱ beȬ zeichnetȱmanȱdiesȱauchȱmitȱFestlegungȱderȱDomäneȱbzw.ȱmitȱbenutzerdefinierterȱ Integrität.ȱ DieȱzurȱDefinitionȱderȱweiternȱDatentypenȱverwendetenȱFassettenȱsindȱimȱGroßenȱ undȱ Ganzenȱ selbsterklärendȱ undȱ solltenȱ inȱ derȱ Systemliteraturȱ nachgeschlagenȱ werdenȱ[W3C04b].ȱ Dieȱ Deklarationȱ derȱ Schemaelementeȱ undȱ desȱ Attributsȱ kannȱ nunȱ unterȱ BezugȬ nahmeȱ aufȱ dieȱ globalȱ bekanntenȱ benutzerdefiniertenȱ Datentypenȱ übersichtlichȱ vorgenommenȱwerden.ȱ Derȱ Bezeichnerȱ desȱ Wurzelelementsȱ desȱ Schemasȱ wirdȱ mitȱ demȱ Attributȱ nameȱ=ȱ ȈKundeȈȱ inȱ derȱ Zeileȱ (49)ȱ vonȱ Programmȱ 168ȱ festgelegt.ȱ Dasȱ Programmȱ istȱ dieȱ Fortsetzungȱ vonȱ Programmȱ 166.ȱ Dasȱ Wurzelelementȱ istȱ einȱ komplexerȱ Typ,ȱ daȱ seinȱElementinhaltȱausȱmehrerenȱihmȱhierarchischȱuntergeordnetenȱXMLȬElemenȬ 308ȱ 10.3ȱȱZentraleȱSprachkonstrukteȱ–ȱeineȱAuswahlȱ tenȱ besteht,ȱ dieȱ inȱ Formȱ einerȱ Sequenzȱ aufgereihtȱ sind.ȱ Inȱ XMLȱ Schemaȱ verstehtȱ manȱunterȱeinerȱSequenzȱeineȱFolgeȱvonȱXMLȬElementen,ȱderenȱReihenfolgeȱfestȬ gelegtȱ ist.ȱ Derȱ komplexeȱ Typȱ inȱ Zeileȱ (50)ȱ hatȱ keinenȱ Namen.ȱ Dadurchȱ istȱ erȱ einȱ anonymerȱTyp.ȱErȱwirdȱanȱOrtȱundȱStelleȱseinerȱVerwendungȱdurchȱdieȱAufzähȬ lungȱseinerȱDefinitionsbestandteileȱ(Intensionen)ȱdefiniert.ȱDieseȱbestehenȱausȱallȱ denȱAngabenȱvonȱProgrammzeileȱ(51)ȱbisȱ(84).ȱ DieȱverkürzteȱSyntaxȱvonȱȱzeigtȱdieȱfolgendeȱSyntaxbeschreibung.ȱ ȱ ȱ ȱ ȱ ȱ {einfacher Inhalt | komplexer Inhalt} komplexer Inhalt: [{Sequenz | Kollektion | Auswahl}] [Attribute] Syntaxȱ37:ȱSpracheelementȱȱ ImȱfolgendenȱBeispielȱinȱProgrammȱ168ȱliegtȱeinȱkomplexerȱInhaltȱmitȱgeschachȬ teltenȱSequenzenȱundȱeinemȱAttributȱvor.ȱ EineȱSequenzȱwirdȱmitȱdemȱSpracheelementȱȱeingeleitet.ȱDieȱReiȬ henfolgeȱ derȱ inȱ ihmȱ enthaltenenȱ Inhalte,ȱ d.ȱ h.ȱ XMLȬElemente,ȱ istȱ auchȱ fürȱ dieȱ XMLȬDokumenteȱaufȱderȱObjektebeneȱmaßgebend.ȱ DieȱverkürzteȱSyntaxȱvonȱȱzeigtȱdieȱfolgendeȱSyntaxbeschreibung.ȱ ȱ ȱ ȱ ȱ [Inhaltsbeschreibung] Syntaxȱ38:ȱSpracheelementȱȱ DieȱgeschachtelteȱSequenzȱabȱProgrammzeileȱ(63)ȱbisȱ(81)ȱbestehtȱausȱnullȱbisȱunȬ begrenztȱvielenȱXMLȬElementenȱvomȱTypȱRechnung.ȱDiesȱistȱinȱdenȱZeilenȱ(63)ȱbisȱ (66)ȱmitȱdenȱminOccursȬȱundȱmaxOccursȬAttributenȱfestgelegt.ȱDadurchȱkönnenȱimȱ XMLȬDokumentȱ aufȱ derȱ Objektebeneȱhierarchischȱunterhalbȱ einesȱ Kundenȱ belieȬ bigȱvieleȱXMLȬElementeȱvomȱTypȱRechnungȱdargestelltȱwerden.ȱ Dasȱ Spracheelementȱ namensȱ elementȱ istȱ dasȱ zentraleȱ Sprachkonstruktȱ vonȱ XMLȱ Schema.ȱ Mitȱ ihmȱ wirdȱ dasȱ wichtigsteȱ Sprachkonstruktȱ vonȱ XML,ȱ nämlichȱ dasȱ XMLȬElementȱ deklariert.ȱ Seineȱ Syntaxȱ istȱ rechtȱ umfangreich.ȱ Fürȱ unsereȱ einfühȬ rendenȱZweckeȱinȱdieȱSpracheȱXMLȱSchemaȱwirdȱwiederumȱnurȱeinȱkleinerȱAusȬ zugȱausȱderȱSyntaxȱhierȱbeschrieben.ȱ DieȱverkürzteȱSyntaxȱvonȱȱzeigtȱdieȱfolgendeȱSyntaxbeschreibung.ȱ 309ȱ 10ȱȱXMLȬDatenȱdefinierenȱ–ȱXMLȱSchemaȱ ȱ ȱ ȱ ȱ [Inhaltsbeschreibung] Syntaxȱ39:ȱSpracheelementȱȱ NachdemȱdieȱwichtigstenȱSpracheinrichtungenȱvonȱXMLȱSchemaȱbekanntȱsind,ȱistȱ nunȱdasȱSchemabeschreibungsprogrammȱinȱeinerȱDateiȱabzuspeichern.ȱAlsȱDateiȬ nameȱwählenȱwirȱKundeRechnungSchema.xsdȱundȱspeichernȱdieȱDateiȱimȱDateipfadȱ c:/XML_Schemata/KundeRechnungSchema.xsd.ȱ ImȱfolgendenȱArbeitsschrittȱwirdȱdasȱSchemaȱimȱXSRȱvonȱDB2ȱkatalogisiert.ȱVorȱ derȱAusführungȱdesȱDB2ȬBefehlsȱREGISTERȱinȱProgrammzeileȱ(3)ȱwirdȱmitȱdemȱ SQLȬBefehlȱ DROPȱXSROBJECTȱ dafürȱ gesorgt,ȱ dassȱ einȱ Schemaȱ mitȱ identischemȱ NamenȱnichtȱbereitsȱimȱXSRȱvorhandenȱist.ȱ ȱ DROP XSROBJECT KundeRechnungSchema ; REGISTER XMLSCHEMA 'http://www.Alfred-Moos.de/KundeRechnungSchema.xsd' FROM 'file://c:/XML_Schemata/KundeRechnungSchema.xsd' AS KundeRechnungSchema COMPLETE ; (1) (2) (3) (4) (5) (6) (7) (8) Programmȱ167:ȱRegistrierenȱdesȱSchemasȱKundeRechnungSchemaȱimȱXSRȱ 310ȱ (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) 10.3ȱȱZentraleȱSprachkonstrukteȱ–ȱeineȱAuswahlȱ (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) Programmȱ168:ȱXMLȬSchemaȱKundeȱundȱseineȱRechnungenȱ–ȱSchemaelementeȱundȱScheȬ maattributȱ Nachȱ erfolgreicherȱ Registrierungȱ desȱ Schemasȱ KundeRechnungSchemaȱ könnenȱ XMLȬDokumenteȱderȱObjektebeneȱinȱdieȱXMLȬSpalteȱDokumentȱgeladenȱwerden.ȱȱ DasȱProgrammȱ169ȱlöschtȱinȱdenȱZeilenȱ(1)ȱbisȱ(3)ȱzunächstȱalleȱDatenȱinȱderȱTabelȬ leȱ Dokument_XML,ȱ umȱ doppelteȱ Primärschlüsselwerteȱ zuȱ vermeiden.ȱ Bevorȱ dieȱ eingebauteȱ SQL/XMLȬFunktionȱ XMLVALIDATE()ȱ inȱ derȱ Zeileȱ (10)ȱ denȱ ValidieȬ rungsprozessȱ unterȱ Beachtungȱ derȱ syntaktischenȱ Vorgabenȱ desȱ Schemasȱ KundeȬ RechnungSchema,ȱdasȱinȱZeileȱ(37)ȱangegebenȱist,ȱdurchführenȱkann,ȱmussȱdieȱexȬ terneȱ zeichenartigeȱ Formȱ desȱ XMLȬDokumentsȱ inȱ seineȱ interneȱ Formȱ alsȱ XDMȬ Baumȱ konvertiertȱ werden.ȱ Diesenȱ Konvertierungsprozessȱ besorgtȱ dieȱ eingebauteȱ SQL/XMLȬFunktionȱXMLPARSE()ȱinȱProgrammzeileȱ(11).ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ 311ȱ 10ȱȱXMLȬDatenȱdefinierenȱ–ȱXMLȱSchemaȱ DELETE FROM Dokument_XML ; INSERT INTO Dokument_XML (Dokument_XML_Nr, Dokument) VALUES ( 'D001', XMLVALIDATE( XMLPARSE( DOCUMENT ' Herr Hugo Müller R001 2008-04-04 13000.00 R001 2008-04-05 2000.00 ' ) ACCORDING TO XMLSCHEMA ID KundeRechnungSchema ) ) ; (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) Programmȱ169:ȱXMLȬDokumentȱparsen,ȱvalidierenȱundȱladenȱ Dieȱ Zuordnungȱ desȱ Vokabularsȱ zumȱ Namensraumȱ http://www.AlfredȬMoos.de/ȱ KundeRechnungSchema.xsdȱwirdȱdurchȱdieȱVerwendungȱvonȱqualifiziertenȱNamenȱ derȱXMLȬElementeȱerreicht.ȱHierzuȱwirdȱinȱdenȱProgrammzeilenȱ(16)ȱundȱ(17)ȱdasȱ Namensraumpräfixȱ moȱ mitȱ demȱ Namensraumȱ verbunden.ȱ Dassȱ inȱ denȱ XMLȬ Dokumentenȱ aufȱ derȱ Objektebeneȱ qualifizierteȱ Namenȱ anzuwendenȱ sind,ȱ wurdeȱ inȱderȱSchemavereinbarungȱinȱProgrammȱ166ȱmitȱdemȱAttributȱelementFormDefaultȱ =ȱȈqualifiedȈȱinȱdenȱProgrammzeilenȱ(7)ȱundȱ(8)ȱfestgelegt.ȱ ȱ 312ȱ 10.4ȱȱÜbungenȱ 10.4 Übungen 12) ErarbeitenȱSieȱeinȱSchemaȱfürȱdieȱValidierungȱeinesȱKundendokumentesȱmitȱ benanntenȱTypen.ȱ RegistrierenȱSieȱdasȱSchemaȱundȱladenȱSieȱeinȱvalidiertesȱDokument.ȱ 13) ErarbeitenȱSieȱeinȱSchemaȱfürȱdieȱValidierungȱeinesȱKundendokumentesȱmitȱ anonymenȱTypen.ȱȱ RegistrierenȱSieȱdasȱSchemaȱundȱladenȱSieȱeinȱvalidiertesȱDokument.ȱ 14) ErarbeitenȱSieȱeinȱSchemaȱfürȱdieȱValidierungȱeinesȱRechnungsdokumentesȱ mitȱbenanntenȱTypen.ȱȱ RegistrierenȱSieȱdasȱSchemaȱundȱladenȱSieȱeinȱvalidiertesȱDokument.ȱ 15) ErarbeitenȱSieȱeinȱSchemaȱfürȱdieȱValidierungȱeinesȱRechnungsdokumentesȱ mitȱanonymenȱTypen.ȱȱ RegistrierenȱSieȱdasȱSchemaȱundȱladenȱSieȱeinȱvalidiertesȱDokument.ȱ 16) ErarbeitenȱSieȱeinȱSchemaȱfürȱdieȱValidierungȱeinesȱArtikeldokumentesȱmitȱ benanntenȱTypen.ȱȱ RegistrierenȱSieȱdasȱSchemaȱundȱladenȱSieȱeinȱvalidiertesȱDokument.ȱ 17) ErarbeitenȱSieȱeinȱSchemaȱfürȱdieȱValidierungȱeinesȱArtikeldokumentesȱmitȱ anonymenȱTypen.ȱȱ RegistrierenȱSieȱdasȱSchemaȱundȱladenȱSieȱeinȱvalidiertesȱDokument.ȱ 18) ErarbeitenȱSieȱeinȱSchemaȱfürȱdieȱValidierungȱeinesȱDokumentes,ȱdasȱalleȱ KundenȬ,ȱRechnungsȬ,ȱPositionsdatenȱenthältȱmitȱbenanntenȱTypen.ȱȱ RegistrierenȱSieȱdasȱSchemaȱundȱladenȱSieȱeinȱvalidiertesȱDokument.ȱ 313ȱ Literaturverzeichnis BCF99ȱ Booch,ȱG.,ȱu.ȱa.:ȱUMLȱforȱXMLȱSchemaȱMappingȱSpecification,ȱRationalȱ SoftwareȱCorp.,ȱ1999,ȱhttp://www.oasisȬopen.org/cover/fuchsȬ uml_xmlschema33.pdfȱ BJR97ȱ Booch,ȱG.,ȱu.ȱa.:ȱTheȱUnifiedȱModelingȱLanguageȱUserȱGuide,ȱReading,ȱ1998ȱ CD01ȱ Carlson,ȱD.:ȱModelingȱXMLȱApplicationsȱWithȱUML,ȱAddisonȬWesley,ȱ2001ȱ CHE76ȱ Chen,ȱP.ȱS.:ȱTheȱEntityȬRelationshipȱModelȱ–ȱTowardȱaȱUnifiedȱViewȱofȱ Data,ȱACMȱTransactionsȱonȱDatabaseȱSystems,ȱVol.ȱ1,ȱNo.ȱ1,ȱPagesȱ9ȱ–ȱ36,ȱ Marchȱ1976ȱ COD70ȱ Codd,ȱF.ȱE.:ȱAȱRelationalȱModelȱofȱDataȱforȱLargeȱSharedȱDataȱBanks,ȱ CommunicationsȱofȱtheȱACM,ȱVol.ȱ13,ȱNo.ȱ6,ȱPagesȱ377ȱ–ȱ387,ȱ1970ȱ DIN2330ȱ BegriffeȱundȱBenennungen;ȱAllgemeineȱGrundsätzeȱ DIN44300ȱ Informationsverarbeitung;ȱBegriffe,ȱBerlin,ȱ1988ȱ DIN66262ȱ Informationsverarbeitung;ȱProgrammkonstrukteȱzurȱBildungȱvonȱProȬ grammenȱmitȱabgeschlossenenȱZweigen,ȱBerlin,ȱ1985ȱȱ ERES04ȱ Eckstein,ȱR.ȱu.ȱS.:ȱXMLȱundȱDatenmodellierung,ȱHeidelberg,ȱ2004ȱ GBCLN03ȱ McGovern,ȱJ.,ȱBothner,ȱP.,ȱCagle,ȱK.,ȱLinn,ȱJ.,ȱNagarajan,ȱV.:ȱXQuery,ȱKickȱ Start,ȱIndianapolis,ȱ2003ȱ HKS07ȱ Hitzler,ȱP.ȱu.ȱa.:ȱSemanticȱWeb,ȱBerlinȱHeidelberg,ȱ2008ȱ IBM06aȱ IBM:ȱSQLȱReferenceȱVolumeȱ1ȱundȱVolumeȱ2,ȱFormȱSC10Ȭ4249Ȭ00ȱundȱ SC10Ȭ4250Ȭ00,ȱ2006ȱ IBM06bȱ IBM:ȱXMLȱGuide,ȱFormȱSC10Ȭ4254Ȭ00,ȱ2006ȱ IBM07aȱ IBM:ȱDB2ȱ9ȱpureXMLȱGuide,ȱFormȱNr.ȱSG24Ȭ7315Ȭ01,ȱ2007ȱ IBM07bȱ IBM:ȱpureXMLȱȬȱHandbuch,ȱFormȱSC12Ȭ3930Ȭ00,ȱ2007ȱ IET96ȱ IETFȱ(TheȱInternetȱEngineeringȱTaskȱForce),ȱRFCȱ2045:ȱMulitpurposeȱInterȬ netȱMailȱExtensionsȱ(MIME)ȱPartȱOne:ȱFormatȱofȱInternetȱMessageȱBodies,ȱ http://www.ietf.org/rfc/rfc2045.txt,ȱ1996ȱ ISO03ȱ ISO/IEC:ȱInformationȱtechnologyȱȬȱDatabaseȱlanguagesȱ–ȱSQLȱ–ȱPartȱ14:ȱ XMLȬRelatedȱSpecificationsȱ(SQL/XML),ȱDecemberȱ2003,ȱISO/IECȱ9075Ȭ 14:2003ȱ(E),ȱInternationalȱStandardȱ ISO8601ȱ ISO:ȱDataȱelementsȱandȱinterchangeȱformatsȱȬȱInformationȱinterchangeȱȬȱ Representationȱofȱdatesȱandȱtimes,ȱThirdȱeditionȱ2004Ȭ12Ȭ01,ȱInternationalȱ OrganizationȱforȱStandardization,ȱGenf,ȱ2004ȱ ȱ315 Literaturverzeichnisȱ ISO88ȱ ISOȱ8879:1986(E):ȱInformationȱprocessingȱ–ȱTextȱandȱOfficeȱSystemsȱ–ȱ StandardȱGeneralizedȱMarkupȱLanguageȱ(SGML),ȱ1stȱed.ȱOct.ȱ15,ȱ1986,ȱ InternationalȱOrganizationȱforȱStandardization,ȱGenf,ȱ1986ȱ LS04ȱ Lehner,ȱW,ȱSchöning,ȱH:ȱXQuery,ȱGrundlagenȱundȱfortgeschritteneȱMethoȬ den,ȱHeidelberg,ȱ2004ȱ MFM04ȱ Manola,ȱF.,ȱMiller,ȱE.:ȱResourceȱDescriptionȱFrameworkȱ(RDF),ȱRDFȱPrimer,ȱ W3CȱRecommendationȱ10ȱFebruaryȱ2004,ȱhttp://www.w3.org/TR/rdfȬ primer/,ȱAbrufȱ20.11.2007ȱ MOO04ȱ Moos,ȱA.:ȱDatenbankȬEngineering,ȱWiesbaden,ȱ2004ȱ NB04ȱ Blum,ȱN.:ȱAlgorithmenȱundȱDatenstrukturen,ȱMünchen,ȱ2004ȱ NM07ȱ Nicola,ȱM.,ȱJain,ȱU.:ȱUpdateȱXMLȱinȱDB2ȱ9.5,ȱIBMȱDeveloperWorks,ȱ 10.11.2007,ȱ http://www.ibm.com/developerworks/db2/library/techarticle/dmȬ 0710nicola/?S_TACT=105AGX11&S_CMP=LP#downloadȱ NW83ȱ N.ȱWirth,ȱAlgorithmenȱundȱDatenstrukturen,ȱ3.,ȱüberarbeiteteȱAufl.,ȱStuttȬ gart,ȱ1983ȱ NWG98ȱ NetworkȱWorkingȱGroupȱ(T.ȱBernersȬLee):ȱRFCȱ2396:ȱUniformȱResourceȱ Identifiersȱ(URI):ȱGenericȱSyntax,ȱhttp://www.ietf.org/rfc/rfc2396.txt,ȱ1998ȱ SCM06ȱ Saracco,ȱC.ȱM.:ȱDevelopȱJavaȱapplicationsȱforȱDB2ȱXMLȱdata,ȱhttp://wwwȬ 128.ibm.com/developerworks/db2/library/techarticle/dmȬ0605saracco/,ȱ2006ȱ Sch03ȱ Schöning,ȱH.:ȱXMLȱundȱDatenbanken,ȱMünchenȱWien,ȱ2003ȱ SS06ȱ G.ȱSaake,ȱK.ȬU.ȱSattler:ȱAlgorithmenȱundȱDatenstrukturen,ȱ3.,ȱüberarbeiteteȱ Auflage,ȱHeidelberg,ȱ2006ȱ STR02ȱ Straub,ȱH.ȱR.:ȱDasȱinterpretierendeȱSystem,ȱWolfertswil,ȱ2003ȱ W3C04aȱ W3C:ȱXMLȱSchemaȱPartȱ0:ȱPrimerȱSecondȱEdition.ȱW3CȱRecommendationȱ 28.ȱOctoberȱ2004,ȱhttp://www.w3.org/TR/xmlschemaȬ0ȱ W3C04bȱ W3C:ȱXMLȱSchemaȱPartȱ1:ȱStructuresȱSecondȱEdition.ȱW3CȱRecommendaȬ tionȱ28.ȱOctoberȱ2004,ȱhttp://www.w3.org/TR/xmlschemaȬ1ȱ W3C04cȱ W3C:ȱXMLȱSchemaȱPartȱ2:ȱDatatypesȱSecondȱEdition.ȱW3CȱRecommendaȬ tionȱ28.ȱOctoberȱ2004,ȱhttp://www.w3.org/TR/xmlschemaȬ2ȱ W3C05Dȱ W3C:ȱXQueryȱ1.0ȱandȱXPathȱ2.0ȱDataȱModelȱ(XDM),ȱW3CȱCandidateȱRecȬ ommendation,ȱ3ȱNovemberȱ2005,ȱhttp://www.w3.org/TR/2005/CRȬxpathȬ datamodelȬ20051103/ȱ W3C05Fȱ W3C:ȱXQueryȱ1.0ȱandȱXPathȱ2.0ȱFunctionsȱandȱOperators,ȱW3CȱCandidateȱ Recommendation,ȱ3ȱNovemberȱ2005,ȱhttp://www.w3.org/TR/2005/CRȬ xpathȬfunctionsȬ20051103/ȱ W3C05Xȱ W3C:ȱXQueryȱ1.0:ȱAnȱXMLȱQueryȱLanguage,ȱW3CȱCandidateȱRecommenȬ 316ȱ Literaturverzeichnisȱ dation,ȱ3ȱNovemberȱ2005,ȱhttp://www.w3.org/TR/2005/CRȬxqueryȬ 20051103/ȱ W3C06ȱ W3C:ȱXMLȱCoreȱWorkingȱGroupȱPublicȱPage,ȱ http://www.w3.org/XML/Core/#Publicationsȱ W3C06aȱ W3C:ȱExtensibleȱMarkupȱLanguageȱ(XML)ȱ1.0ȱ(FourthȱEdition).ȱW3CȱRecȬ ommendationȱ16ȱAugustȱ2006,ȱeditedȱinȱplaceȱ29ȱSeptemberȱ2006.ȱȱ http://www.w3.org/TR/xmlȱ W3C06bȱ W3C:ȱNamespacesȱinȱXMLȱ1.0ȱ(SecondȱEdition).ȱW3CȱRecommendationȱ16ȱ Augustȱ2006.ȱhttp://www.w3.org/TR/xmlȬnamesȱ W3C06cȱ W3C:ȱExtensibleȱMarkupȱLanguageȱ(XML)ȱ1.1ȱ(SecondȱEdition).ȱW3CȱRecȬ ommendationȱ16ȱAugustȱ2006,ȱeditedȱinȱplaceȱ29ȱSeptemberȱ2006.ȱȱ http://www.w3.org/TR/xml11ȱ W3C06dȱ W3C:ȱNamespacesȱinȱXMLȱ1.1ȱ(SecondȱEdition).ȱW3CȱRecommendationȱ16ȱ Augustȱ2006.ȱhttp://www.w3.org/TR/xmlȬnames11ȱ W3C06eȱ W3C:ȱXMLȱSchemaȱ1.1ȱPartȱ2:ȱDatatypes.ȱW3CȱWorkingȱDraftȱ17ȱFebruaryȱ 2008,ȱhttp://www.w3.org/TR/xmlschema11Ȭ2ȱ W3C07ȱ W3C:ȱWebȱOntologyȱLanguageȱ(OWL),ȱhttp://www.w3.org/2004/OWLȱ W3C07aȱ W3C:ȱXMLȱSchemaȱDefinitionȱLanguageȱ(DSDL)ȱ1.1ȱPartȱ1:ȱStructures.ȱW3Cȱ WorkingȱDraftȱ30ȱAugustȱ2007,ȱhttp://www.w3.org/TR/xmlschema11Ȭ1ȱ W3C07Uȱ W3C:ȱXMLȱQueryȱUseȱCases,ȱW3CȱWorkingȱGroupȱNote,ȱ23ȱMarchȱ2007,ȱ http://www.w3.org/TR/xqueryȬuseȬcases/ȱ W3C08ȱ W3C:ȱXQueryȱUpdateȱFacilityȱ1.0,ȱW3CȱCandidateȱRecommendationȱ14ȱ Marchȱ2008,ȱhttp://www.w3.org/TR/2008/CRȬxqueryȬupdateȬ10Ȭ20080314/ȱ WP07ȱ Walmsley,ȱP.ȱ:ȱXQuery,ȱSebastopol,ȱOȇReillyȱMedia,ȱ2007ȱ ȱ 317ȱ Sachwortverzeichnis 1NFȱȱ15ȱ Ungleichheitȱȱ177ȱ 3NFȱȱ15ȱ Alterȱȱ16ȱ abgeleiteterȱTypȱȱ135ȱ Alternativausdruckȱȱ226ȱ Abhängigkeitsbeziehungȱȱ305ȱ bedingteȱVerarbeitungȱȱ181ȱ abstrakterȱDatentypȱȱ131ȱ einfacheȱAlternativeȱȱ181ȱ abstrakterȱTypȱȱ142ȱ AccordingȱtoȱXMLSCHEMAȱIDȱȱ300ȱ Achseȱ attributeȱȱ206,ȱ213ȱ childȱȱ206,ȱ209ȱ descendantȱȱ206,ȱ210ȱ descendantȬorȬselfȱȱ206,ȱ212ȱ Knotenbezeichnungȱȱ206ȱ Nameȱȱ206ȱ ifȱthenȱelseȱȱ181ȱ Mehrfachalternativeȱȱ181ȱ Analyseȱȱ13ȱ Analysephaseȱȱ12ȱ anonymȱ returnȱȱ113ȱ Sequenzȱȱ113ȱ APIȱȱ285ȱ Architekturȱȱ11,ȱ87ȱ parentȱȱ206,ȱ214ȱ architekturgetriebenȱȱ68ȱ Prädikatȱȱ206ȱ architekturgetriebeneȱ Softwareentwicklungȱȱ42ȱ selfȱȱ206,ȱ211ȱ Additionȱȱ113ȱ afterȱȱ271ȱ Aggregatsfunktionȱfnȱ avg()ȱȱ242,ȱ248ȱ count()ȱȱ242,ȱ246,ȱ248ȱ max()ȱȱ242,ȱ248ȱ min()ȱȱ242,ȱ248ȱ sum()ȱȱ242,ȱ247ȱ allgemeinerȱVergleichȱȱ177ȱ Argumentȱȱ157ȱ asȱfirstȱintoȱȱ271ȱ asȱlastȱintoȱȱ271ȱ ASȬKlauselȱȱ46ȱ Namensraumȱȱ60ȱ Assoziationȱȱ13,ȱ15ȱ atomarerȱWertȱȱ106,ȱ108ȱ atomisierenȱȱ240ȱ Attributȱȱ8,ȱ10,ȱ11,ȱ12,ȱ48ȱ attributeȱȱ124,ȱ213ȱ Gleichheitȱȱ177ȱ attribute()ȱȱ220ȱ größerȱalsȱȱ177ȱ attributiveȱBeziehungȱȱ9ȱ größerȱoderȱgleichȱȱ177ȱ Attributknotenȱȱ50,ȱ118ȱ kleinerȱalsȱȱ177ȱ kleinerȱoderȱgleichȱȱ177ȱ attributzentriertȱȱ48,ȱ50,ȱ83ȱ Ausdruckȱȱ157ȱ dyadischȱȱ134ȱ ȱ319 Sachwortverzeichnisȱ Filterausdruckȱȱ159ȱ BIGINTȱȱ136ȱ FLWORȱȱ233ȱ binäreȱDatenȱȱ152ȱ Mengenausdruckȱȱ184ȱ Blattȱȱ2ȱ numerischerȱAusdruckȱȱ159ȱ quantifizierendȱȱ183ȱ Vergleichsausdruckȱȱ159ȱ Ausprägungȱȱ7,ȱ8ȱ Ausprägungsebeneȱȱ24ȱ äußererȱGleichheitsverbundȱȱ256ȱ Auswahlȱȱ305ȱ auszeichnenȱȱ1ȱ Auszeichnungȱȱ1ȱ Auszeichnungssprachenȱȱ3ȱ BackusȬNaurȬNotationsformȱȱ17ȱ baseȱȱ298ȱ Baumȱȱ24ȱ tiefȱgeschachteltȱȱ68ȱ Blattelementȱȱ48ȱ Blattknotenȱȱ2ȱ boolescherȱAusdruckȱȱ179ȱ booleschesȱUndȱȱ159ȱ CASTȱ SQLȱȱ134ȱ castȱasȱȱ134,ȱ151ȱ CCYY[z]ȱȱ145ȱ CCYYȬMM[z]ȱȱ146ȱ CCYYȬMMȬDDȱȱ143ȱ CCYYȬMMȬDDThh:mm:ssȱȱ145ȱ ChenȱPinȬShanȱȱ11ȱ childȱȱ209ȱ CLOBȱȱ41,ȱ95ȱ CoddȱE.ȱF.ȱȱ14ȱ Baumstrukturȱȱ37ȱ collapseȱȱ303ȱ Bauplanȱȱ68ȱ COLUMNSȱȱ264ȱ Bedeutungȱȱ3ȱ commentȱȱ125ȱ bedingteȱVerarbeitungȱȱ181ȱ comment()ȱȱ218ȱ Befehlseditorȱȱ109ȱ Compiliererȱȱ32ȱ Befehlszeilenprozessorȱȱ109ȱ COMPLETEȱȱ299ȱ beforeȱȱ271ȱ complexTypeȱȱ309ȱ Begriffȱȱ3,ȱ8,ȱ11,ȱ12,ȱ14,ȱ48,ȱ107,ȱ128,ȱ308ȱ concat()ȱȱ112,ȱ113ȱ Begriffsbezeichnerȱȱ3,ȱ12ȱ copyȱȱ269ȱ Begriffsschemaȱȱ10ȱ COUNTȱȱ64ȱ Begriffssystemȱȱ3,ȱ4,ȱ7ȱ CREATEȱȱ16ȱ Benutztbeziehungȱȱ305ȱ CREATEȱDATABASEȱȱ17ȱ Bereichsausdruckȱȱ113ȱ CREATEȱTABLEȱȱ17ȱ Bezeichnerȱȱ3ȱ Darstellungsmengeȱȱ131ȱ Beziehungȱ DataȱControlȱLanguageȱȱ16ȱ Abhängigkeitsbeziehungȱȱ305ȱ DataȱDescriptionȱLanguageȱȱ16,ȱ128ȱ Benutztbeziehungȱȱ305ȱ DataȱManipulationȱLanguageȱȱ16,ȱ269ȱ Beziehungstypȱȱ11,ȱ12,ȱ13,ȱ15ȱ 320ȱ DATEȱȱ143ȱ Sachwortverzeichnisȱ Datenȱȱ12ȱ Datumstypȱȱ143ȱ Datenanalyseȱȱ12ȱ DB2ȱȱ14ȱ Datenarchitekturȱȱ7,ȱ11,ȱ12,ȱ14ȱ DB2ȬBefehlseditorȱȱ32ȱ Datenbankdiagrammȱȱ14ȱ DB2ȬClientȱȱ109ȱ Datenbankkatalogȱȱ16,ȱ291ȱ db2Ȭfn:sqlqueryȱȱ32ȱ Datenbankmodellȱȱ14ȱ db2Ȭfn:sqlquery()ȱȱ194,ȱ196,ȱ229ȱ Datenbankzugriffsfunktionenȱdb2Ȭfnȱ db2Ȭfn:xmlcolumnȱȱ32ȱ sqlquery()ȱȱ194ȱ db2Ȭfn:xmlcolumn()ȱȱ194,ȱ239ȱ xmlcolulmn()ȱȱ194ȱ DCLȱȱ16ȱ Datenbaumȱȱ2,ȱ24,ȱ107ȱ Datenberechtigungsspracheȱȱ16ȱ Datendefinitionsspracheȱȱ16ȱ Datenmanipulationsspracheȱȱ16,ȱ158ȱ Datenmodellȱȱ7ȱ Datenstrukturȱȱ14ȱ Datentypȱȱ16ȱ abstraktȱȱ131ȱ ȬȬȬDD[z]ȱȱ146ȱ DDLȱȱ16,ȱ128,ȱ292ȱ DEȱȱ17ȱ DECIMALȱȱ136ȱ Definitionȱȱ3ȱ Typdefinitionȱȱ302ȱ Deklarationȱȱ7,ȱ9ȱ Namensraumȱȱ91ȱ benanntȱȱ308ȱ DELETEȱȱ16ȱ Datumȱȱ142ȱ Denkeinheitȱȱ3ȱ eingebautȱȱ130ȱ globalȱȱ308ȱ konkretȱȱ142ȱ dependencyȱrelationshipȱȱ20ȱ descendantȱȱ210ȱ descendantȬorȬselfȱȱ212ȱ Designȱȱ13,ȱ14ȱ numerischȱȱ135,ȱ164ȱ Deskriptorȱȱ2,ȱ4ȱ primitivȱȱ142,ȱ150ȱ dezimaleȱFestpunktzahlȱȱ128ȱ XMLȱȱ292ȱ Differenzȱzwischenȱzweiȱȱ Zeitpunktenȱȱ148ȱ xsȱ base64Binaryȱȱ152ȱ hexBinaryȱȱ152ȱ zeichenförmigȱȱ139ȱ Zeitȱȱ142ȱ DatentypȱXMLȱȱ16,ȱ17,ȱ29,ȱ61,ȱ95ȱ Datentypumwandlungȱ explizitȱȱ129ȱ Datenunabhängigkeitȱȱ22ȱ Differenzmengeȱȱ184,ȱ186ȱ DINȱ2330ȱȱ3ȱ DIN44300ȱȱ12ȱ Disziplinȱȱ68ȱ divȱȱ112ȱ Divisionȱȱ112ȱ ganzzahligȱȱ112ȱ DMLȱȱ16,ȱ158,ȱ269ȱ doȱdeleteȱȱ277,ȱ278ȱ 321ȱ Sachwortverzeichnisȱ doȱinsertȱȱ271ȱ Einschränkungȱȱ303,ȱ305ȱ doȱrenameȱȱ281ȱ Eintragȱȱ105,ȱ108,ȱ157ȱ doȱreplaceȱȱ278,ȱ279ȱ elementȱȱ309ȱ doȱreplaceȱvalueȱofȱȱ279ȱ Elementȱ documentȱȱ122ȱ Objektelementȱȱ292ȱ documentȬnode()ȱȱ220ȱ Schemaelementȱȱ292ȱ dokumentenorientiertesȱ Datenbankmodellȱȱ14ȱ Sprachelementȱȱ292ȱ Dokumentinhaltȱȱ3ȱ Dokumentknotenȱȱ37,ȱ121ȱ Dokumentordnungȱȱ190ȱ Dollarzeichenȱȱ157ȱ Domäneȱȱ308ȱ Doppelpunktȱȱ59ȱ zweiȱ:ȱȱ208ȱ DOUBLEȱȱ136ȱ DROPȱȱ16ȱ DROPȱXSROBJECTȱȱ299,ȱ310ȱ DTDȱȱ1ȱ Dualzahlȱȱ128,ȱ135ȱ Duplikateȱ eliminierenȱȱ254ȱ dyadischȱȱ134,ȱ178ȱ dyadischerȱOperatorȱ toȱȱ113ȱ Ebeneȱ element()ȱȱ219ȱ elementFormDefaultȱȱ308ȱ Elementhierarchieȱȱ48ȱ Elementinhaltȱȱ2ȱ Elementinhaltsausdruckȱȱ39,ȱ46ȱ Elementknotenȱȱ37,ȱ38,ȱ117ȱ ElementȬWertȱȱ2ȱ elementzentriertȱȱ47,ȱ50,ȱ54,ȱ71,ȱ83ȱ Empfängerȱȱ3ȱ encoding=ȈUTFȬ8Ȉȱȱ41ȱ EndeȬElementȱȱ2ȱ EndeȬTagȱȱ38ȱ Endwertȱȱ159ȱ Entitätȱȱ13ȱ EntitätsȬBeziehungsȬDiagrammȱȱ11ȱ EntitätsȬBeziehungsȬModellenȱȱ11ȱ Entitätstypȱȱ11,ȱ12,ȱ13,ȱ14,ȱ20ȱ EntityȬRelationshipȱDiagramȱȱ11ȱ EntityȬRelationshipȱModelȱȱ11ȱ Ausprägungsebeneȱȱ22ȱ Entwicklungsansatzȱ Modellierungsebeneȱȱ22ȱ gemischtȱȱ51,ȱ87ȱ Ebenenordnungȱȱ200ȱ Entwurfȱȱ13ȱ effektiverȱWahrheitswertȱȱ222ȱ Entwurfsphaseȱȱ14ȱ eindeutigȱȱ58ȱ enumerationȱȱ303ȱ Eindeutigkeitȱȱ60ȱ Erbschaftȱȱ10,ȱ131ȱ einfacheȱAlternativeȱȱ181ȱ ERDȱȱ11ȱ einfachesȱXMLȬElementȱȱ57ȱ ERMȱȱ11,ȱ13,ȱ14,ȱ20ȱ eingebauteȱFunktionenȱȱ160ȱ ErweiterbareȱAuszeichnungsspracheȱȱ1ȱ einmaligerȱZeitpunktȱȱ142ȱ everyȱȱ183ȱ 322ȱ Sachwortverzeichnisȱ Existenzabhängigkeitȱȱ8ȱ string()ȱȱ173ȱ existenzielleȱAbhängigkeitȱȱ2ȱ stringȬjoin()ȱȱ173ȱ Expansionȱȱ77ȱ stringȬlength()ȱȱ174ȱ EXtensibleȱMarkȬupȱLanguageȱȱ1ȱ Extensionȱȱ3,ȱ8,ȱ9,ȱ107ȱ facetȱȱ303ȱ Faktenȱȱ12ȱ stringȬtoȬcodepoints()ȱȱ174ȱ substring()ȱȱ174ȱ substringȬafter()ȱȱ174ȱ falschȱȱ151ȱ substringȬbefore()ȱȱ174ȱ falseȱȱ151ȱ tokenize()ȱȱ174ȱ Fassetteȱȱ303,ȱ305,ȱ308ȱ translate()ȱȱ174ȱ Filterausdruckȱȱ159,ȱ220ȱ zeroȬorȬone()ȱȱ162ȱ firstȱinȱȬȱfirstȱoutȱȱ105ȱ FLWORȱȱ236ȱ FLWORȬAusdruckȱȱ114,ȱ233ȱ fnȱ fn:avg()ȱȱ248ȱ fn:boolean()ȱȱ151ȱ fn:concat()ȱȱ139ȱ fn:count()ȱȱ246,ȱ248ȱ codepointsȬtoȬstring()ȱȱ172ȱ fn:data()ȱȱ129,ȱ130ȱ compare()ȱȱ172ȱ fn:distinctȬvalues()ȱȱ220ȱ concat()ȱȱ172ȱ fn:false()ȱȱ151ȱ contains()ȱȱ172ȱ fn:max()ȱȱ248ȱ count()ȱȱ162ȱ fn:min()ȱȱ248ȱ distinctȬvalues()ȱȱ163ȱ empty()ȱȱ162ȱ endsȬwith()ȱȱ172ȱ exactlyȬone()ȱȱ162ȱ fn:sum()ȱȱ247,ȱ248ȱ fn:true()ȱȱ151ȱ fn:xmlcolumn()ȱȱ230ȱ forȱȱ114,ȱ233ȱ ForeignȱKeyȱȱ16ȱ exists()ȱȱ162ȱ fractionDigitsȱȱ303ȱ indexȬof()ȱȱ163ȱ Fragezeichenȱȱ134ȱ lowerȬcase()ȱȱ172ȱ Fremdschlüsselȱȱ15,ȱ16ȱ matches()ȱȱ173ȱ Funktionȱ normalizeȬspace()ȱȱ173ȱ normalizeȬunicode()ȱȱ173ȱ not()ȱȱ179ȱ oneȬorȬmore()ȱȱ162ȱ replace()ȱȱ173ȱ startsȬwith()ȱȱ173ȱ eingebautȱȱ160ȱ überladenȱȱ134ȱ funktionaleȱSpracheȱȱ113ȱ Funktionsaufrufȱȱ157ȱ Gänsefüßchenȱȱ39ȱ Ganzesȱȱ8ȱ gemischtesȱXMLȬElementȱȱ57ȱ 323ȱ Sachwortverzeichnisȱ Generalisierungȱȱ9,ȱ108ȱ strukturellȱȱ83ȱ Generalisierungsbeziehungȱȱ9ȱ idivȱȱ112ȱ Generalisierungsdiagrammȱȱ131ȱ IECȱȱ16ȱ Generalisierungspfeilȱȱ131ȱ IEEEȱȱ136ȱ Gesamtobligoȱȱ247ȱ Implementierungȱȱ14,ȱ16,ȱ157ȱ Geschäftsregelȱȱ12ȱ implizitȱȱ62ȱ geschweifteȱKlammerȱȱ119ȱ INCLUDINGȱXMLDECLARATIONȱȱ41ȱ getString()ȱȱ287ȱ Informationȱȱ12ȱ Gleichheitȱȱ176ȱ Infosetȱȱ29,ȱ106ȱ Gleichheitsverbundȱȱ20,ȱ252ȱ Inhaltsausdruckȱȱ119ȱ Gleitpunktzahlȱȱ128ȱ INSERTȱȱ16ȱ GMTȱȱ144ȱ Instanceȱȱ7ȱ Grammatikȱȱ1ȱ Instanzȱȱ7ȱ GRANTȱȱ17ȱ INTEGERȱȱ136ȱ Graphȱȱ2ȱ Intensionȱȱ3,ȱ8,ȱ9,ȱ12,ȱ48,ȱ58,ȱ107,ȱ308ȱ GreenwichȱMeanȱTimeȱȱ144ȱ internȱcodierteȱFormȱȱ29ȱ Großbuchstabenȱȱ46ȱ InternationalȱElectrotechnicalȱ Commissionȱȱ16ȱ größerȱalsȱȱ176ȱ GROUPȱBYȱȱ249ȱ InternationalȱOrganizationȱforȱ Standardizationȱȱ16ȱ Gruppenselektionȱȱ250ȱ Internetȱȱ60ȱ Gruppierungȱȱ249ȱ InternetȬExplorerȱȱ44ȱ Gültigkeitsprüfungȱȱ96ȱ intoȱȱ271ȱ Hauptanfrageȱȱ73,ȱ77ȱ ISOȱȱ16ȱ HAVINGȱȱ250ȱ ISOȱ8601ȱȱ145ȱ hh:mm:ss[.ssssss][z]ȱȱ146ȱ itemȱȱ105ȱ Hierarchieȱȱ3,ȱ9,ȱ20ȱ Jahrȱȱ144ȱ hierarchischesȱDatenbankmodellȱȱ14ȱ Javaȱȱ285ȱ homonymȱȱ60ȱ JavaȱDatabaseȱConnectivityȱȱ285ȱ Homonymȱȱ58ȱ JDBCȱȱ285ȱ http://www.w3.org/2001/XMLȬȱ Schemaȱȱ128,ȱ130,ȱ133,ȱ297,ȱ299ȱ joinȱȱ20ȱ größerȱoderȱgleichȱȱ176ȱ http://www.w3.org/2005/xpathȬ datatypesȱȱ130,ȱ133ȱ hybridȱȱ48ȱ Identitätȱȱ108,ȱ177ȱ spiegelbildlichȱȱ68ȱ 324ȱ innerȱjoinȱȱ21,ȱ81,ȱ252ȱ outerȱjoinȱȱ256ȱ kanonischeȱFormȱȱ132ȱ Kantenȱȱ2ȱ Kardinalitätȱȱ22ȱ Sachwortverzeichnisȱ Klammerȱ geschweiftȱȱ122ȱ berechneterȱȱ116,ȱ118ȱ commentȱȱ125ȱ Klammerungȱȱ164ȱ direktȱȱ116,ȱ117,ȱ129ȱ Klasseȱȱ7,ȱ13,ȱ15,ȱ107ȱ direkterȱȱ241ȱ Klassendiagrammȱȱ7ȱ kleinerȱalsȱȱ176ȱ kleinerȱoderȱgleichȱȱ176ȱ Knotenȱȱ2,ȱ107,ȱ108ȱ documentȱȱ121ȱ elementȱȱ119ȱ processingȬinstructionȱȱ124ȱ Knotenbezeichnungȱȱ215ȱ textȱȱ125ȱ Knotentyptestȱȱ215ȱ Typkonstruktorȱȱ133ȱ attribute()ȱȱ215,ȱ220ȱ comment()ȱȱ215,ȱ218ȱ xsȱ boolean()ȱȱ151ȱ documentȬnode()ȱȱ215,ȱ220ȱ Konstruktorfunktionȱȱ30ȱ element()ȱȱ215,ȱ219ȱ Kontextȱȱ2ȱ node()ȱȱ215ȱ Kontextknotenȱȱ203,ȱ207,ȱ209ȱ processingȬinstruction()ȱȱ215,ȱ218ȱ text()ȱȱ215ȱ Knotentyptest()ȱ text()ȱȱ218ȱ Knotenvergleichȱ Konvertierungsfunktionȱȱ61ȱ koordinierteȱWeltzeitȱȱ144ȱ Korrelationsnameȱȱ77ȱ korrelierteȱUnteranfrageȱȱ77ȱ LATERALȱȱ73,ȱ78,ȱ81ȱ leereȱSequenzȱȱ265ȱ Identitätȱȱ177ȱ lengthȱȱ303ȱ relativeȱPositionȱȱ177ȱ Lesbarkeitȱȱ45ȱ kollabierenȱȱ77ȱ Kollektionȱȱ305ȱ letȱȱ114,ȱ233ȱ FolgeȱvonȱletȬKlauselnȱȱ237ȱ Kommaoperatorȱȱ112,ȱ158,ȱ160ȱ Levelorderȱȱ191,ȱ200,ȱ201,ȱ203ȱ Kommentarȱȱ87ȱ lexikalischeȱRepräsentationȱȱ151ȱ Kommentarknotenȱȱ37,ȱ38,ȱ54ȱ lexikalischerȱRaumȱȱ303ȱ Komplexitätȱ lexikalischerȱRepräsentationsraumȱȱ131ȱ globaleȱȱ41,ȱ68ȱ Literalȱȱ157ȱ Kompositionsbeziehungȱȱ8,ȱ10,ȱ11,ȱ72,ȱȱ 74,ȱ78ȱ Literalartȱȱ128ȱ konkreterȱDatentypȱȱ142ȱ Löschausdruckȱȱ277ȱ Konsistenzȱȱ43ȱ markȱupȱȱ1ȱ Konstruktorȱȱ133ȱ markierenȱȱ1ȱ attributeȱȱ124ȱ Lokalisierungsschrittȱȱ199,ȱ203ȱ Markierungȱȱ16ȱ 325ȱ Sachwortverzeichnisȱ maxExclusiveȱȱ303ȱ Nameȱȱ8ȱ maxInclusiveȱȱ303ȱ homonymerȱȱ59ȱ maxLengthȱȱ298,ȱ303ȱ qualifizierterȱȱ312ȱ maxOccursȱȱ309ȱ mehrdeutigȱȱ58ȱ Mehrfachalternativeȱȱ182ȱ Mengeȱȱ105ȱ Differenymengeȱȱ184ȱ Schnittmengeȱȱ184ȱ Vereinigungsmengeȱȱ184ȱ Mengenoperatorȱ exceptȱȱ184ȱ Namensqualifizierungȱȱ60ȱ Namensraumȱȱ59,ȱ87,ȱ91,ȱ128,ȱ297ȱ DefaultȬNamensraumȱȱ59ȱ NamensraumȬURIȱȱ60ȱ Namensraumpräfixȱȱ308,ȱ312ȱ Namensraumpräfixȱxsȱȱ128ȱ Namenstestȱȱ215ȱ NaNȱȱ222ȱ NavigationȱinȱBäumenȱ intersectȱȱ184ȱ Dokumentordnungȱȱ191ȱ unionȱȱ184ȱ HierarchischeȱOrdnungȱȱ191ȱ Metadatenȱȱ2,ȱ16,ȱ17,ȱ292ȱ Inorderȱȱ191ȱ Metadatumȱȱ48ȱ Levelorderȱȱ191ȱ Metaspracheȱȱ1ȱ Postorderȱȱ191ȱ Mikrosekundeȱȱ148ȱ minExclusiveȱȱ303ȱ minInclusiveȱȱ303ȱ Miniweltȱȱ7,ȱ11,ȱ12,ȱ14,ȱ20ȱ minLengthȱȱ298,ȱ303ȱ minOccursȱȱ309ȱ MM[z]ȱȱ146ȱ ȬȬMMȬDD[z]ȱȱ146ȱ modȱȱ112ȱ Modellierungsspracheȱȱ7,ȱ13ȱ modifyȱȱ269,ȱ271,ȱ281ȱ Modulodivisionȱȱ112ȱ Monatȱȱ144ȱ Multiplikationȱȱ112ȱ Multiplizitätȱȱ8,ȱ11,ȱ12,ȱ13,ȱ22,ȱ134ȱ einfachȱ1ȱȱ81ȱ vieleȱ*ȱȱ72,ȱ74,ȱ78ȱ Nachfolgerknotenȱȱ118ȱ 326ȱ Preorderȱȱ191ȱ Navigationsrichtungȱȱ206ȱ negativȱȱ112ȱ NeueȱZeileȱȱ157ȱ next()ȱȱ287ȱ node()ȱȱ217ȱ Normalformȱȱ14ȱ Normalisierungȱȱ15,ȱ20ȱ Nullȱȱ16,ȱ39,ȱ45ȱ numerischerȱDatentypȱȱ135ȱ Nutzdatenȱȱ2,ȱ16ȱ Oberbegriffȱȱ9ȱ Obergrenzeȱȱ113ȱ Objektȱȱ107ȱ Objektattributȱȱ293ȱ Objektelementȱȱ292,ȱ293ȱ Objektidentitätȱȱ108ȱ objektorientierteȱAnalyseȱȱ13ȱ Sachwortverzeichnisȱ objektorientierterȱEntwurfȱȱ13ȱ Parserȱȱ109ȱ objektorientiertesȱDatenbankmodellȱȱ14ȱ SQLȬParserȱȱ32ȱ Objektorientierungȱȱ7,ȱ59ȱ validierenderȱȱ41,ȱ60ȱ occurrenceȱindicatorȱȱ134ȱ XQueryȬParserȱȱ32ȱ Oderȱ dynamischesȱȱ183ȱ OIDȱȱ108ȱ Operandȱȱ157ȱ Operationȱȱ157ȱ Operationsmengeȱȱ131ȱ Operatorȱȱ157ȱ Additionȱȱ164ȱ arithmetischȱȱ112ȱ castȱasȱȱ134ȱ Divisionȱdivȱȱ164ȱ Divisionȱganzzahligȱidivȱȱ164ȱ Divisionsrestȱmodȱȱ164ȱ dyadischȱȱ111,ȱ178ȱ Kommaoperatorȱȱ158ȱ logischȱODERȱȱ179ȱ logischȱUNDȱȱ179ȱ Mulitiplikationȱȱ164ȱ Subtraktionȱȱ164ȱ toȱȱ159,ȱ160ȱ PASSINGȱȱ264ȱ PATHȱȱ264ȱ patternȱȱ303ȱ Pfadȱ hierarchischȱȱ78ȱ Pfadausdruckȱȱ178,ȱ199ȱ abgekürzteȱSchreibweiseȱȱ227ȱ absolutȱȱ200ȱ Knotenart,ȱKnotentypȱȱ208ȱ Navigationsachseȱȱ208ȱ Prädikatȱȱ208ȱ relativȱȱ200,ȱ203ȱ Positionȱ inȱSequenzȱȱ159ȱ nachherȱȱ178ȱ relativȱȱ178ȱ vorherȱȱ178ȱ positivȱȱ112ȱ Prädikatȱȱ42,ȱ159,ȱ221ȱ Gleichheitsprädikatȱȱ77ȱ OPTIONȱEMPTYȱONȱNULLȱȱ39,ȱ45,ȱ77ȱ ISȱVALIDATEDȱȱ299ȱ OPTIONȱNULLȱONȱNULLȱȱ39,ȱ45ȱ komplexesȱȱ225ȱ orderȱȱ114ȱ orderȱbyȱȱ233ȱ outerȱjoinȱȱ256ȱ OWLȱȱ5ȱ Pȱ[nY]ȱ[nM]ȱ[nD]ȱ[Tȱ[nH]ȱ[nM]ȱ[mS]ȱ]ȱȱ 148ȱ parentȱȱ214ȱ Prädikatsklammerȱ[]ȱȱ208ȱ XMLEXISTS()ȱȱ265ȱ Präfixȱȱ8,ȱ60ȱ Namensraumpräfixȱȱ59ȱ xdtȱȱ130ȱ xsȱȱ130ȱ ParentȬKnotenȱȱ38ȱ preserveȱȱ303ȱ parserȱȱ33ȱ Primärschlüsselȱȱ15,ȱ16ȱ 327ȱ Sachwortverzeichnisȱ PrimaryȱKeyȱȱ16ȱ registrierenȱȱ295ȱ primitiverȱDatentypȱȱ142ȱ regulärerȱAusdruckȱȱ303ȱ primitiverȱTypȱȱ135ȱ Relationȱȱ17,ȱ105,ȱ110ȱ print()ȱȱ287ȱ relationalesȱDatenbankmodellȱȱ14ȱ Prioritätȱȱ164,ȱ179ȱ Relationstypȱȱ14,ȱ15,ȱ20ȱ processingȬinstructionȱȱ124ȱ relativerȱPfadausdruckȱȱ203ȱ processingȬinstruction()ȱȱ218ȱ Relatorȱȱ176ȱ Projektionȱȱ20,ȱ23ȱ replaceȱȱ303ȱ Prologȱȱ1ȱ ResourceȱDescriptionȱFrameworkȱȱ5ȱ Prototypingȱ restrictionȱȱ298,ȱ303ȱ evolutionäresȱȱ68ȱ ResultSetȱȱ287ȱ PSVIȱȱ29,ȱ106ȱ returnȱȱ114,ȱ233,ȱ269ȱ Punktrechnungȱȱ112ȱ REVOKEȱȱ17ȱ qualifiedȱȱ308ȱ satisfiesȱȱ183ȱ Qualifikationȱȱ77ȱ schemaȱȱ298,ȱ308ȱ Qualifikationsoperatorȱȱ59ȱ Schemaȱȱ8ȱ Qualifikationspräfixȱȱ60ȱ Schemaattributȱȱ293ȱ qualifizierterȱNameȱȱ59ȱ Schemaebeneȱȱ292ȱ Qualifizierungȱȱ60ȱ Schemaelementȱȱ292,ȱ293ȱ Quantifizierungȱ komplexesȱȱ305ȱ existenzielleȱȱ183ȱ SchemaȬRepositoryȱȱ291ȱ universelleȱȱ183ȱ schemaȬvalideȱȱ292ȱ queueȱȱ105ȱ Schleifeȱȱ235ȱ RDBDȱȱ14,ȱ105ȱ Schlussfolgerungȱȱ5ȱ RDFȱȱ5ȱ Schnittmengeȱȱ184,ȱ186ȱ REALȱȱ136ȱ Schrägstrichȱȱ200ȱ Realweltȱȱ291ȱ Schreibdisziplinȱȱ82ȱ Realweltobjektȱȱ293ȱ SELECTȱȱ16,ȱ17ȱ Recommendationȱȱ1ȱ Selektorȱȱ59ȱ Redundanzȱȱ21,ȱ24ȱ selfȱȱ211ȱ Redundanzfreiheitȱȱ20ȱ Senderȱȱ3ȱ Referenzvariableȱȱ157ȱ Sequenzȱȱ105,ȱ108,ȱ110,ȱ157,ȱ194,ȱ196,ȱ305ȱ Regelȱȱ3ȱ anonymȱȱ157ȱ REGISTERȱȱ310ȱ leerȱȱ112,ȱ265ȱ XMLSCHEMAȱȱ299ȱ REGISTERȱXMLSCHEMAȱȱ304ȱ 328ȱ Sequenzausdruckȱȱ111,ȱ159ȱ sequenceȱȱ309ȱ Sachwortverzeichnisȱ serialisierenȱȱ30,ȱ40ȱ implizitȱȱ114ȱ Serialisierungȱ explizitȱȱ98ȱ implizitȱȱ98ȱ SETȱȱ276ȱ SGMLȱȱ1ȱ shreddingȱȱ261ȱ Sichtȱ externeȱSichtȱȱ22ȱ simpleTypeȱȱ298,ȱ305ȱ skalarerȱWertȱȱ106ȱ SMALLINTȱȱ136ȱ someȱȱ183ȱ Strichrechnungȱȱ113ȱ StructuredȱQueryȱLanguageȱȱ16ȱ Strukturȱ flachȱȱ20ȱ Strukturdiagrammȱȱ7ȱ StrukturierteȱAnfragespracheȱȱ16ȱ Subtraktionȱȱ113ȱ SuffixȱXMLȱȱ44ȱ SUMȱȱ64ȱ Syntaxȱȱ17ȱ Systemzweckȱȱ12ȱ Tabelleȱȱ16,ȱ20ȱ temporäreȱȱ73ȱ virtuelleȱȱ22,ȱ24ȱ sortierenȱȱ66ȱ TABLEȱȱ75ȱ Spalteȱȱ17ȱ Tabulatorȱȱ157ȱ Spaltenfunktionȱȱ64ȱ Tagȱȱ16,ȱ144ȱ Spezialisierungȱȱ9,ȱ11ȱ targetNamespaceȱȱ298,ȱ300ȱ Spezialisierungsdiagrammȱȱ131ȱ Teilȱȱ8ȱ Spiegelbildlichkeitȱȱ68ȱ Teilschlüsselabhängigkeitȱȱ14ȱ Spitzklammerȱȱ13ȱ TERRITORYȱDEȱȱ17ȱ Sprachelementȱȱ292ȱ textȱȱ125ȱ SQLȱȱ16ȱ Textȱȱ57ȱ 2003ȱȱ16ȱ text()ȱȱ218ȱ 2007ȱȱ16ȱ Textknotenȱȱ37,ȱ38ȱ SQL/XMLȱȱ29ȱ SQL:2003ȱȱ29ȱ SQL3ȱȱ14ȱ SQLȬPrädikatȱȱ267ȱ Startelementȱȱ2ȱ StartȬtagȱȱ38ȱ Startwertȱȱ159ȱ Stereotypȱȱ7,ȱ13,ȱ15,ȱ22,ȱ306ȱ Sternȱȱ14ȱ Steuerzeichenȱȱ157ȱ TIMESTAMPȱȱ143ȱ totalDigitsȱȱ303ȱ transformȱȱ269ȱ transitiveȱAbhängigkeitȱȱ14ȱ trueȱȱ151ȱ Tupelȱȱ105,ȱ110ȱ Typȱȱ7ȱ abgeleiteterȱȱ135ȱ anonymerȱȱ302ȱ benannterȱȱ302ȱ einfacherȱȱ302ȱ 329ȱ Sachwortverzeichnisȱ globalerȱȱ302ȱ Validierungȱȱ33,ȱ299ȱ komplexerȱȱ302,ȱ304ȱ valueȱspaceȱȱ131ȱ primitiverȱȱ135ȱ VALUESȱȱ40,ȱ109ȱ Typangleichungȱȱ138ȱ Typhierarchieȱȱ131ȱ Typkonstruktorȱȱ133ȱ typstrengeȱSpracheȱȱ128,ȱ138ȱ Typumwandlungsoperationȱȱ133ȱ UDBMSȱȱ14ȱ UMLȱȱ7,ȱ11,ȱ14,ȱ20ȱ Umsetzungsausdruckȱȱ269ȱ Variableȱȱ114,ȱ157ȱ VennȬDiagrammȱȱ184ȱ Verarbeitungshinweisknotenȱȱ37,ȱ38ȱ Verbundȱ Gleichheitsverbundȱȱ252ȱ Verbundoperatorȱȱ20ȱ Vereinigungsmengeȱȱ184,ȱ185ȱ Vergleichȱ unbekanntȱȱ16ȱ Gleichheitȱȱ176ȱ Undȱ größerȱalsȱȱ176ȱ booleschȱȱ159ȱ größerȱoderȱgleichȱȱ176ȱ dynamischȱȱ184ȱ kleinerȱalsȱȱ176ȱ Ungleichheitȱȱ176ȱ kleinerȱoderȱgleichȱȱ176ȱ Unicodeȱȱ17,ȱ141,ȱ297ȱ Ungleichheitȱȱ176ȱ UnifiedȱModelingȱLanguageȱȱ7ȱ UniversalȱResourceȱIdentifierȱȱ60ȱ UniversalȱTimeȱCoordinatedȱȱ144ȱ universellesȱDatenbanksystemȱȱ14ȱ Unixȱȱ199ȱ Unteranfrageȱȱ73,ȱ77ȱ korreliertȱȱ77,ȱ78,ȱ81ȱ Unterbegriffȱȱ9ȱ Vergleichsausdruckȱȱ226ȱ Vergleichsoperatorȱȱ176ȱ VERSIONȱȇ1.0ȇȱȱ41ȱ Verstehbarkeitȱȱ45ȱ Viewȱȱ22ȱ Vokabelȱȱ3,ȱ291,ȱ297ȱ Vokabelnȱȱ1ȱ Vokabularȱȱ43,ȱ58,ȱ60,ȱ87ȱ Untergrenzeȱȱ113ȱ Vokabularienȱȱ1ȱ Untertypensubstitutionȱȱ138ȱ Vorgängerknotenȱȱ38,ȱ118ȱ Untertypsubstitutionȱȱ138ȱ Vorzeichenȱ untypisiertȱȱ129ȱ negativȱȱ164ȱ UPDATEȱȱ16,ȱ270,ȱ276,ȱ278,ȱ280ȱ positivȱȱ164ȱ URIȱȱ60ȱ USINGȱCODESETȱȱ17ȱ UTCȱȱ144ȱ UTFȬ8ȱȱ17ȱ validierenȱȱ129,ȱ292,ȱ293ȱ Validiererȱȱ295ȱ 330ȱ Vorzeichenoperatorȱȱ112,ȱ164ȱ W3Cȱȱ1,ȱ105ȱ Wagenrücklaufȱȱ157ȱ wahrȱȱ151ȱ Wahrheitswertȱȱ159ȱ Sachwortverzeichnisȱ effektiverȱȱ222ȱ xdt:untypedȱȱ129,ȱ138ȱ falsch,ȱfalseȱȱ179ȱ xdt:untypedAtomicȱȱ129,ȱ138ȱ wahr,ȱtrueȱȱ179ȱ xdt:yearMonthDurationȱȱ150ȱ WebȱOntologyȱLanguageȱȱ5ȱ Wertebereichȱȱ113ȱ Wertemengeȱȱ131ȱ Werteraumȱȱ131ȱ Wertevergleichȱȱ176ȱ Wertknotenȱȱ118ȱ whereȱȱ114,ȱ233ȱ WHEREȬKlauselȱȱ77ȱ whiteȱspaceȱȱ97,ȱ157,ȱ303ȱ Wiederholungȱȱ235ȱ geschachtelteȱȱ235ȱ wiederkehrenderȱZeitpunktȱȱ142ȱ Windowȱȱ199ȱ wohlgeformtȱȱ96ȱ Wohlgeformtheitȱȱ29,ȱ122ȱ WorldȱWideȱWebȱConsortiumȱȱ1ȱ Wurzelȱȱ61ȱ Wurzelelementȱȱ53ȱ Wurzelknotenȱȱ2,ȱ117,ȱ122ȱ internerȱȱ37ȱ Wurzeltypȱȱ130,ȱ135ȱ XDMȱȱ29,ȱ37,ȱ105ȱ XDM/Baumȱȱ295ȱ XDMȬBaumȱȱ50,ȱ54,ȱ96ȱ einfügenȱȱ269ȱ ersetzenȱȱ269ȱ löschenȱȱ269ȱ umbenennenȱȱ269ȱ xdt:yearMonthDuration()ȱȱ148ȱ XMLȱȱ1,ȱ14,ȱ16,ȱ291ȱ XMLȱQueryȱȱ29ȱ XMLȱSchemaȱȱ14,ȱ33,ȱ106,ȱ128,ȱ141,ȱ291,ȱ 292,ȱ301,ȱ306ȱ XMLAGGȱȱ30,ȱ64,ȱ66ȱ XMLATTRIBUTESȱȱ30,ȱ38,ȱ50ȱ XMLCASTȱȱ31,ȱ61ȱ XMLCAST()ȱȱ98,ȱ134ȱ XMLCOMMENTȱȱ30,ȱ54,ȱ57ȱ XMLCONCATȱȱ30,ȱ61ȱ XMLDOCUMENTȱȱ31,ȱ37,ȱ38ȱ XMLȬDokumentȱȱ37ȱ XMLȬElementȱȱ2,ȱ3,ȱ38,ȱ57ȱ einfachȱȱ47,ȱ57ȱ gemischtȱȱ57,ȱ58ȱ komplexȱȱ47ȱ leerȱȱ38,ȱ47ȱ XMLELEMENTȱȱ31,ȱ38,ȱ39,ȱ45,ȱ49,ȱ59,ȱȱ 60,ȱ61ȱ XMLȬElementȬKnotenȱȱ50ȱ XMLEXISTSȱȱ31ȱ XMLEXISTS()ȱȱ265ȱ XMLFORESTȱȱ31,ȱ45ȱ XMLȬKontextȱȱ59ȱ XMLNAMESPACESȱȱ31,ȱ59ȱ xmlns:xsȱȱ297ȱ XMLPARSEȱȱ31ȱ XMLPARSE()ȱȱ97,ȱ300,ȱ311ȱ XDMȬKnotenȱȱ62,ȱ106,ȱ108,ȱ116ȱ XMLȬParserȱȱ292ȱ xdtȱȱ130ȱ XMLPIȱȱ31,ȱ62ȱ xdt:dayTimeDurationȱȱ150,ȱ168ȱ XMLQUERYȱȱ31ȱ xdt:dayTimeDuration()ȱȱ148ȱ XMLQUERY()ȱȱ270,ȱ275ȱ 331ȱ Sachwortverzeichnisȱ XMLȬSchemaȱȱ33,ȱ60,ȱ129ȱ xs:gMonthDayȱȱ146,ȱ150ȱ XMLȬSchemamodellȱȱ42ȱ xs:gYearȱȱ145,ȱ150ȱ XMLSERIALIZEȱȱ31,ȱ40ȱ xs:gYearMonthȱȱ146,ȱ150ȱ XMLSERIALIZE()ȱȱ98ȱ xs:hexBinaryȱȱ152,ȱ154ȱ XMLȬSpeicherȱȱ32,ȱ95ȱ xs:IDȱȱ140ȱ XMLTABLEȱȱ31ȱ xs:IDREFȱȱ140ȱ XMLTABLE()ȱȱ261ȱ xs:intȱȱ136ȱ XMLTEXTȱȱ31,ȱ57ȱ xs:integerȱȱ128,ȱ136ȱ XMLȬTypȱȱ129ȱ xs:languageȱȱ140ȱ XMLVALIDATEȱȱ32ȱ xs:longȱȱ136ȱ XMLVALIDATE()ȱȱ300,ȱ311ȱ xs:Nameȱȱ140ȱ XMLȬValidiererȱȱ33ȱ xs:NCNameȱȱ140ȱ XMLȬWertȱȱ29ȱ xs:negativeIntegerȱȱ136ȱ XPathȱ2.0ȱȱ190,ȱ199ȱ xs:NMTOKENȱȱ140ȱ XQueryȱȱ14,ȱ29,ȱ105ȱ xs:nonNegativeIntegerȱȱ136ȱ XQUERYȱȱ32,ȱ109ȱ xs:nonPositiveIntegerȱȱ136ȱ XQueryȱDataȱModelȱȱ29,ȱ37ȱ xs:normalizedStringȱȱ140ȱ XQuery_Referenz_Variableȱȱ264ȱ xs:NOTATIONȱȱ154,ȱ155ȱ XQueryȬVariableȱȱ114,ȱ157ȱ xs:positiveIntegerȱȱ136ȱ xsȱȱ130ȱ xs:QNameȱȱ154,ȱ155ȱ xs:anyAtomicTypeȱȱ135,ȱ142,ȱ150ȱ xs:shortȱȱ136ȱ xs:anyTypeȱȱ130,ȱ135ȱ xs:stingȱȱ128ȱ xs:anyURIȱȱ154,ȱ155ȱ xs:stringȱȱ140,ȱ151ȱ xs:base64Binaryȱȱ152,ȱ154ȱ xs:timeȱȱ146,ȱ149ȱ xs:booleanȱȱ151,ȱ154ȱ xs:tokenȱȱ140ȱ xs:byteȱȱ136ȱ xs:unsignedByteȱȱ136ȱ xs:dateȱȱ143,ȱ145,ȱ149,ȱ167,ȱ170ȱ xs:unsignedIntȱȱ136ȱ xs:dateTimeȱȱ143,ȱ145,ȱ150,ȱ168,ȱ170ȱ xs:unsignedLongȱȱ136ȱ xs:decimalȱȱ128,ȱ135,ȱ136ȱ xs:unsignedShortȱȱ136ȱ xs:decimal()ȱȱ130,ȱ133ȱ XSRȱȱ291,ȱ295,ȱ299,ȱ310ȱ xs:doubleȱȱ128,ȱ135,ȱ136ȱ zeroȱZeitversatzȱȱ144ȱ xs:durationȱȱ147,ȱ150ȱ Zeichenketteȱȱ128ȱ xs:duration()ȱȱ148ȱ Zeichenkettenwertȱȱ108ȱ xs:ENTITYȱȱ141ȱ Zeichenreferenzȱȱ141ȱ xs:floatȱȱ135,ȱ136ȱ Zeitarithmetikȱȱ148ȱ xs:gDayȱȱ146,ȱ150ȱ Zeitdauerȱȱ143ȱ xs:gMonthȱȱ146,ȱ150ȱ 332ȱ Sachwortverzeichnisȱ Zeitpunktȱ Zeitzoneȱȱ144ȱ einmaligȱȱ142ȱ Zugriffspfadȱȱ203ȱ wiederkehrendȱȱ142,ȱ146ȱ Zusammenfassungȱȱ249ȱ Zeitraumȱȱ143,ȱ147,ȱ148ȱ Zeitstempeltypȱȱ143,ȱ145ȱ ȱ Zuweisungsoperatorȱȱ114ȱ Zwischenknotenȱȱ2ȱ 333ȱ
Our partners will collect data and use cookies for ad personalization and measurement.
Learn how we and our ad partner Google, collect and use data .
Agree Cookies