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:06]
gjn
pl:miw:miw08_semantic_wiki [2008/06/14 15:08]
gjn
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). 
- 
-====== Spotkania ====== 
- 
-<​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.04 ===== 
-  * ogólnie: kto coś już z tym robił? 
- 
-  - http://​korrekt.org/​papers/​KroetzschVrandecicVoelkelHaller_SemanticMediaWiki_2007.pdf 
-  - http://​www.semanticwiki.com/​ 
-  - 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 
- 
-  - http://​pediaview.com/​openpedia/​Resource_Description_Framework 
-  - http://​pediaview.com/​openpedia/​Web_Ontology_Language 
- 
-  * przechowywanie //reguł// w wiki 
-  - http://​wiki.splitbrain.org/​wiki:​syntax 
-  - http://​kaukoluwiki.opendfki.de/​wiki/​SemanticWikiSyntax 
-  - http://​www.xml.com/​pub/​a/​2006/​12/​13/​semantic-wikis-and-disaster-relief-operations.html?​page=2 
- 
- 
- 
- 
- 
- 
- 
-===== 080318 ===== 
-  * plugin w php do dokuwiki, urucham po stronie serwera swiprolog 
-    - http://​student.agh.edu.pl/​~mjuszkie/​miw.txt 
-    - http://​gollem.science.uva.nl/​SWI-Prolog/​Manual/​compilation.html 
- 
- 
-===== 080408 ===== 
-  * prototyp 
- 
- 
-===== 080527 ===== 
-  * cache? 
- 
- 
-===== 080603 ===== 
-  * beta pluginu do zainst 
-  * zarys sprawozd: cel, specyfi (fun), możliwe realizacje+projekt,​ implementacja,​ problemy+uwagi,​ etc.. 
-  * opis koncepcji cache w sprawozd 
- 
-====== 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. 
- 
  
pl/miw/miw08_semantic_wiki.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