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_semantic_wiki [2008/03/18 10:50]
miw
pl:miw:miw08_semantic_wiki [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== Opis ====== ====== Opis ======
 +__**Projekt zakończony**__
 +
 Marcin Juszkiewicz,​ <​monitorr@interia.pl>​ Marcin Juszkiewicz,​ <​monitorr@interia.pl>​
  
Linia 5: Linia 7:
 prolog wiki plugin, [[http://​en.wikipedia.org/​wiki/​Semantic_wiki|semantic wiki]] research, comparison prolog wiki plugin, [[http://​en.wikipedia.org/​wiki/​Semantic_wiki|semantic wiki]] research, comparison
  
-====== Spotkania ====== 
  
-<​code>​ 
-<swp> 
-spotkanie(data(3.4.8)). 
-</​swp>​ 
  
-<swp goal="​spotkanie(X)"​ scope="​pl:​miw"/>​ +====== Projekt ======
-</​code>​+
  
-===== 08.03.04 ​===== +===== Pluginy do zainstalowania ​=====
-  * ogólnie: kto coś już z tym robił?+
  
-  - http://​korrekt.org/​papers/​KroetzschVrandecicVoelkelHaller_SemanticMediaWiki_2007.pdf +   * {{:pl:miw:swpfin.zip|:pl:​miw:​swpfin.zip}} 
-  - http://​www.semanticwiki.com/ +   * {{:pl:​miw:​swpinputfin.zip|:​pl:​miw:​swpinputfin.zip}}
-  - http://​www2006.org/​programme/​files/​xhtml/​4039/​xhtml/​fp4039-voelkel.html +
-  - http://argentera.inria.fr/​wiki/​data/​Main/​MainHome.jsp+
  
-  * przechowywanie wiedzy semantycznej w wiki+===== Sprawozdanie =====
  
-  - http://pediaview.com/openpedia/Resource_Description_Framework +   * Cel 
-  http://pediaview.com/openpedia/Web_Ontology_Language+Celem projektu było stworzenie mechanizmu semantycznej wikipedii. 
 +Semantyczna wikipedia to taka która potrafi sama wyciągać „znaczenie” 
 +poszczególnych zdań, i tworzy linki (bądź wyciąga informacje) z innych 
 +stron, haseł zawartych w Wiki. W tym celu trzeba było zastosować,​ lub 
 +napisać maszynę wnioskującą. W moim projekcie rolę takiej maszyny pełni 
 +Prolog. Zostało obsłuzenie poszczególnych Tagów w wikipedii. Tak więc 
 +fakty będziemy wprowadzać kodem: 
 +<​code>​ 
 +<​swp>​fakt<​/swp> 
 +</code> 
 +Który następnie mozemy odczytać na dowolnej ilości stronAby 
 +zrealizować odczyt faktów naleŜy skorzystać z Tagu: 
 +<​code>​ 
 +<swp goal=”cel” scope=”przestrzen” ​/
 +</code> 
 +Gdzie przestrzeń jest to zbiór stron, lub poszczególna strona z której 
 +fakty są w obrębie naszego zainteresowania. 
 +   * Realizacja 
 +Swój projekt zrealizowałem na bazie dwóch pluginów. W jednym 
 +nazwanym „swpinput” obsługuję zdarzenia wprowadzenia,​ lub zmiany 
 +jakiegoś faktu, w drugim „swp” obsługuję „wyciąganie” poszczególnych 
 +informacji z określonej przestrzeni. Takie podejście będzie uzasadnione na 
 +poziomie cacha. Cachowanie stron na poziomie Wiki było najpowaŜniejszym 
 +problemem z jakim miałem do czynienia podczas realizacji projektu. 
 +Problem polegał na tym iŜ strona która wyciągała dane informacje z innej 
 +strony była cachowana przez Wiki, natomiast na stronie z której pobierane 
 +był informacje, mogły one zostać zmienione. 
 +Zapisywanie faktów odbywa się w pluginie swpinput. Generalnie 
 +jedynym zadaniem tego pluginu jest zamiana Tagów  
 +<​code>​ 
 +<​swp></​swp>​  
 +</​code>​ 
 +w wyrenderowanej stronie na czcionkę koloru czerwonego, oraz usunięcie 
 +cachów plików które są zalezne od tego pliku (pobierają z niego informację,​ 
 +lub odczytują informacje takiego typu, jaki został właśnie zawarty w tym 
 +pliku). Dokładny opis działania cacha, oraz usuwania cacha przedstawię w 
 +późniejszych punktach. 
 +Odczytywanie faktów odbywa się w pluginie „swp”. W wpisanym 
 +Tagu <swp /> odnajdujemy parametr „scope” który określa przestrzeń 
 +plików w których będziemy odnajdywać fakty. We wszystkich plikach które 
 +znajdują się w danej przestrzeni szukamy Tagów <​code><​swp></​swp></​code>,​ zgodnie ze 
 +specyfikacją tekst wewnątrz tych Tagów jest faktem który zostanie przyjęty 
 +przez Prolog. Dodatkowo w pluginie SWP wprowadziłem stałą CHECK, jezeli jest ona ustawiona na 0, to fakty nie będą przechodziły walidacji, jeśli na 1, to wszystkie fakty będą sprawdzane przed wprowadzeniem. Wszystkie te fakty 
 +zapisujemy w pliku tmp.pl, a następnie uruchamiamy prolog z parametrem 
 +„goal” zgodnie ze wzorem: 
 +<​code>​ 
 +swipl -f tmp.pl -g \’'​.$goal.',​writeln(X),​fail.\'';​ 
 +</​code>​ 
 +Odpowiedź uzyskaną z Prolog wstawiamy na wyrenderowaną stronę w 
 +czcionce w kolorze zielonym. 
 +   * Koncepcja CACHE 
 +Aby dokładnie opisać moją koncepcje wprowadzę dwa pojęcia, pojęcie 
 +pliku zaleŜnego, jest to plik który wyciąga informację (czyli z Tagiem <​code><​swp goal= scope= /></​code>​). Oraz pliku corowego, będę tak nazywał plik który posiada 
 +wpisane fakty (w Tagach <​code><​swp></​swp></​code>​). 
 +Podczas renderowania pliku zaleznego w katalogu 
 +„plugins/​swp/​pages” jest tworzony plik w takiej samej postaci jak to się dzieje w wikipedii. Czyli np. strona o id test:test2 zostaje zapisana w plugins/swp/pages/​test/​test2.tpl. W pliku tym zawarte są informację o plikach corowych z których dana strona pobiera informacje, oraz parametr „goal”. 
 +W momencie kiedy któryś z plików corowych zostaje zmieniony,​ 
 +plugin „swpinput” sprawdza czy w którymś z wcześniej stworzonych plików 
 +nie pobiera informacji z tego pliku corowego, lub nie szuka podobnego faktu. 
 +JeŜeli taka sytuacja ma miejsce, to plik cacha pliku zaleznego jest usuwany, 
 +co wymusza jego ponowne wyrenderowanie (juz z aktualnymi danymi). 
 +   * Implementacja 
 +Aby zrealizować odpowiednio powyzsze cele musiałem napisać kilka 
 +funkcji, znajdują się one w pliku swpinput.php oraz swp.php. 
 +<​code>​ 
 +function _search($base='​data/pages'​) ​// funkcja przeszukuję daną przestrzeń,​ 
 +oraz odnajduje wszystkie katalogi i pliki w tej przestrzenii 
 +function wyslij($pliki) //funkcja przeszukuje pliki podane jako parametr, 
 +szuka w nich Tagów <​swp></​swp>,​ a następnie wszystkie informacje 
 +między tymi tagami zapisuje do pliku tmp.pl 
 +function goal($c) // wykonuję w konsoli wywołanie prolog, z określonym 
 +jako parametr celem 
 +function save_core($files,​$goal=''​) // zapisuje informację o plikach 
 +zaleznych, z których plików corowych korzystają. 
 +function cache_delete($fakt='​fdsafas'​) // realizuje kasowanie cacha 
 +</​code>​ 
 +==== Podsumowanie ==== 
 +Podsumowując moje pluginy potrafią:​ 
 +   * Przyjmować fakty prologa, niezależnie czy z kropką na końcu czy bez co ułatwia prace. 
 +   * Walidować fakty prologa. 
 +   * Odnajdywać wszystkie fakty z zadanej przestrzeni,​ wprowadzić je do prologu, a następnie wyświetlić odpowiedź prologa na pytanie zadanie w parametrze goal. 
 +   * Zapisuje relacje pomiędzy stronami. 
 +   * Zapisuje cel jaki jest zadany prologowi na danej stronie, dzięki temu gdy pojawi się nowa strona z faktem który ​ odpowiada temu celowi, cache strony z tym celem jest usuwany.
  
-  * przechowywanie //​reguł// ​wiki +Jest nadal jednak kilka elementów nad którymi należało by się zastanowić. 
-  - http://wiki.splitbrain.org/​wiki:​syntax +   * Walidacja faktu prologu jest dość skomplikowanym procesem, fakt musi być zapisany ​jakimś pliku, później zostaje uruchomiony w prologu, i patrzymy jaka jest odpowiedź z prologaMożna pomyśleć nad jakimś szybkim parserem prologaJest to o tyle konieczne, ponieważ jeżeli w pliku z faktami będzie choćby jeden wprowadzony błędnie fakt, to nie otrzymamy odpowiedzi z prologa
-  - http://​kaukoluwiki.opendfki.de/​wiki/​SemanticWikiSyntax +   * Można również zastosować wyrażenia regularne w parametrze scopeNie jest to trudne zadanie do zrobienia, natomiast mogą występować z tym kłopoty przy dużej ilości plików (trzeba sprawdzić czy każdy jeden plik, pasuje do tego wyrażenia).
-  - http://​www.xml.com/​pub/​a/​2006/​12/​13/​semantic-wikis-and-disaster-relief-operations.html?page=2+
  
 +<​code>​
 +<swp>
 +spotkanie(data(3.4.8)).
 +</​swp>​
  
 +<swp goal="​spotkanie(X)"​ scope="​pl:​miw"/>​
 +</​code>​
  
 +  swipl -f mojpliktymcz.pl -g '​spotkanie(X),​write(X),​halt.'​
  
-===== 08.03.18 ​===== +====== Spotkania ====== 
-  * plugin w php do dokuwiki, urucham po stronie serwera swiprolog +[[pl:miw:miw08_semantic_wiki:​spotkania]]
- +
-* http://​student.agh.edu.pl/​~mjuszkie/​miw.txt +
-* http://​gollem.science.uva.nl/​SWI-Prolog/​Manual/​compilation.html +
- +
-====== Projekt ====== +
-====== Sprawozdanie ======+
 ====== Materiały ====== ====== Materiały ======
 ===== Wybrane Wikis ===== ===== Wybrane Wikis =====
pl/miw/miw08_semantic_wiki.1205833800.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