[[
✎ pl:miw:miw08_ruleruntimej
]]
aiWiki
Pokaż stronę
Ostatnie zmiany
Indeks
Zaloguj
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== 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. [[pl:miw:miw2008_tematy#ruleruntimej|MIW temat]] ====== Spotkania ====== ===== 08.03.04 ===== ===== 08.04.01 ===== * 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 wnioskowania dostarczonych z Jeną mechanizmów wnioskujących (reasoners) ====== Projekt ====== * "implementacja" jsr94 w prologu * możliwość/sensowność jess/prolog Ponieważ Jess można używać jedynie przez 30 dni, wykorzystuję do integracji framework Jena. * Jednym z zalet Jeny jest czytanie/zapisywanie RDF w RDF/XML, N3 oraz N-Triples. Stąd słuszne wydaje się podejście 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: <code xml> <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> </code> 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: <code> SELECT ?x ?w ?q WHERE {?x ?w ?q} </code> Oznacza to podgląd całej wiedzy, która jest zawarta w modelu. Na takie zapytanie uzyskałem taką odpowiedź: <code> 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 </code> 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 === [[http://jena.sourceforge.net/documentation.html| Dokumentacja]] - Dokumentacja do frameworka Jena [[http://www.ibm.com/developerworks/xml/library/j-jena/index.html| IBM]] - Wprowadzenie do Jena wykonane przez IBMa [[http://www.oreilly.com/catalog/pracrdf/chapter/ch08.pdf|RDF]] - wszytstko o RDF - PDF wykonany przez wydawnictwo O'Reilly [[http://pl.wikipedia.org/wiki/System_ekspertowy| System ekspertowy]] - Wikipedia [[http://java.sun.com/developer/technicalArticles/J2SE/JavaRule.html| Java Rule Engine API]] - Getting Started With the Java Rule Engine API (JSR 94): Toward Rule-Based Applications (Sun) [[http://javaboutique.internet.com/tutorials/rules_engine/| Java Rules Engine API (JSR 94)]] - Java Rules Engine API (JSR 94) in javaboutique == Jena + SPARQL == [[http://www.ibm.com/developerworks/xml/library/j-sparql/| RDF in SPARQL]] - Search RDF data with SPARQL [[http://jena.sourceforge.net/ARQ/| AQR]] - Query engine for Jena [[http://2006.ruleml.org/slides/tutorial-holger.pdf| Rules Example]] - Rules example using Jena + Pellet == Prolog == [[http://www.swi-prolog.org/packages/rdf2pl.html| Prolog parser]] - SWI-Prolog RDF parser [[http://www.swi-prolog.org/packages/semweb.html| Semantic Web Library]] - SWI-Prolog Semantic Web Library [[http://www.xml.com/pub/a/2001/07/25/prologrdf.html| RDF in Prolog]] - RDF Applications with Prolog
pl/miw/miw08_ruleruntimej.1207031157.txt.gz
· ostatnio zmienione: 2019/06/27 15:58 (edycja zewnętrzna)
Pokaż stronę
Poprzednie wersje
Menadżer multimediów
Do góry