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

  • „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:

<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

Dokumentacja - Dokumentacja do frameworka Jena

IBM - Wprowadzenie do Jena wykonane przez IBMa

RDF - wszytstko o RDF - PDF wykonany przez wydawnictwo O'Reilly

System ekspertowy - Wikipedia

Java Rule Engine API - Getting Started With the Java Rule Engine API (JSR 94): Toward Rule-Based Applications (Sun)

Java Rules Engine API (JSR 94) - Java Rules Engine API (JSR 94) in javaboutique

Jena + SPARQL

RDF in SPARQL - Search RDF data with SPARQL

AQR - Query engine for Jena

Rules Example - Rules example using Jena + Pellet (pdf file!)

Jena rules

Jena rules page - Jena rules documentation

Example - Rules in Jena example

Examlpe2 - HP Example of using Jena Rules (ppt file!)

Prolog

Prolog parser - SWI-Prolog RDF parser

Semantic Web Library - SWI-Prolog Semantic Web Library

RDF in Prolog - RDF Applications with Prolog

pl/miw/miw08_ruleruntimej.1207047053.txt.gz · ostatnio zmienione: 2019/06/27 15:58 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0