Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:2009:miw09_drools_x [2009/03/26 00:18] jsi08 |
pl:miw:2009:miw09_drools_x [2019/06/27 15:50] (aktualna) |
[[http://www.jessrules.com/|Jess]]. | [[http://www.jessrules.com/|Jess]]. |
| |
====== Spotkania ====== | ===== Pokrewne projekty ===== |
===== 20090326 ===== | [[pl:miw:2009:miw09_xtt_drools|XTT_Drools]] - Szymon Frenkel\\ |
* zainst. drools | [[pl:miw:2009:miw2009_tematy#drools_tools|Drools_Tools]] - niestety nikt się nim nie zajmuje |
* w razie czego RIF < CLIPS | |
| |
===== 20090312 ===== | ====== Prezentacja ====== |
* tutoriale, przyklady [[http://clipsrules.sourceforge.net/|clips]] | |
http://www.comp.rgu.ac.uk/staff/smc/teaching/clips/tutorial/node2.html http://cobweb.ecn.purdue.edu/~engelb/abe565/week9.htm http://iweb.tntech.edu/bhuguenard/ds6530/ClipsTutorial/tableOfContents.htm | |
* tutoriale rif/swrl | |
* zainst drools | |
| |
===== 20090225 ==== | ====== Sprawozdanie ====== |
ACK | Celem projektu było przeszukanie siecii za istniejącymi aplikacjami lub sposobami konwersji pomiędzy: Drools, CLIPS i RIF.\\ |
| [[http://www.jboss.org/drools/|Drools]] to silnik reguł [[http://www.jboss.org/|JBoss]]'a, stworzony przedewszystkim do modelowania systemów biznesowych, lecz również może być wykorzystywany w innych celach.\\ |
| [[http://clipsrules.sourceforge.net/|CLIPS]] to narzędzie do modelowania systemów eksperckich.\\ |
| [[http://www.w3.org/2005/rules/wiki/RIF_Working_Group|RIF]] to specyfikacja zapisu reguł z użyciem XML'a. |
| |
Praca poznawcza oparta na [[http://www.jboss.org/drools/|Drools]] 4.0.7. Dokumentacja dostępna na stronie Drools'a ([[http://downloads.jboss.com/drools/docs/4.0.7.19894.GA/html_single/index.html|dokumentacja]]). | ===== Import/eksport, konwersja ===== |
| Tutaj będę opisywał znalezione możliwości konwersji z jednej reprezentacji na inną. |
| ==== CLIPS --> Drools ==== |
| Znalazłem na [[http://blog.athico.com/|blogu Drools'a]] wpis sprzed roku o prowadzonych pracach nad Drools'ową powłoką interpretującą reguły zapisane w Clips'ie. Można znaleźć wpis [[http://blog.athico.com/2008/02/drools-clips.html|tutaj]]. Odnalazłem nowsze repozytorium źródeł dotyczących tego projektu praktycznie w tym samym katalogu, który jest podany we wpisie. Oto odnalezione przeze mnie [[http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/|źródło]]. [[https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/javadocs/unstable/drools-clips/org/drools/clips/package-summary.html|Tutaj]] natomiast można znaleźć dokumentację do CLIPS'owej powłoki Drools'a.\\ |
| Nie jest to konwerter lecz tylko Drools'owe środowisko do korzystania z CLIPS'a. Niestety nie posiada pełni możliwości CLIPS'a. |
| ==== Drools --> CLIPS ==== |
| Znalezienie jakiejkolwiek wzmianki o konwersji Drools'owych reguł do CLIPS'a zakończyło się niepowodzeniem. Nigdzie temat konwersji z Drools'a do CLIPS'a nie został poruszony. |
| ==== Drools --> RIF, RIF --> Drools ==== |
| Prace nad specyfikacją [[http://www.w3.org/|World Wide Web Consortium]] do zapisu reguł: [[http://www.w3.org/2005/rules/wiki/RIF_Working_Group|RIF - Rule Interchange Format]] rozpoczęły się pod koniec 2005 roku. W dalszym ciągu jest to nie zamknięty projekt, a kolejne wydania specyfikacji wprowadzają wiele zmian do wcześniejszych i dlatego na razie jest małopopularny. Brak na siecii jakichkolwiek wzmianek dotyczących możliwej konwersji pomiędzy Drools'em i RIF'em. |
| ==== XML Schema --> Drools, Drools --> XML Schema ==== |
| Po za programem projektu jednak natrafiłem na możliwość zapisu reguł Drools'owych za pomocą [[http://www.w3.org/XML/Schema|XML Schema]]. |
| W [[http://downloads.jboss.com/drools/docs/4.0.7.19894.GA/html_single/index.html#d0e4611|dokumentacji w rozdziale '6.9. XML Rule Language']] została opisana możliwość reprezentacji reguł w formacie XML z użyciem standardu [[http://www.w3.org/XML/Schema|XML Schema]]. Drools sam posiada 2 klasy do obsługi swojego formatu DRL oraz 2 klasy do obsługi formatu XML: |
| * XmlDumper - tworzy pliki XML reguł |
| * XmlPackageReader - czyta pliki XML reguł |
| * DrlDumper - tworzy pliki DRL reguł |
| * DrlParser - czyta pliki DRL reguł |
| Przykład użycia (konwersja z DRL na XMLSchema): |
| <code java> |
| Reader aDrlSource = new InputStreamReader( DroolsTest.class.getResourceAsStream( "/Sample.drl" ) ); |
| DrlParser aDrlParser = new DrlParser(); |
| PackageDescr aXmlDescr = aDrlParser.parse(aDrlSource); |
| XmlDumper aXmlDumper = new XmlDumper(); |
| String aXmlString = aXmlDumper.dump(aXmlDescr); |
| Writer aXmlOutput = new BufferedWriter(new FileWriter("Sample.xml")); |
| try { |
| aXmlOutput.write(aXmlString); |
| } |
| finally |
| { |
| aXmlOutput.close(); |
| } |
| aDrlSource.close(); |
| </code> |
| Przykład użycia (konwersja z XMLSchema na DRL): |
| <code java> |
| Reader aXmlSource = new InputStreamReader( DroolsTest.class.getResourceAsStream( "/Sample.xml" ) ); |
| XmlPackageReader aXmlParser = new XmlPackageReader(); |
| PackageDescr aDrlDescr = aXmlParser.read(aXmlSource); |
| DrlDumper aDrlDumper = new DrlDumper(); |
| String aDrlString = aDrlDumper.dump(aDrlDescr); |
| Writer aDrlOutput = new BufferedWriter(new FileWriter("Sample.drl")); |
| try { |
| aDrlOutput.write(aDrlString); |
| } |
| finally |
| { |
| aDrlOutput.close(); |
| } |
| aXmlSource.close(); |
| </code> |
| |
Elementy Drools'a: | ====== Spotkania ====== |
- silnik reguł (rule engine): | [[pl:miw:2009:miw09_drools_x:spotkania|Notatki ze spotkań projektowych]] |
* algorytm Rete00 - zoptymalizowana implementacja algorytmu [[http://en.wikipedia.org/wiki/Rete_algorithm|Rete]] | |
* wnioskowanie w przód ([[http://en.wikipedia.org/wiki/Forward_chaining|forward chaining]]) | |
* logika pierwszego rzędu ([[http://en.wikipedia.org/wiki/First_order_logic|first order logic]]) | |
* pamięć robocza (working memory) - baza wiedzy dla silnika, która to pamięć w Drools'ie posiada dwa rozszerzenia: | |
* 'stateful' | |
* 'stateless' | |
* kontrola wykonania i aktywacji reguł prowadzona w 'Agenda' z wykorzystaniem rozwiązywania konfliktów (conflict resolution) | |
| |
====== Projekt ====== | ====== Projekt ====== |
====== Sprawozdanie ====== | [[pl:miw:2009:miw09_drools_instalacja|Instalacja Drools'a]]\\ |
====== Prezentacja ====== | [[pl:miw:2009:miw09_drools_x:projekt|Poszerzenie projektu o gramatyki Drools'a]] |
====== Przebieg działań ====== | |
Działania z Drools'em opisuję dla pracy z Ubuntu 8.10 amd64.\\ | |
Na innym sprzęcie i innym systemie operacyjnym może to wyglądać inaczej. | |
===== Instalacja Drools'a ===== | |
==== Silnik reguł ==== | |
Próba instalacji silnika reguł niestety na razie się jeszcze nie powiodła.\\ | |
Poniżej znajdują się dotychczasowe próby instalacji i ich opis krok po kroku: | |
=== Apache/Tomcat + Drools 4.0.7 BRMS === | |
Czyli wykorzystanie serwera Apache 2.0 z Tomcat6, silnik reguł Drools 4.0.7: | |
- Instalacja serwera Apache 2.0 | |
* na ubuntu najprostszy sposób to skorzystanie z repozytorium, w linii komend wpisujemy <code>sudo apt-get install apache2</code> i apache sam się instaluje | |
* apache'a nie musiałem instalować, ponieważ moje ubuntu już miało domyślnie zainstalowany serwer plików | |
- Instalacja Tomcat6 | |
* tak samo jak z apache instalujemy z repozytorium, idziemy do linii komend i wpisujemy <code>sudo apt-get install tomcat6</code> | |
* teraz musimy jednak poustawiać kilka rzeczy | |
* szukamy gdzie nam się zainstalował tomcat6, powinniśmy móc go znaleźć w '/var/lib/tomcat6/conf/' | |
* teraz jako root edytujemy plik '/var/lib/tomcat6/conf/tomcat-users.xml' i zmieniamy wpis podobny do tego: <code><tomcat-users> | |
<!-- | |
<role rolename="tomcat"/> | |
<role rolename="role1"/> | |
<user username="tomcat" password="tomcat" roles="tomcat"/> | |
<user username="both" password="tomcat" roles="tomcat,role1"/> | |
<user username="role1" password="tomcat" roles="role1"/> | |
--> | |
</tomcat-users></code> na <code><tomcat-users> | |
<role rolename="manager"/> | |
<role rolename="admin"/> | |
<user username="jakis_uzytkownik" password="jakies_haslo" roles="manager,admin"/> | |
</tomcat-users></code> | |
- Ustawienie silnika reguł | |
* ściągamy [[http://download.jboss.org/drools/release/4.0.7.19894.GA/drools-4.0.7-brms.zip|Drools 4.0.7 BRMS]] ze strony [[http://www.jboss.org/drools/downloads.html|Drools - download]] | |
* wypakowujemy z 'drools-4.0.7-brms.zip' do jakiegoś katalogu 'drools-4.0.7-brms.war' | |
* włączamy przeglądarkę internetową i wchodzimy na adres [[http://localhost:8080/]] - wejdziemy na stronę powitalną tomcat'a | |
* z menu tomcat'a wybieramy 'manager webapp' i logujemy się jako osoba z 'tomcat-users.xml' | |
* zostaniemy przeniesieni na stronę menager'a tomcat'a | |
* na dole strony znajduje się dział 'Deploy', nas interesuje 'WAR file to deploy' (dolny). Podajemy ścieżke do naszego pliku 'drools-4.0.7-brms.war' lub po prostu Browse...'ujemy nasz plik, po czym klikamy na przycisk 'Deploy' | |
* w tym momencie na liście aplikacji powinna zostać dodana aplikacja '/drools-jbrms', która powinna zostać od razu uruchomiona | |
* jeśli nie została automatycznie uruchomiona należy kliknąć w przycisk 'Start' w kolumnie 'Commands' na liście aplikacji 'Applications' | |
Niestety nie miałem tyle szczęścia i silnik reguł odmawiał współpracy. Próby ingerencji w ustawienia tomcat'a jak i plik archiwalny '.war' w niczym nie pomogły - powód nieznany. | |
==== Eclipse ==== | |
Próba instalacji pluginu do eclipse'a na razie nie wykazała zadowalających rezultatów.\\ | |
Zgodnie z [[http://downloads.jboss.com/drools/docs/4.0.7.19894.GA/html_single/index.html#d0e1334|dokumentacją]] potrzebujemy Eclipse, plugin GEF i plugin z Drools'em (udało mi się znaleźć tylko plugin JBoss-tools).\\ | |
Poniżej znajdują się dotychczasowe próby instalacji i ich opis krok po kroku: | |
=== Instalacja Eclipse === | |
Instalacja Eclipse'a jest bardzo łatwa pod ubuntu. W linii komend wpisujemy: <code>sudo apt-get install eclipse</code> i powienien zainstalować się ostatni dostępny eclipse z dodanych przez ubuntu do repozytorium.\\ | |
W moim przypadku jest to wersja 3.2.2. | |
=== Instalacja pluginów z wykorzystaniem menagera pluginów === | |
Eclipse posiada wbudowany menager pluginów, który pozwala z poziomu eclipse instalować pluginy. W Eclipse 3.2.2 dotrzeć można do niego poprzez główne menu 'Help->Software Updates->Find and Install...'.\\ | |
Niestety w moim przypadku Eclipse ma problemy z połączeniem się do witryn z pluginami i niestety nie mogłem skorzystać z tej możliwości. | |
=== Ręczna instalacja pluginów z binariów === | |
- Na początek musimy zainstalować [[http://www.eclipse.org/downloads/download.php?file=/tools/gef/downloads/drops/3.4.2/R200902171642/GEF-ALL-3.4.2.zip&url=http://ftp.man.poznan.pl/eclipse/tools/gef/downloads/drops/3.4.2/R200902171642/GEF-ALL-3.4.2.zip&mirror_id=488|plugin GEF]] ze strony [[http://www.eclipse.org/gef/downloads/|GEF - download]] | |
* ściągamy go i rozpakowujemy (powinien wypakować się do folderu 'eclipse/') | |
* odnajdujemy miejsce instalacji eclipse'a, bardzo możliwe że będzie to '/usr/lib/eclipse/' | |
* teraz musimy przekopiować zawartość ściągniętego pluginu do naszej instalacji eclipse'a i tutaj\\z 'eclipse/features/' do '/usr/lib/eclipse/features/'\\oraz\\z 'eclipse/plugins/' do '/usr/lib/eclipse/plugins/' | |
* wystarczy uruchomić ponownie eclipse'a, aby móc korzystać z GEF'a | |
- Drugi krok to instalacja [[http://sourceforge.net/project/downloading.php?groupname=jboss&filename=JBossTools-2.1.2.GA-ALL-linux-gtk-x86_64.zip&use_mirror=switch|plugin jboss-tools]] ze strony [[http://www.jboss.org/tools/download.html|jboss-tools - download]] | |
* ściągamy go i rozpakowujemy (powinien wypakować się do folderu 'eclipse/') | |
* teraz musimy przekopiować zawartość ściągniętego pluginu do naszej instalacji eclipse'a i tutaj\\z 'eclipse/features/' do '/usr/lib/eclipse/features/'\\oraz\\z 'eclipse/plugins/' do '/usr/lib/eclipse/plugins/' | |
* wystarczy uruchomić ponownie eclipse'a, aby móc korzystać z Drools'a i JBoss-tools'a | |
Z tego co zauważyłem w ustawieniach eclipse'a wygląda, że oba pluginy się zainstalowały, lecz gdy otwarłem plik z regułami drools'a to eclipse nie kolorował składni. Gdy próbowałem dodać projekt z przykładami drools'a nastąpił błąd podczas przebudowy projektu. Eclipse'owi brakuje jeszcze kilku binariów, lecz nie dotarłem na razie, w którym miejscu mam je umieścić. | |
===== Import/eksport, konwersja ===== | |
Tutaj będę opisywał znalezione możliwości konwersji z jednej reprezentacji na inną. | |
==== Clips --> Drools ==== | |
Znalazłem na [[http://blog.athico.com/|blogu Drools'a]] wpis sprzed roku o prowadzonych pracach nad Drools'ową powłoką interpretującą reguły zapisane w Clips'ie. Można znaleźć wpis [[http://blog.athico.com/2008/02/drools-clips.html|tutaj]]. Odnalazłem nowsze repozytorium źródeł dotyczących tego projektu praktycznie w tym samym katalogu, który jest podany we wpisie. Oto odnalezione przeze mnie [[http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/|źródło]]. | |
====== Materiały ====== | ====== Materiały ====== |
* [[http://www.jboss.org/drools/|Drools]] <llysik@gmail.com> | * [[http://www.jboss.org/drools/|Drools]] <llysik@gmail.com> |
* [[http://blog.athico.com/2008/02/drools-clips.html|Drools - blog - import kodu z Clips'a]] | * [[http://blog.athico.com/2008/02/drools-clips.html|Drools - blog - import kodu z Clips'a]] |
* [[http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/|Clips -> Drools - Drools shell supporting Clips]] | * [[http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/|Clips -> Drools - Drools shell supporting Clips]] |
| * [[http://download.jboss.org/drools/release/4.0.7.19894.GA/drools-4.0.7-eclipse3.2.zip|Drools 4.0.7 Eclipse 3.2 Workbench - plugin drools'a do eclipse'a]] |
| * [[pl:miw:miw08_xtt_rif]] |
| * [[https://developer.opencloud.com/devportal/display/FSMDv083/Appendix+B.+VFSM+DSL+Grammar|Gramatyka DSL w formacie EBNF ANTLR]] |
| * [[http://www.w3.org/2005/rules/wiki/RIF_Working_Group|RIF Working Group]] |
| * [[http://www.w3.org/2005/rules/wg/draft/ED-rif-bld-20081218/#XML_Serialization_Syntax_for_RIF-BLD|RIF syntax example]] |
| |