XML-Datenmodellierung und Web-Services XML  Datenmodell  Schemabeschreibungssprachen  Anfragesprachen: XPath und XQuery Web-Services  Überblick  WSDL.

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping
Advertisements

Deduktive Datenbanken
XML-Datenmodellierung und Web-Services
1 Kapitel 9: Datenbankapplikationen. 2 Datenbankapplikationen MS Access Embedded SQL JDBC Application JDBC Applet Java Servlet Java Server Pages Cold.
XML: Extensible Markup Language
SQL Server 2005 Übersicht für Entwickler Sebastian Weber Developer Evangelist Microsoft Deutschland GmbH.
Internet-Datenbanken
XML-Datenmodellierung und Web-Services XML Datenmodell Schemabeschreibungssprachen Anfragesprachen: XPath und XQuery Web-Services Überblick WSDL UDDI SOAP.
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Internet-Datenbanken Grundlagen des WWW HTML HTTP Web-Anbindung von Datenbanken Servlets JSP JDBC XML Datenmodell Schemabeschreibungssprachen Anfragesprachen.
FH-Hof Extensible Markup Language Richard Göbel. FH-Hof Extensible Markup Language XML XML ist universeller Ansatz für die Strukturierung von Zeichenketten.
SQL als Abfragesprache
SQL als Abfragesprache
XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
SQL/XML. © Prof. T. Kudraß, HTWK Leipzig 2 2 Motivation Speicherung von XML in allen großen kommerziellen DBMS vorhanden proprietäre Lösungen für die.
XML Standardisierungen und Abfragesprachen
Speicherung von XML- Dokumenten als Large Objects.
Einführung XML XML Einführung Andreas Leicht.
XPointer Die Xpointer beschreiben einen Ort oder Bereich innerhalb einer XML-Instanz. Die XPointer bauen auf der XML Path Language auf. Die XPointer ist.
Transaction Script Software Component Technology for Distributed Applications.
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
1 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines Schlüssels 1:N - Beziehung Angabe.
1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
XQuery-Anfragen Spezifikations- und Selektionsmethoden für Daten und Dienste Markus Mauch.
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Aufbau einer Verbindung zur Datenbank import java.net.URL; import java.sql.*; class JDBCExample.
objekt-relationale Datenbanken
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Datenbanktechnologie Daniel Ebner SS Mai Ulrike Lohner.
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #4 SQL (Teil 1)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #6 SQL (Teil 3)
Vorlesung #4 SQL (Teil 1).
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #4 SQL (Teil 1)
Datenbanksysteme für hörer anderer Fachrichtungen
Relationales Datenmodell und DDL
Datenbankanbindung mit
© 2001 Sven Dammann1 Aufbau Integrierter Informationssysteme XML Bearbeitung und relationale Abbildung Sven Dammann Martin-Luther-Universität Halle-Wittenberg.
XQuery 1.0 – Arbeitsweise Mögl. Eingaben Das wird berücksichtigt: Typen von XPath und XML Schema Namensräume, Module Ergebnis: XML-Instanz.
Vorlesung #5 SQL (Teil 2).
Hauptseminar Web-Services und verteilte Datenbanken Thema XML, DTDs und XML-Schema XML, DTDs und XML-Schema - Stefan Kurz, 25. April 2003.
Peter Brezany Institut für Softwarewissenschaften Universität Wien
1 Kapitel 10: XML. 2 XML 1969GMLGeneralized Markup Language (Goldfarb/Mosher/Lorie) 1986SGMLStandardized Markup Language 1989WWWWorld Wide Web 1992HTMLHypertext.
Web Services Spezielle Methoden der SWT Liste V – WS 2008/2009 Christian Boryczewski.
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Datenbanken abfragen mit SQL
Document Type Definitions (DTDs) Marko Harasic Freie Universität Berlin Institut für Informatik Netzbasierte Informationssysteme
Patrick Richterich Lattwein GmbH Web Services Softwareentwicklung mit SOAP.
XML-Erweiterungen in ORDBMS Seminar: DBMS für spezielle Anwendungen Florian Brieler.
Technische Universität München, Informatik XI Angewandte Informatik / Kooperative Systeme Verteilte Anwendungen: Web Services Dr. Wolfgang Wörndl
SOAP - WSDL Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung Prof. Dr. Manfred Thaller AM 2 Hauptseminar: Virtuelle.
 standardisierte -Datendefinitionssprache (DDL) -Datenmanipulationssprache (DML) -Anfragesprache (Query)  derzeit aktueller Standard ist SQL 3  objektrelationale.
