Francouzská nová vlna - Truffaut v Datalogu (SemWeb#4)
Už jste někdy slyšeli o Prologu, nebo dokonce o Datalogu? Já ne. Teda až do 4. hodiny Sémantického webu. V té jsem se dozvěděl, že Prolog je známý programovací jazyk a že není příliš user-friendly - to soudím dle reakcí spolužáků, kteří už Prolog znají (při vyslovení slova PROLOG se znechuceně zašklebili) a ani ujištění, že Datalog je velmi zjednodušenou verzí Prologu, přítomné nějak viditelně neuklidnilo.
Datalog?
Datalog má kořeny už v 90. letech a dnes prý zažívá druhý boom. Jak jsem už nakousl, Datalog je zjednodušeným Prologem a to, že je podmnožinou (subsetem) Prologu, se projevuje i na počtu operátorů (Datalog jich má méně). Z operátorů jsme se naučili zatím jen ty nejzákladnější - tedy definici pravidla ( :- ), otázku ( ? ) a logické AND ( , ). S tímto arzenálem jsem se vrhl na Francouzskou novou vlnu, konkrétně na tvorbu Françoia Truffauta (v té době).
Sémantická síť
Jelikož se pomocí Datalogu dobře zapisují vztahové-sémantické sítě, zkusil jsem si nejdříve tuto síť nakreslit prostřednictvím yED Graphu. Vybral jsem tedy 6 celovečerních filmů + 1 kraťas (Antoine et Colette), přičemž veškeré údaje o nich jsem čerpal z IMDB a ČSFD. Načerpané údaje jsem zakreslil do grafu pomocí vztahů: director, screenwriter, composer, actor, role a film_cz (český název filmu).
Tady si můžete graf stáhnout ve formátu GraphML
Poznámky:
Herce jsem vybral vždy první 3 dle IMDB (tj. ty nejhlavnější). U jednoho filmu jsem však udělal výjimku. Tou výjimkou byl film Nikdo mne nemá rád, zde jsem zakreslil jen hlavního herce (Jean-Pierre Léaud) a na další 2 volné pozice jsem zadal herce z vedlejších rolí, aby byl výsledný spletenec zajímavější (jsou jimi totiž Jean-Claude Brialy a Jeanne Moreau, kteří hrají i v dalších, mnou vybraných, Truffautových filmech).
Do grafu jsem z důvodu větší přehlednosti nezaznamenal vztah Françoi Truffaut-scénarista, byl by totiž u všech filmů (většinou si psal dialogy, či jinak pomáhal se scénářem) a tak mi přišlo dostatečné, zaznamenat pouze jiné osoby, které se na scénáři podílely.
Krátký film Antoine et Colette jsem do práce zařadil proto, že v tomto filmu vystupuje stejná postava, jako ve filmu Nikdo mne nemá rád - Antoine Doinel (alterego samotného režiséra).
Datalog!
Výsledný kód si můžete stáhnout z Gistu, a vypadá takto:
#lang datalog % ----------------------FRANCOUZSKA NOVA VLNA - PRIKLAD--------------------------- % ----pokud kod kopirujete do online editoru, smazte prvni radek #lang datalog---- % --- online editor: http://ysangkok.github.com/mitre-datalog.js/wrapper.html ---- % -------------------------------------------------------------------------------- % reziser(autor, dilo, cesky nazev) director(francois_truffaut, tirez_sur_le_pianiste, strilejte_na_pianistu). director(francois_truffaut, jules_et_jim, jules_a_jim). director(francois_truffaut, la_peau_douce, hebka_kuze). director(francois_truffaut, fahrenheit_451, 451_fahrenheita). director(francois_truffaut, la_mariee_etait_en_noir, nevesta_byla_v_cernem). director(francois_truffaut, les_quatre_cents_coups, nikdo_mne_nema_rad). director(francois_truffaut, antoine_et_colette, antoine_a_colette). % (original, cesky nazev) - jak se ten film jmenuje v CR? Zeptam se napr. "filmcz(la_peau_douce,X)?" filmcz(B,C) :- director(A,B,C). % pouze film a poze reziser pro pripadne dalsi uziti only_director(A) :- director(A,B,C). only_film(B) :- director(A,B,C). % autor/autori scenare (autor,dilo) screenwriter(marcel_moussy, tirez_sur_le_pianiste). screenwriter(jean_gruault, jules_et_jim). screenwriter(jean_louis_richarr, la_peau_douce). screenwriter(jean_louis_richarr, fahrenheit_451). screenwriter(jean_louis_richarr, la_mariee_etait_en_noir). screenwriter(marcel_moussy, les_quatre_cents_coups). % autor scenare pro vyhledavani s ceskymi nazvy scenarista(A,B) :- screenwriter(A,C), filmcz(C,B). only_screenwriter(A) :- screenwriter(A,B). % skladatel (aurtor,dilo) composer(georges_delerue, tirez_sur_le_pianiste). composer(georges_delerue, jules_et_jim). composer(georges_delerue, la_peau_douce). composer(bernard_herrmann, fahrenheit_451). composer(bernard_herrmann, la_mariee_etait_en_noir). composer(jean_constantin, les_quatre_cents_coups). composer(georges_delerue, antoine_et_colette). skladatel(A,B) :- composer(A,C), filmcz(C,B). only_composer(A) :- composer(A,B). % tvurce filmu (osoba,dilo), priklad dotazu: "film_maker(X, jules_et_jim)?" vypise vsechny tvurce filmu Jules a Jim. film_maker(A,B) :- director(A,B,C). film_maker(A,B) :- screenwriter(A,B). film_maker(A,B) :- composer(A,B). % tvurce pro ceske hledani napr. "tvurce(jean_louis_richarr, X)?" tvurce(A,B) :- film_maker(A,C), filmcz(C,B). % co_op = cooperator(jmeno,jmeno). Vypise tvurce, s kterymy dotazovany spolupracoval napr. "co_op(georges_delerue, X)?" co_op(A,B) :- film_maker(A,C), director(B,C,D). co_op(A,B) :- film_maker(A,C), screenwriter(B,C). co_op(A,B) :- film_maker(A,C), composer(B,C). spolupracovnik(A,B) :- co_op(A,B). % herec + role (herec, film, role) actor(charles_aznavour, tirez_sur_le_pianiste, charlie_kohler). actor(charles_aznavour, tirez_sur_le_pianiste, edouard_saroyan). actor(marie_dubois, tirez_sur_le_pianiste, lena). actor(nicole_berger, tirez_sur_le_pianiste, therese_saroyan). actor(henri_serre, jules_et_jim, jim). actor(oskar_wernere, jules_et_jim, jules). actor(jeanne_moreau, jules_et_jim, catherine). actor(jean_desailly, la_peau_douce, pierre_lachenay). actor(francoise_dorleac, la_peau_douce, nicole). actor(nelly_benedetti, la_peau_douce, franca_lachenay). actor(oskar_werner, fahrenheit_451, guy_montag). actor(julie_christie, fahrenheit_451, clarisse). actor(julie_christie, fahrenheit_451, linda_montag). actor(cyril_cusack, fahrenheit_451, the_captain). actor(jeanne_moreau, la_mariee_etait_en_noir, julie_kohler). actor(michel_bouquet, la_mariee_etait_en_noir, coral). actor(jean_claude_brialy, la_mariee_etait_en_noir, corey). actor(jean_pierre_leaud, les_quatre_cents_coups, antoine_doinel). actor(jeanne_moreau, les_quatre_cents_coups, woman_with_dog). actor(jean_claude_brialy, les_quatre_cents_coups, man_in_street). actor(jean_pierre_leaud, antoine_et_colette, antoine_doinel). actor(marie_france_pisier, antoine_et_colette, colette). actor(jean_francois_adam, antoine_et_colette, albert_tazzi). % herec (jmeno, filmcz, role) - slouzi pro vyhledavani v cj herec(A,B,C) :- actor(A,D,C), filmcz(D,B). % postava ve filmu (role, film) otazka: jake postavy jsou ve filmu? napr. "role(X, jules_et_jim)?" role(C,B) :- actor(A,B,C). rolecz(A,B) :- role(A,C), filmcz(C,B). % fullcredits neboli tvurci a herci dohromady, proste vsichni co s tim filmem maji cokoliv spolecneho (jmeno, film). fullcredits(A,B) :- film_maker(A,B). fullcredits(A,B) :- actor(A,B,C). tvurci_a_herci(A,B) :- fullcredits(A,C), filmcz(C,B).
A můžete vyzkoušet třeba následující dotazy:
only_film(X)? - vypíše všechny filmy
filmcz(tirez_sur_le_pianiste, Y)? - Jak se v ČR jmenuje film Tirez sur le pianiste?
screenwriter(jean_louis_richarr, Y)? - K čemu všemu napsal J.L.Richarr scénář?
scenarista(X,strilejte_na_pianistu)? - totéž, pouze s českým názvem (kdo je scenaristou Střílejte na pianistu?)
skladatel(georges_delerue, Y)? - K jakým filmům složil G. Delarue hudbu?
film_maker(X, jules_et_jim)? - vypiš všechny tvůrce filmu Jules et Jim
tvurce(jean_louis_richarr, Y)? - totéž s českými názvy
co_op(georges_delerue, Y)? - S kým G.Delerue spolupracoval (tj.pracoval na stejném filmu)
actor(jeanne_moreau, Y, Z)? - Kde hrála J.Moreau a jak se jmenovala její postava?
herec(X, Y, antoine_doinel)? - V kterých filmech vystupovala postava Antoine Doinela a kdo jí hrál?
fullcredits(X, la_mariee_etait_en_noir)? - Kdo všechno(herci i tvůrci) se podílel na filmu Nevěsta byla v černém?









