Różnice

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

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
pl:miw:miw08_semantic_wiki [2008/06/14 15:08]
gjn
pl:miw:miw08_semantic_wiki [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 +====== Opis ======
 +__**Projekt zakończony**__
 +
 +Marcin Juszkiewicz,​ <​monitorr@interia.pl>​
 +
 +
 +prolog wiki plugin, [[http://​en.wikipedia.org/​wiki/​Semantic_wiki|semantic wiki]] research, comparison
 +
 +
 +
 +====== Projekt ======
 +
 +===== Pluginy do zainstalowania =====
 +
 +   * {{:​pl:​miw:​swpfin.zip|:​pl:​miw:​swpfin.zip}}
 +   * {{:​pl:​miw:​swpinputfin.zip|:​pl:​miw:​swpinputfin.zip}}
 +
 +===== Sprawozdanie =====
 +
 +   * Cel
 +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 stron. Aby
 +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.
 +
 +Jest nadal jednak kilka elementów nad którymi należało by się zastanowić.
 +   * Walidacja faktu prologu jest dość skomplikowanym procesem, fakt musi być zapisany w jakimś pliku, później zostaje uruchomiony w prologu, i patrzymy jaka jest odpowiedź z prologa. Można pomyśleć nad jakimś szybkim parserem prologa. Jest 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.
 +   * Można również zastosować wyrażenia regularne w parametrze scope. Nie 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).
 +
 +<​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.'​
 +
 +====== Spotkania ======
 +[[pl:​miw:​miw08_semantic_wiki:​spotkania]]
 +====== Materiały ======
 +===== Wybrane Wikis =====
 +  * [[http://​semantic-mediawiki.org/​|SemanticMediaWiki]]
 +  * [[http://​ikewiki.salzburgresearch.at/​|Ike Wiki]]
 +  * [[http://​argentera.inria.fr/​|SweetWiki]]
 +
 +===== Propozycja Dr Wojnickiego =====
 +To support AI teaching process and idea of a Semantic Wiki based on Prolog emerged.
 +It would support running Prolog code on the web server while rendering a wiki page.
 +Contents of such a page consists of a human-readable text, and optionally images, attachments etc, and a machine-readable and automatically interpreted knowledge expressing what the page is about.
 +
 +To support Prolog programming within the wiki there is an ongoing prototype implementation of a Prolog inference engine embedded into a DokuWiki system working as its extension.
 +It is called Prolog DokuWiki.
 +
 +As a result, in addition to text-based human-readable contents, there are Prolog clauses embedded into wiki pages.
 +These clauses can be automatically interpreted upon requesting the page.
 +Results of the interpretation (inference) process are directly rendered into the page.
 +
 +This constitutes a Semantic Wiki System based on Prolog.
 +It is similar, to some extent, to the semantic wiki systems currently available (Semantic MediaWIki, IkeWiki, SweetWiki).
 +Other semantic wiki systems use XML to annotate gathered information semantically while Prolog DokuWiki uses Prolog language clauses.
 +Furthermore,​ the clauses are interpreted upon displaying a given page.
 +
 +The extension introduces a new element indicated by a tag called ''​prolog''​.
 +Any text within the element is treated as Prolog clauses, it is interpreted by an externally launched Prolog inference engine.
 +As the inference engine SWI-Prolog is used.
 +
 +Upon rendering a page with a ''​prolog''​ element, the wiki system launches the inference engine which process clauses within the tag.
 +Standard output of the inference process is displayed in place of the element.
 +
 +There are special predicates which allow populating knowledge base with clauses from arbitrary chosen pages or namespaces.
 +There is a ''​wiki/​1''​ predicate defined which triggers the inference engine to interpret clauses embedded within other wiki pages.
 +If the first argument is a valid wiki page, the predicate browses it and interprets (consults) all clauses within ''​prolog''​ tags on this page.
 +If the argument is a namespace it browses all pages from this namespace and interprets all clauses found within the pages.
 +There is another predicate ''​wiki_recursive/​1''​ which interprets clauses from all pages in the given as a first argument namespace and all namespaces within it recursively.
 +
  
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