Technische Universität München Übung zur Einführung in die Informatik für Hörer anderer Fachrichtungen im Sommersemester 2010 Sitzung 8: Die relationale.
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Validierung vom XML mit XML Schema
WS 2001/2002 Mehrbenutzerzugriff auf GIS-Daten
Vorlesung #5 SQL (Teil 2).
Vorlesung #6 SQL (Teil 3).
Vorlesung #7 SQL (Teil 4).
Sichten.
Beispiele zur Datenänderung
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Grundlagen Datenbanken (GDB)
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Da·ten·bank /Dátenbank/ Substantiv, feminin [die]
«Delegierter» Methoden Schablone Funktionszeiger
1. Die rekursive Datenstruktur Liste 1
 Präsentation transkript:

XML-Datenmodellierung und Web-Services XML  Datenmodell  Schemabeschreibungssprachen  Anfragesprachen: XPath und XQuery Web-Services  Überblick  WSDL  UDDI  SOAP

XML: Extensible Markup Language Datenmodell Schemabeschreibung Anfragesprachen

HTML-Datenmodell  Kein Schema  Nur Insider können die beiden Listen interpretieren  Oben: Professoren  Unten: Vorlesungen  Wenig geeignet als Datenaustauschformat  Man muß irgendwie dann auch mitschicken, was damit gemeint ist  Verarbeitung von HTM-Daten  „Screen-scraping“  Wrapper Curie Sokrates Mäeutik Bioethik

Relationales Datenmodell  Schema ist vorgegeben und man kann nur schema-konforme Daten einfügen (Problem Ausnahmen  null-Werte)  Bedeutung der Daten wird durch das Schema definiert  Kein Datenaustauschformat RaumRangNamePersNr 226C4Sokrates2125 7C4Kant C4Curie C3Augustinus C3Popper C3Kopernikus C4Russel2126 Professoren 21374Die 3 Kritiken Glaube und Wissen Der Wiener Kreis5259 Gelesen VonSWSTitelVorlNr 21374Grundzüge Bioethik Wissenschaftstheorie Logik Mäeutik Erkenntnistheorie Ethik5041 Vorlesungen

XML-Datenmodell  Liegt irgendwo dazwischen  HTML  Schema-los  Beliebige Daten, solange Syntax stimmt  Relationen  Schema  Keine Abweichungen  Semi-strukturierte Daten  Teilweise schematisch  Aber Ausnahmen  Wenn Schema, dann muss es eingehalten werden

Unsere Beispiel-Daten in XML... Curie Sokrates Mäeutik Bioethik Semantische Tags (Marken): Geben die Bedeutung der Elemente an, immer paarweise Element

XML-Daten mit Schema (DTD) <!DOCTYPE Buch[ ]> Datenbanksysteme: Eine Einführung Alfons Kemper Andre Eickler Oldenbourg Verlag

Die hierarchische Struktur im Bild

Rekursive Strukturen <!DOCTYPE Bauteil[ ]> Maybach 620 Limousine V12-Biturbo Motor mit 620 PS Nockenwelle Kühlschrank für Champagner

XML- Dokument der Universität Prof. Sokrates Dr. Erhard Theologie Augustinus C3 309 Glaube und Wissen 2

Physik Curie C4 36 Kopernikus C3 310 Philosophie... Im Browser

XML Namensräume... <Universität xmlns=" UnivName="Virtuelle Universität der Großen Denker">...

