Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :-import load_xml_structure/3 from sgml.
- :-import parse_xpath/4 from xpath.
- :-import ith/3 from basics.
- dio( sifra, naziv):-
- XmlSource = url('http://arka.foi.hr/~mschatten/lp/djelovi.xml'),
- parse_xpath(XmlSource, '/djelovi/dio/sifra',S,[]),
- parse_xpath(XmlSource, '/djelovi/dio/naziv', N, []),
- dohvati(S, N, sifra, naziv).
- get_element( element( _, _, [ X ] ), X ).
- dohvati(S,N,sifra,naziv):-
- load_xml_structure( string( S ), sifra_struct, _ ),
- load_xml_structure( string( N ), naziv_struct, _ ),
- ith( S, sifra_struct, sifra_elem ),
- ith( N, naziv_struct, naziv_elem ),
- get_element( sifra_elem, S ),
- get_element( naziv_elem, N ).
- Zadan je xml dokument na sljedecoj adresi: http://arka.foi.hr/~mschatten/lp/djelovi.xml
- Potrebno je implementirati predikat dio/2 koji iz zadanog dokumenta izvlaci sifru i naziv dijela. Pri tome je
- dopusteno koristiti ugradene predikate i tabliranje.
- :- auto_table.
- :- import parse_xpath/4 from xpath.
- :- import load_xml_structure/3 from sgml.
- :- import member/2 from lists.
- :- import ith/3 from basics.
- :- import str_cat from string.
- parse( X, R ) :-
- parse_xpath( file( '/home/markus/Dropbox/myCourses/Logicko programiranje
- (2014)/pismeni/djelovi.xml' ), X, R, [] ), !.
- dio( Sifra, Naziv ) :-
- parse( '//dio/sifra', S ),
- parse( '//dio/naziv', N ),
- load_xml_structure( string( S ), SS, _ ),
- load_xml_structure( string( N ), SN, _ ),
- member( ES, SS ),
- ith( I, SS, ES ),
- ith( I, SN, EN ),
- get_element( ES, Sifra ),
- get_element( EN, Naziv ).
- Potrebno je implementirati predikat ima/1 koji uspjeva ukoliko zadani dio ima poddijelova.
- Primjeri koristenja:
- komponente( Dio, Kom ) :-
- findall( K, komponenta( Dio, K ), Kom ).
- nema( Dio ) :-
- str_cat( '//dio[ naziv="', Dio, I1 ),
- str_cat( I1, '" ]/sastav', XPath ),
- parse( XPath, K ),
- load_xml_structure( string( K ), SK, _ ),
- member( EK, SK ),
- get_element( EK, '0' ).
- ima( Dio ) :-
- not( nema( Dio ) ).
- Potrebno je implementirati predikat komponenta/2 koji ce za zadani dio izlistati sve njegove kom-
- ponente, ako takve postoje. Ako ne postoje, predikat ne uspijeva.
- komponenta( Dio, Kom ) :-
- ima( Dio ),
- str_cat( '//dio[ naziv="', Dio, I1 ),
- str_cat( I1, '" ]/sastav/komponenta', XPath ),
- parse( XPath, K ),
- load_xml_structure( string( K ), SK, _ ),
- member( EK, SK ),
- get_element( EK, Koma ),
- dio( Koma, Kom ).
- Potrebno je implementirati predikat komponente/2 koji ce za zadani dio vratiti listu svih njegovih
- komponenti. Ako dio nema komponenti, predikat vraca praznu listu.
- komponenta( Dio, Kom ) :-
- ima( Dio ),
- komponenta( Dio, Kom1 ),
- komponenta( Kom1, Kom ).
- get_element( element( _, _, [ X ] ), X ).
- Zadan je xml dokument na sljedecoj adresi: http://arka.foi.hr/~mschatten/lp/rok.xml
- Potrebno je implementirati predikat rok/5 koji iz zadanog dokumenta izvlaci id, kolegij, datum, vrijeme i
- dvoranu roka. Pri tome je dopusteno koristiti ugradene predikate.
- :-import load_xml_structure/3 from sgml.
- :-import parse_xpath/4 from xpath.
- :-import ith/3 from basics.
- rok( Id, Kolegij, Datum, Vrijeme, Dvorana ) :-
- XmlSource = url('http://arka.foi.hr/~mschatten/lp/rok.xml'),
- parse_xpath( XmlSource, '/rokovi/rok/id', Ids, [] ),
- parse_xpath( XmlSource, '/rokovi/rok/kolegij', Kolegiji, [] ),
- parse_xpath( XmlSource, '/rokovi/rok/datum', Datumi, [] ),
- parse_xpath( XmlSource, '/rokovi/rok/vrijeme', Vremena, [] ),
- parse_xpath( XmlSource, '/rokovi/rok/dvorana', Dvorane, [] ),
- dohvati_info(
- Ids, Kolegiji, Datumi, Vremena, Dvorane,
- Id, Kolegij, Datum, Vrijeme, Dvorana
- ).
- get_element( element( _, _, [ X ] ), X ).
- dohvati_info( Ids, Kolegiji, Datumi, Vremena, Dvorane,
- Id, Kolegij, Datum, Vrijeme, Dvorana ) :-
- load_xml_structure( string( Ids ), Id_struct, _ ),
- load_xml_structure( string( Kolegiji ), Kolegij_struct, _ ),
- load_xml_structure( string( Datumi ), Datum_struct, _ ),
- load_xml_structure( string( Vremena ), Vrijeme_struct, _ ),
- load_xml_structure( string( Dvorane ), Dvorana_struct, _ ),
- ith( I, Id_struct, Id_elem ),
- ith( I, Kolegij_struct, Kolegij_elem ),
- ith( I, Datum_struct, Datum_elem ),
- ith( I, Vrijeme_struct, Vrijeme_elem ),
- ith( I, Dvorana_struct, Dvorana_elem ),
- get_element( Id_elem, Id ),
- get_element( Kolegij_elem, Kolegij ),
- get_element( Datum_elem, Datum ),
- get_element( Vrijeme_elem, Vrijeme ),
- get_element( Dvorana_elem, Dvorana ).
- Rjesenje prethodnog zadatka pohranite u datoteku dohvat.P te ju koristite kao modul unutar
- ora-2
- stroja. Potrebno je implementirati klasu rok koja sadrzi atribute kolegij, datum, vrijeme i dvorana.
- ?- [dohvat].
- load_rokovi :-
- rok( ?id, ?kolegij, ?datum, ?vrijeme, ?dvorana )@_prolog,
- insert { ?id : rok [
- kolegij -> ?kolegij,
- datum -> ?datum,
- vrijeme -> ?vrijeme,
- dvorana -> ?dvorana
- ] }.
- ?- load_rokovi.
- Implementirajte predikat rokovi prema dvoranama/2 koji ce uz svoje parametre vezati dvorane te
- odgovarajuce liste rokova koji se odrzavaju u toj dvorani.
- rokovi_prema_dvoranama( ?dvorana, ?kolegiji ) :-
- ?_ : rok [ dvorana -> ?dvorana ],
- ?kolegiji = setof { ?_id | ?_id : rok [ dvorana -> ?dvorana ] }.
- Implementirajte predikat rokovi prema datumima/3 koji ce uz svoje parametre vezati datume, vre-
- mena i odgovarajuce liste rokova koji se odrzavaju u tim terminima.
- rokovi_prema_datumima( ?datum, ?vrijeme, ?rokovi ) :-
- ?_ : rok [ datum -> ?datum, vrijeme -> ?vrijeme ],
- ?rokovi = setof { ?_id | ?_id : rok [ datum -> ?datum, vrijeme -> ?vrijeme ] }.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement