Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:miw08_ruleruntimej [2008/04/15 08:45]
miw Termostat - RDF
pl:miw:miw08_ruleruntimej [2008/06/14 10:52]
gjn
Linia 1: Linia 1:
-====== 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 ===== 
- 
- 
- 
-===== 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 ===== 
-  * przykład [[hekate:​hekate_case_thermostat|termostatu]] w RDF w Jenie  
- 
- 
-====== 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. ​ 
- 
-==Termostat - RDF== 
- 
-Aby stworzyć plik RDF reprezentujący model termostatu, najpierw utworzyłem model termostatu wg. reguł. 
- 
-Aby plik taki został wygenerowany ścieżki do resoure'​ów oraz propertis'​ów muszą być unikalne stąd musiałem stworzyć dwa Stringi, którymi poprzedzałem każdy z nich. 
-<​code>​ 
- static final String resourceUri = "​http://​Resource/​my/";​ 
- static final String propertyUri = "​http://​Property/​my/";​ 
-</​code>​ 
- 
- 
-Tak zapisałem model w Javie: 
-<​code>​ 
- Model model = ModelFactory.createDefaultModel();​ 
- //1 
- Resource day = model.createResource(resourceUri+ "​Day"​);​ 
- Resource workday = model.createResource(resourceUri+"​Workday"​);​ 
- Property monday = model.createProperty(propertyUri+"​monday"​);​ 
- Property tuesday = model.createProperty(propertyUri+"​tuesday"​);​ 
- Property wednesday = model.createProperty(propertyUri+"​wednesday"​);​ 
- Property thursday = model.createProperty(propertyUri+"​thursday"​);​ 
- Property friday = model.createProperty(propertyUri+"​friday"​);​ 
- day.addProperty(monday,​ workday); 
- day.addProperty(tuesday,​ workday); 
- day.addProperty(wednesday,​ workday); 
- day.addProperty(thursday,​ workday); 
- day.addProperty(friday,​ workday); 
-  
- //2 
- Resource weekend = model.createResource(resourceUri + "​Weekend"​);​ 
- Property saturday = model.createProperty(propertyUri + "​saturday"​);​ 
- Property sunday = model.createProperty(propertyUri+ "​sunday"​);​ 
- day.addProperty(saturday,​ weekend); 
- day.addProperty(sunday,​ weekend); 
-  
- //3 4 5 
- Resource time = model.createResource(resourceUri + "​time"​);​ 
- Resource hour = model.createResource(resourceUri + "​hour"​);​ 
- Property sevenAm = model.createProperty(propertyUri + "​seven-before9am"​);​ 
- Property sixPm = model.createProperty(propertyUri + "​six-after5pm"​);​ 
- Property noon = model.createProperty(propertyUri + "​noon"​);​ 
- time.addProperty(sevenAm,​ hour); 
- time.addProperty(sixPm,​ hour); 
- time.addProperty(noon,​ hour); 
-  
- //6 
- //-- 
-  
- //7 
- Resource month = model.createResource(resourceUri+ "​month"​);​ 
- Resource summer = model.createResource(resourceUri+"​summer"​);​ 
- Property january = model.createProperty(propertyUri+"​january"​);​ 
- Property february = model.createProperty(propertyUri+"​february"​);​ 
- Property december = model.createProperty(propertyUri+"​december"​);​ 
- month.addProperty(january,​ summer); 
- month.addProperty(february,​ summer); 
- month.addProperty(december,​ summer); 
-  
- //8 
- Resource autumn = model.createResource(resourceUri+"​autumn"​);​ 
- Property march = model.createProperty(propertyUri+"​march"​);​ 
- Property april = model.createProperty(propertyUri+"​april"​);​ 
- Property may = model.createProperty(propertyUri+"​may"​);​ 
- month.addProperty(march,​ autumn); 
- month.addProperty(april,​ autumn); 
- month.addProperty(may,​ autumn); 
-  
- //9 
- Resource winter = model.createResource(resourceUri+"​winter"​);​ 
- Property june = model.createProperty(propertyUri+"​june"​);​ 
- Property july = model.createProperty(propertyUri+"​july"​);​ 
- Property august = model.createProperty(propertyUri+"​august"​);​ 
- month.addProperty(june,​ winter); 
- month.addProperty(july,​ winter); 
- month.addProperty(august,​ winter); 
-  
- //10 
- Resource spring = model.createResource(resourceUri+"​spring"​);​ 
- Property september = model.createProperty(propertyUri+"​september"​);​ 
- Property october = model.createProperty(propertyUri+"​october"​);​ 
- Property november = model.createProperty(propertyUri+"​november"​);​ 
- month.addProperty(september,​ spring); 
- month.addProperty(october,​ spring); 
- month.addProperty(november,​ spring); 
-  
- //11 12 13 
- Resource operation = model.createResource(resourceUri + "​operation"​);​ 
- Property businessHours = model.createProperty(propertyUri + "​businessHours"​);​ 
- Property notBusinessHours = model.createProperty(propertyUri + "​notBusinessHours"​);​ 
- operation.addProperty(businessHours,​ hour); 
- operation.addProperty(notBusinessHours,​ hour); 
- 
- //14 15 16 17 18 
- Resource thermostat = model.createResource(resourceUri + "​thermostat"​);​ 
- Resource setting = model.createResource(resourceUri + "​setting"​);​ 
- Property degrees20 = model.createProperty(propertyUri + "​20degrees"​);​ 
- Property degrees15 = model.createProperty(propertyUri + "​15degrees"​);​ 
- Property degrees24 = model.createProperty(propertyUri + "​24degrees"​);​ 
- Property degrees27 = model.createProperty(propertyUri + "​27degrees"​);​ 
- Property degrees16 = model.createProperty(propertyUri + "​16degrees"​);​ 
- Property degrees18 = model.createProperty(propertyUri + "​18degrees"​);​ 
- Property degrees14 = model.createProperty(propertyUri + "​14degrees"​);​ 
- thermostat.addProperty(degrees20,​ setting); 
- thermostat.addProperty(degrees15,​ setting); 
- thermostat.addProperty(degrees24,​ setting); 
- thermostat.addProperty(degrees27,​ setting); 
- thermostat.addProperty(degrees16,​ setting); 
- thermostat.addProperty(degrees18,​ setting); 
- thermostat.addProperty(degrees14,​ setting); 
-</​code>​ 
- 
-Na tej podstawie wygenerowałem plik RDF z zapisanym modelem: 
-<code xml> 
-<rdf:RDF 
-    xmlns:​j.0="​http://​Property/​my/​18"​ 
-    xmlns:​j.1="​http://​Property/​my/"​ 
-    xmlns:​j.2="​http://​Property/​my/​15"​ 
-    xmlns:​j.3="​http://​Property/​my/​24"​ 
-    xmlns:​rdf="​http://​www.w3.org/​1999/​02/​22-rdf-syntax-ns#"​ 
-    xmlns:​j.4="​http://​Property/​my/​27"​ 
-    xmlns:​j.5="​http://​Property/​my/​16"​ 
-    xmlns:​j.7="​http://​Property/​my/​14"​ 
-    xmlns:​j.6="​http://​Property/​my/​20"​ >  
-  <​rdf:​Description rdf:​about="​http://​Resource/​my/​time">​ 
-    <​j.1:​noon rdf:​resource="​http://​Resource/​my/​hour"/>​ 
-    <​j.1:​six-after5pm rdf:​resource="​http://​Resource/​my/​hour"/>​ 
-    <​j.1:​seven-before9am rdf:​resource="​http://​Resource/​my/​hour"/>​ 
-  </​rdf:​Description>​ 
-  <​rdf:​Description rdf:​about="​http://​Resource/​my/​month">​ 
-    <​j.1:​january rdf:​resource="​http://​Resource/​my/​summer"/>​ 
-    <​j.1:​february rdf:​resource="​http://​Resource/​my/​summer"/>​ 
-    <​j.1:​september rdf:​resource="​http://​Resource/​my/​spring"/>​ 
-    <​j.1:​october rdf:​resource="​http://​Resource/​my/​spring"/>​ 
-    <​j.1:​july rdf:​resource="​http://​Resource/​my/​winter"/>​ 
-    <​j.1:​november rdf:​resource="​http://​Resource/​my/​spring"/>​ 
-    <j.1:may rdf:​resource="​http://​Resource/​my/​autumn"/>​ 
-    <​j.1:​april rdf:​resource="​http://​Resource/​my/​autumn"/>​ 
-    <​j.1:​august rdf:​resource="​http://​Resource/​my/​winter"/>​ 
-    <​j.1:​june rdf:​resource="​http://​Resource/​my/​winter"/>​ 
-    <​j.1:​december rdf:​resource="​http://​Resource/​my/​summer"/>​ 
-    <​j.1:​march rdf:​resource="​http://​Resource/​my/​autumn"/>​ 
-  </​rdf:​Description>​ 
-  <​rdf:​Description rdf:​about="​http://​Resource/​my/​Day">​ 
-    <​j.1:​sunday rdf:​resource="​http://​Resource/​my/​Weekend"/>​ 
-    <​j.1:​saturday rdf:​resource="​http://​Resource/​my/​Weekend"/>​ 
-    <​j.1:​friday rdf:​resource="​http://​Resource/​my/​Workday"/>​ 
-    <​j.1:​thursday rdf:​resource="​http://​Resource/​my/​Workday"/>​ 
-    <​j.1:​wednesday rdf:​resource="​http://​Resource/​my/​Workday"/>​ 
-    <​j.1:​tuesday rdf:​resource="​http://​Resource/​my/​Workday"/>​ 
-    <​j.1:​monday rdf:​resource="​http://​Resource/​my/​Workday"/>​ 
-  </​rdf:​Description>​ 
-  <​rdf:​Description rdf:​about="​http://​Resource/​my/​operation">​ 
-    <​j.1:​notBusinessHours rdf:​resource="​http://​Resource/​my/​hour"/>​ 
-    <​j.1:​businessHours rdf:​resource="​http://​Resource/​my/​hour"/>​ 
-  </​rdf:​Description>​ 
-  <​rdf:​Description rdf:​about="​http://​Resource/​my/​thermostat">​ 
-    <​j.7:​degrees rdf:​resource="​http://​Resource/​my/​setting"/>​ 
-    <​j.0:​degrees rdf:​resource="​http://​Resource/​my/​setting"/>​ 
-    <​j.5:​degrees rdf:​resource="​http://​Resource/​my/​setting"/>​ 
-    <​j.4:​degrees rdf:​resource="​http://​Resource/​my/​setting"/>​ 
-    <​j.3:​degrees rdf:​resource="​http://​Resource/​my/​setting"/>​ 
-    <​j.2:​degrees rdf:​resource="​http://​Resource/​my/​setting"/>​ 
-    <​j.6:​degrees rdf:​resource="​http://​Resource/​my/​setting"/>​ 
-  </​rdf:​Description>​ 
-</​rdf:​RDF>​ 
- 
-</​code>​ 
- 
-====== 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 (pdf file!) 
- 
-== Jena rules == 
- 
-[[http://​jena.sourceforge.net/​inference/​index.html#​rules| Jena rules page]] - Jena rules documentation 
- 
-[[http://​www.ldodds.com/​blog/​archives/​000219.html| Example]] -  Rules in Jena example 
- 
-[[http://​jena.hpl.hp.com/​juc2006/​proceedings/​reynolds/​rules-slides.ppt| Examlpe2]] - HP Example of using Jena Rules (ppt file!) 
- 
-== 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.txt · ostatnio zmienione: 2019/06/27 15:50 (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