XML Namensräume... <Universität xmlns=" xmlns:lit=" UnivName="Virtuelle Universität der Großen Denker">... Informationssysteme... Datenbanksysteme: Eine Einführung Alfons Kemper Andre Eickler Oldenbourg Verlag...

XML-Schema: mächtiger als DTDs <xsd:schema xmlns:xsd=" targetNamespace="

XML-Schema: mächtiger als DTDs <xsd:element name="Fakultät" minOccurs="0" maxOccurs="unbounded" type="Fakultätentyp"/>

Verweise in XML-Dokumenten  XML ist „super“ für die Modellierung von Hierarchien  Entsprechen den geschachtelten Elementen  Genau das hatten wir in dem Uni-Beispiel Uni Fakultäten Professoren Vorlesungen

Modellierung des Stammbaums  Kinder haben zwei Elternteile  Also kann man ein Kind nicht mehr als Sub-Element einer Person modellieren  Wem soll man es zuordnen (Vater oder Mutter)  Also muss man mit Verweisen (IDREF und IDREFS) „arbeiten“

Graphische Darstellung des XML-Dokuments

Familie.xml <!DOCTYPE Stammbaum [ <!ATTLIST Person id ID #REQUIRED Mutter IDREF #IMPLIED Vater IDREF #IMPLIED Kinder IDREFS #IMPLIED> ]> Adam Eva Kain Abel

XML-Anfragesprache XQuery  Basiert auf Xpath, einer Sprache für Pfadausdrücke  Ein Lokalisierungspfad besteht aus einzelnen Lokalisierungsschritten  Jeder Lokalisierungsschritt besteht aus bis zu drei Teilen:  Achse::Knotentest[Prädikat]

XPath-Achsen  self: Hierbei handelt es sich um den Referenzknoten.  attribute: Hierunter fallen alle Attribute des Referenzknotens -- falls er überhaupt welche besitzt.  child: Entlang dieser Achse werden alle direkten Unterelemente bestimmt.  descendant: Hierunter fallen alle direkten und indirekten Unterelemente, also die Kinder und deren Kinder u.s.w.  descendant-or-self: Wie oben, außer dass der Referenzknoten hier auch dazu gehört.  parent: Der Vaterknoten des Referenzknotens wird über diese Achse ermittelt.  ancestor: Hierzu zählen alle Knoten auf dem Pfad vom Referenzknoten zur Wurzel des XML-Baums.

Achsen … cont‘d  ancestor-or-self: Wie oben, außer dass der Referenzknoten auch mit eingeschlossen wird.  following-sibling: Dies sind die in Dokumentreihenfolge nachfolgenden Kinder des Elternknotens von self.  preceding-sibling: Hierbei handelt es sich um die in Dokumentreihenfolge vorangehenden Kinder des Elternknotens von self.  following: Alle Knoten, die in Dokumentreihenfolge nach dem Refernzknoten aufgeführt sind. Die Nachkommen (descendant) des Referenzknotens gehören aber nicht dazu.  preceding: Alle Knoten, die im Dokument vor dem Referenzknoten vorkommen -- allerdings ohne die Vorfahren (ancestor).

XPath-Ausdrücke doc("Uni.xml")/child::Universität[self::*/attribute::UnivName= "Virtuelle Universität der Großen Denker"]  Als Ergebnis bekommt man den gesamten Baum unseres Beispieldokuments doc("Uni.xml")/child::Universität/child::Fakultäten/child::Fakultät/ child::FakName  Theologie  Physik  Philosophie  Äquivalent für unser Beispiel:  doc("Uni.xml")/descendant-or-self::FakName

 doc("Uni.xml")/child::Universität/attribute::UnivName  UnivName="Virtuelle Universität der Großen Denker„ doc("Uni.xml")/child::Universität/child::Fakultäten/ child::Fakultät[self::*/child::FakName="Theologie"]/ descendant-or-self::Vorlesung/child::Titel

doc("Uni.xml")/child::Universität/child::Fakultäten/ child::Fakultät[child::FakName="Philosophie"]/ child::ProfessorIn[child::Rang="C4"]/child::Vorlesungen/ child::Vorlesung/child::Titel Ethik Mäeutik Logik Erkenntnistheorie Wissenschaftstheorie Bioethik Grundzüge Die 3 Kritiken

doc("Uni.xml")/child::Universität/child::Fakultäten/ child::Fakultät/child::FakName[parent::Fakultät/ child::ProfessorIn/child::Vorlesungen] Theologie Philosophie

doc("Uni.xml")/child::Universität/child::Fakultäten/ child::Fakultät[/descendant::Vorlesungen]/child::FakName doc("Uni.xml")/child::Universität/child::Fakultäten/ child::Fakultät[descendant::Vorlesungen]/child::FakName ?

doc("Uni.xml")/child::Universität/child::Fakultäten/ child::Fakultät[position()=2] wird also die zweite Fakultät ausgegeben: Physik Curie C4 36 Kopernikus C3 310

doc("Uni.xml")/child::Universität/child::Fakultäten/ child::Fakultät[child::ProfessorIn/child::Vorlesungen/ child::Vorlesung/child::Titel="Mäeutik"]/child::FakName Philosophie

Verkürzte Syntax . Aktueller Referenzknoten .. Vaterknoten  / Abgrenzung einzelner schritte oder Wurzel  ElemName1/ElemName2/ElemName3  // descendant-or-self::node() Attributzugriff

doc("Uni.xml")/Universität/Fakultäten/ Fakultät[FakName="Physik"]//Vorlesung doc("Uni.xml")/Universität/Fakultäten/ Fakultät[position()=2]//Vorlesung doc("Uni.xml")/Universität/Fakultäten/Fakultät[2]//Vorlesung doc("Uni.xml")/Universität/Fakultäten/Fakultät[FakName="Physik"]/ ProfessorIn/Vorlesungen/Vorlesung

Beispiel-Pfadausdrücke document("uni.xml")/Fakultäten/Fakultät[FakName="Physik"] //Vorlesung document("uni.xml")/Fakultäten/Fakultät[2]//Vorlesung document("uni.xml")/Fakultäten/Fakultät[FakName="Physik"]/ ProfessorIn/Vorlesungen/Vorlesung document("Stammbaum.xml")/Person[Name="Kain"]

XQuery-Anfragsyntax  FLOWOR-Ausdrücke  For..  Let …  Where …  Order by …  Return …

XML-Beispielanfrage {for $v in doc("Uni.xml")//Vorlesung return $v} Glaube und Wissen 2...

Glaube und Wissen 2 Ethik 4 Mäeutik 2 Logik 4 Erkenntnistheorie 3 Wissenschaftstheorie 3 Bioethik 2 Der Wiener Kreis 2 Grundzüge 4 Die 3 Kritiken 4

XML-Beispielanfrage {for $v in doc("Uni.xml")//Vorlesung[SWS=4] return $v} {for $v in doc("Uni.xml")//Vorlesung where $v/SWS = 4 return $v}

XML-Beispielanfrage {for $f in doc("Uni.xml")/Universität/Fakultäten/Fakultät return {$f/FakName/text()} {for $v in $f/ProfessorIn/Vorlesungen/Vorlesung return $v} }

Joins in XQuery {for $m in doc("Uni.xml")//Vorlesung[Titel="Mäeutik"], $v in doc("Uni.xml")//Vorlesung where return $v/Titel} Grundzüge

XML-Beispielanfrage {for $p in doc("Uni.xml")//ProfessorIn, $k in doc("Stammbaum.xml")//Person, $km in doc("Stammbaum.xml")//Person, $kv in doc("Stammbaum.xml")//Person where $p/Name = $k/Name and = and = return {$p/Name/text()} {$km/Name/text()} {$kv/Name/text()} }

XML-Beispielanfrage {for $p in doc("Stammbaum.xml")//Person[Name = "Kain"], $g in = = return $g/Name } Kain Abel

Das LET-Konstrukt  for $x in (1,2) return {$x}  liefert als Ergebnis:  1 2  Andererseits liefert  let $x := (1,2) return {$x}  das Ergebnis  12

Welche Fakultäten bieten so viele Vorlesungen an wie die Theologie let $TheolVorls := doc("Uni.xml")//Fakultät [FakName ="Theologie"]//Vorlesung for $f in doc("Uni.xml")//Fakultät let $fVorls := $f//Vorlesung where count($fVorls) >= count($TheolVorls) return $f/FakName Theologie Philosophie</FakName >

XML-Beispielanfrage {for $p in doc("Uni.xml")//ProfessorIn let $v := $p/Vorlesungen/Vorlesung where count($v) > 1 order by sum($v/SWS) return {$p/Name} {sum($v/SWS)} }

XML-Beispielanfrage Russel 8.0 Kant 8.0 Sokrates 10.0

Dereferenzierung durch wert-basierten Join {for $p in doc("Uni.xml")//Vorlesung return {for $s in doc("Uni.xml")//Vorlesung where return } }

Dereferenzierung durch id()-Funktion {for $p in doc("Uni.xml")//Vorlesung return {for $s in return } }

Ergebnis

Rekursion … einfach for $m in doc("Bauteile.xml")/Bauteil [Beschreibung="Maybach 620 Limousine"] let $teile := $m//Bauteil return

Rekursive Strukturen <!DOCTYPE Bauteil[ ]> Maybach 620 Limousine V12-Biturbo Motor mit 620 PS Nockenwelle Kühlschrank für Champagner

Rekursion … schwieriger <!DOCTYPE VorlesungsBaum [ <!ATTLIST Vorlesung Titel CDATA #REQUIRED> ]>

Rekursion … schwieriger declare function local:eineEbene($p as element()) as element() { { for $s in doc("Uni.xml")//Vorlesung where return local:eineEbene($s) } }; { for $p in doc("Uni.xml")//Vorlesung return local:eineEbene($p) }

Ergebnis

Zusammenspiel: relationale DB und XML

Bücher als XML-Dokument

Weiteres Buch …

Speicherung von XML Dokumenten in Relationen  Einfach als BLOB (binary large object)  Keine Anfragemöglichkeit  Keine Strukturierung  Nur Archivierung  Shreddern ~ Zerlegen des XML Dokuments  Speicherung aller Kanten des XML-Baums  [von, nach, Tag/Marke, …]  Einfache Relationale Darstellung  Eine Relation für ALLE Dokumente  Objektrelationale Speichermodelle  Ausnutzung von Schemainformation

/Buch/Autoren/Autor/Nachname In der relationalen InfoTab-Darstellung kann man diese Information mit folgender SQL-Anfrage aus der Relation InfoTab extrahieren: select n.Wert from InfoTab n where n.Pfad = '#Buch#Autoren#Autor#Nachname' Auswertung von Pfadausdrücken

Ohne Nutzung des Pfad-Attributs – oh je  Self-Joins select n.Wert from InfoTab b, InfoTab as, InfoTab a, InfoTab n where b.Tag = 'Buch' and as.Tag = 'Autoren' and a.Tag = 'Autor' and n.Tag = Nachname and b.KnotenTyp = 'Element' and as.KnotenTyp = 'Element' and a.KnotenTyp = 'Element' and n.KnotenTyp = 'Element' and PARENT(as.ORDpfad) = b.ORDpfad and as.DOCid =b.DOCid and PARENT(a.ORDpfad) = as.ORDpfad and a.DOCid = as.DOCid and PARENT(n.ORDpfad) = a.ORDpfad and n.DOCid = a.DOCid

/Buch[Titel='Datenbanksystme']/Autoren/Autor/Nachname Die korrespondierende SQL-Anfrage ist jetzt deutlich komplexer, da sie mehrere Self-Joins enthält. select n.Wert from InfoTab b, InfoTab t, InfoTab n where b.Pfad = '#Buch' and t.Pfad = '#Buch#Titel' n.Pfad = '#Buch#Autoren#Autor#Nachname' and t.Wert = 'Datenbanksysteme' and PARENT(t.ORDpfad) = b.ORDpfad and t.DOCid = b.DOCid and PREFIX(b.ORDpfad,n.ORDpfad) and b.DOCid = n.DOCid Pfade mit Prädikat

Pfade mit descendant-or-self-Achse //Autor/Nachname select n.Wert from InfoTab n where n.Pfad like '%#Autor#Nachname'

Rekursion im Prädikat /Buch[.//Nachname = 'Kemper']/Titel select t.Wert from InfoTab b, InfoTab n, InfoTab t where b.Pfad = '#Buch' and t.Pfad = '#Buch#Titel' n.Pfad like '%#Nachname' and PARENT(t.ORDpfad) = b.ORDpfad and t.DOCid = b.DOCid and PREFIX(b.ORDpfad,n.ORDpfad) and b.DOCid = n.DOCid

Indexierungsschema von Grust pre pos t

create table Bücher (ISBN varchar(20), Beschreibung xml) insert into Bücher values(' ', ' Datenbanksysteme Alfons Kemper Andre Eickler Oldenbourg ' ) Neuer Datentyp in rel DB: xml

insert into Bücher values(' ', ' Object-oriented Data Management Alfons Kemper Alfons Moerkotte Prentice Hall ' ) Noch ein Buch speichern …

SQL mit XQuery-Anteilen select Beschreibung.query('for $b in return $b/Autoren') from Bücher Alfons Kemper Andre Eickler

CREATE TABLE [dbo].[Unis]( [Name] [varchar](30), [Beschreibung] [xml]) select Name, Beschreibung.query('for $d in //ProfessorIn where $d/Vorlesungen/Vorlesung return $d/Name') as xml from Unis Name | xml ============================================ Virtuelle Uni | Augustinus Sokrates Russel Popper Kant Speicherung der Uni-Beschreibung

select Name, Beschreibung.query('for $d in //ProfessorIn where $d/Vorlesungen/Vorlesung[SWS=4] return $d/Name') as xml from Unis ========== Virtuelle Uni | Sokrates Kant

select * from Professoren for xml auto Publizieren: Relationen  XML

select * from Professoren for xml raw

SELECT Name, Rang, ( SELECT Titel, SWS FROM Vorlesungen WHERE gelesenVon = PersNr FOR XML AUTO, type) FROM Professoren FOR XML AUTO, type ….

SELECT Name, Rang, ( SELECT sum(SWS) as Gesamt FROM Vorlesungen as Lehrleistung WHERE gelesenVon = PersNr FOR XML AUTO, type) FROM Professoren FOR XML AUTO, type …

SELECT XMLELEMENT ( Name "Professoren", XMLATTRIBUTES (p.Name,p.Rang), XMLELEMENT ( Name "Lehrleistung", (SELECT sum(v.SWS) FROM Vorlesungen v WHERE v.gelesenVon = p.PersNr ) ) FROM Professoren p 10 8 Standardisierte Syntax: XMLELEMENT

select xmlelement( Name "ProfessorIn", xmlattributes(p.Name), xmlagg( xmlelement( Name "Titel", v.Titel))) from Professoren p, Vorlesungen v where p.PersNr = v.gelesenVon group by p.PersNr,p.Name; Ethik Maeeutik L... Erkenntnistheorie Bioethik</Tite... Der Wiener Kreis Glaube und Wissen Grundzuege Die 3 Kritiken <... Aggregation/Schachtelung

select isbn, as Jahr, Beschreibung.value('(/Buch/Autoren/Autor/Nachname)[1]', 'varchar(20)') as Erstautor from Bücher Kemper Kemper XML-Elemente  Attribut-Werte

update Bücher set Beschreibung.modify('insert Heinrich as first into (/Buch/Autoren/Autor)[1]') where isbn = ' ' select isbn, Beschreibung from Bücher where isbn = ' ' Datenbanksysteme Heinrich Alfons Kemper Andre Eickler Oldenbourg

UPDATE Bücher SET Beschreibung.modify('delete /Buch/Autoren/Autor/Vorname[1]') where isbn = ' ' Datenbanksysteme Alfons Kemper Eickler Oldenbourg

Web-Services  XML wird die lingua franca des Internets  Wird jetzt auch für die Kommunikation zwischen Programmen benutzt  SOAP: Simple Object Access Protocol  Basiert auf XML  Ermöglicht i.w. entfernte Prozeduraufrufe

Standards: die Wichtigsten

Übersicht

SOAP-Kommunikation <soap:Envelope xmlns:soap=" xmlns:xsd=" xmlns:xsi=" soap:encodingStyle= " <ns1:getLehrUmfangVonProfessor xmlns:ns1=" Sokrates <soap:Envelope xmlns:soap=" xmlns:xsd=" xmlns:xsi=" soap:encodingStyle= " <ns1:getLehrUmfangVonProfessorResponse xmlns:ns1=" 10

<definitions name="UniVerwaltung" targetNamespace=" xmlns:tns=" xmlns:xsd=" xmlns:soap=" xmlns=" … WSDL: Web-Service Description Language

<soap:binding style="rpc" transport=" <soap:body use="encoded" namespace="UniVerwaltung" encodingStyle=" <soap:body use="encoded" namespace="UniVerwaltung" encodingStyle=" <soap:address location= "

Implementierung des Web-Services public class UniVerwaltungSOAPBindingImpl implements UniVerwaltung.UniVerwaltungPortType { public int getLehrUmfangVonProfessor(java.lang.String profName) throws java.rmi.RemoteException { return InquireDB.getLehrUmfangVonProfessor(profName); } } import java.sql.*; class InquireDB { public static int getLehrUmfangVonProfessor(String profName) { int LehrUmfang = 0; try { // connect to database: Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection( Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery( "select sum(v.SWS) as LehrUmfang " + "from Vorlesungen v, Professoren p " + "where v.gelesenVon = p.PersNr and p.Name = '" + profName +"'"); rset.next(); LehrUmfang=java.lang.Integer.parseInt(rset.getString("LehrUmfang")); // disconnect rset.close(); stmt.close(); conn.close(); } catch (Exception e) {} return LehrUmfang; } }

Aufruf des Web-Services (Klient) package UniVerwaltung; import java.net.URL; public class Klient { public static void main(String[] args) throws Exception { UniVerwaltungService uvws = new UniVerwaltungServiceLocator(); UniVerwaltungPortType uv = uvws.getUniVerwaltung(new URL (" System.out.println("Lehrumfang von Professor/in " + "Sokrates" +": " + uv.getLehrUmfangVonProfessor("Sokrates")); //Dienstinvokation }

Handgestrickter Klient import java.io.*; import java.net.*; public class ClientUniVerwaltung { private static final int BUFF_SIZE = 100; public static void main(String[] argv) throws Exception { String request = " "+ "<soap:Envelope " + "xmlns:soap=' " + "xmlns:xsd=' " + "xmlns:xsi=' " + "soap:encodingStyle= " + "' " + " "+ "<ns1:getLehrUmfangVonProfessor " + "xmlns:ns1=' + "UniVerwaltung.wsdl'> " + " Sokrates " + " " + " ";

Handgestrickter Klient … cont‘d URL url = new URL( " HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setUseCaches(false); conn.setRequestProperty("Accept", "text/xml"); conn.setRequestProperty("Connection", "keep-alive"); conn.setRequestProperty("Content-Type", "text/xml"); conn.setRequestProperty( "Content-length", Integer.toString(request.length())); conn.setRequestProperty("SOAPAction", "\" \""); OutputStream out = conn.getOutputStream(); out.write(request.getBytes()); out.flush(); StringBuffer response = new StringBuffer(BUFF_SIZE); InputStreamReader in = new InputStreamReader(conn.getInputStream(), "UTF-8"); char buff[] = new char[BUFF_SIZE]; int n; while ((n = in.read(buff, 0, BUFF_SIZE - 1)) > 0) { response.append(buff, 0, n); } out.close(); in.close(); System.out.println( response.toString() ); }