To jest stara wersja strony!
Opis
Realizujący:
Marcin Gadamer marcin.gadamer@gmail.com
Investigate runtime integration aspects, mainly
Prolog+Java integration possibilities
input
Prolog/Java APIs
JSR94
Jess
JenaRules
integration
output
How to integrate Prolog and Java in the best way regarding performance, and coding easiness + examples.
MIW temat
Spotkania
08.03.04
080401
Porównanie
API Jeny i RDF SWI Prologu
jak zapisywać reguły w Jenie?
jaka jest różnica w sile ekspresji reguł jeny i Prologu?
opis dostarczonych z Jeną mechanizmów wnioskujących (reasoners)
080415
Projekt
Ponieważ Jess można używać jedynie przez 30 dni, wykorzystuję do integracji framework Jena.
Prolog ←przedstawienie wiedzy→ RDF ←przedstawienie wiedzy→ Java
Mały program w Java, który pokazuje relacje pomiędzy tatą (Jan), mamą (Krystyna), córką (Kasia), synem (Jasiu)
Zostały zapisane następujące dane:
corka.addProperty(siostra, syn);
tata.addProperty(ojciec, corka);
tata.addProperty(ojciec, syn);
tata.addProperty(malzonek, mama);
mama.addProperty(malzonek, tata);
Statement statement1 = model.createStatement(syn, dziecko, mama);
Statement statement2 = model.createStatement(syn, dziecko, tata);
Statement statement3 = model.createStatement(corka, dziecko, mama);
Statement statement4 = model.createStatement(corka, dziecko, tata);
W pliku RDF:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:j.0="http://purl.org/vocab/relacje/" >
<rdf:Description rdf:about="http://Family/KowalskiJan">
<j.0:malzonek rdf:resource="http://Family/KowalskiKrystyna"/>
<j.0:ojciec rdf:resource="http://Family/KowalskiJasiu"/>
<j.0:ojciec rdf:resource="http://Family/KowalskiKasia"/>
</rdf:Description>
<rdf:Description rdf:about="http://Family/KowalskiKrystyna">
<j.0:malzonek rdf:resource="http://Family/KowalskiJan"/>
</rdf:Description>
<rdf:Description rdf:about="http://Family/KowalskiKasia">
<j.0:dziecko rdf:resource="http://Family/KowalskiJan"/>
<j.0:dziecko rdf:resource="http://Family/KowalskiKrystyna"/>
<j.0:siostra rdf:resource="http://Family/KowalskiJasiu"/>
</rdf:Description>
<rdf:Description rdf:about="http://Family/KowalskiJasiu">
<j.0:dziecko rdf:resource="http://Family/KowalskiJan"/>
<j.0:dziecko rdf:resource="http://Family/KowalskiKrystyna"/>
</rdf:Description>
</rdf:RDF>
Przekazany RDF do Javy daje model z zawartością 9 informacji.
Po zadaniu prostych zapytań
syn.listProperties(dziecko);
corka.listProperties(dziecko);
corka.listProperties(siostra);
otrzymałem:
http://Family/KowalskiJasiu jest dzieckiem
http://Family/KowalskiJan
http://Family/KowalskiKrystyna
http://Family/KowalskiKasia jest dzieckiem
http://Family/KowalskiJan
http://Family/KowalskiKrystyna
http://Family/KowalskiKasia ma rodzenstwo
http://Family/KowalskiJasiu
SPARQL
Zapytania buduje się podobnie jak w języku zapytań SQL z tą różnicą, że podaje się całą trójkę.
Zapytanie SPARQL dla podanego powyżej przykładu może wyglądać tak:
SELECT ?x ?w ?q
WHERE {?x ?w ?q}
Oznacza to podgląd całej wiedzy, która jest zawarta w modelu.
Na takie zapytanie uzyskałem taką odpowiedź:
Jasiu dziecko Jan
Jasiu dziecko Krystyna
Krystyna malzonek Jan
Jan malzonek Krystyna
Jan ojciec Jasiu
Jan ojciec Kasia
Kasia dziecko Jan
Kasia dziecko Krystyna
Kasia siostra Jasiu
Jak widać są to wszytkie informacje, które zawarłem w modelu. (Dla czytelności zostały usunięte URI, aby odpowiedź nie wygdlądała np. tak http://Family/KowalskiJan)
Znając zasadę tworzenia zapytania, można otrzymać odpowiedź na „skomplikowane” zapytanie.
Sprawozdanie
Materiały
Basic
Jena + SPARQL
Jena rules
Prolog