Prolog als Datenbanksprache - Syntax Prädikat =Relation =Prozedur student( student( student( student( Konstanten Integer 1000 1001 1002 1003 Keine Lücke ! , , , , ‘Anna‘ ‘Rita‘ ‘Peter‘ ‘Peter‘ Atom klein oder in ‘ ‘ , ‘Arm‘ , ‘ti2‘ , ‘Reich‘ , ‘ti2‘ , ‘Reich‘ , ‘ti2‘ , ‘Petersen‘ , ‘ti2‘ ). ). ). ). Tupel=Fakt =Datensatz Goal = Subquery ?- student( M, V, _, _ ) . Variablen anonyme Variablen Training IT-Grundlagen 22.-23.11.2001 - Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/1 Prolog als Datenbanksprache - Syntax Regel: Head = Regelkopf = View Goal = Subquery Subquery pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) . ?- pflichten( 1000 , _ , _ , _ , F ) . Anfrage = Query Training IT-Grundlagen 22.-23.11.2001 - Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/2 Prolog als Datenbanksprache - Syntax Regel: Head = Regelkopf = View Goal = Subquery Subquery pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) . ?- pflichten( 1000 , _ , _ , _ , F ) . Training IT-Grundlagen 22.-23.11.2001 - Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/3 Deklarative und prozedurale Semantik Prolog: pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) . Prädikatenlogik pflichten( M, V, N, S, F ) <= student( M, V, N, S ) Λ kurs( S, F ) . falls und Relationale Algebra pflichten( M, V, N, S, F ) := student |X| kurs 4 = 1 SQL Create view Pflichten as select * from student S, kurs K where S . S = K . S Training IT-Grundlagen 22.-23.11.2001 - Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/4 Prozedurale Semantik : 4 Port-Modell pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) . ?- pflichten( M, V, N, S, F ). C C F C E E E R R R F C=Call C F E=Exit R=Redo Training IT-Grundlagen F F=Fail 22.-23.11.2001 - Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/5 pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) . void pflichten( M, V, N, S, F ) { // call-Port von Student AS = student . liesAlle( M, V, N, S ) ; while ( Student1 = AS. next( ) ) { // exit-Port von Student und call-Port von Kurs AK = kurs . liesAlle( S, F ) ; while ( Kurs1 = AK. next( ) ) { // exit-Port von Kurs und call-Port von Ausgabe Ausgabe( M, V, N, S, F ) ; // fail-Port von Ausgabe und redo-Port von Kurs } // fail-Port von Kurs und redo-Port von Student } // fail-Port von Student } Training IT-Grundlagen 22.-23.11.2001 - Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/6