Różnice

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

Odnośnik do tego porównania

pl:prolog:prolog_lab:prolog_lab_semweb [2009/05/27 18:04]
piw09
pl:prolog:prolog_lab:prolog_lab_semweb [2019/06/27 15:50]
Linia 1: Linia 1:
  
-====== Integracja z Semantic Web ====== 
-Celem laboratorium jest przetestowanie wykorzystania Prologu w aplikacjach związanych z [[wp>​Semantic Web]]. 
- 
-===== Wprowadzenie ===== 
- 
-==== Semantic Web ==== 
- 
-Podstawowymi standardami Semantic Web są: 
-  * [[http://​www.w3schools.com/​rdf/​default.asp|RDF]] 
-    * umożliwia opis relacji pomiędzy zasobami w postaci trójek: ''​(subject predicate object)''​ 
-    * każdy element trójki RDF identyfikowany jest przez URI 
-    * składnia oparta na XML 
-    * [[http://​www.w3schools.com/​rdf/​RDFvalidationresult.htm|zobacz przykład]] trójek RDF zapisanych w postaci tabeli, w składni RDF/XML oraz w postaci graficznej 
-    * istnieje szereg słowników dla RDF, np. zbiór relacji opisujących zależności między ludźmi (FOAF ([[http://​api.iknow.co.jp/​users/​Rattle_turtle.rdf|przykład]])),​ zbiór relacji do opisu metadanych zbiorów informacyjnych ([[http://​www.w3schools.com/​rdf/​rdf_dublin.asp|DublinCore]]) i inne. 
-  * RDFS 
-    * pozwala na tworzenie prostych taksonomii, czyli hierarchii pojęć 
-    * rozszerza RDF o predykaty typu //Class//, //​subClassOf//,​ //​Property//,​ //​subPropertyOf//,​ //​Resource//​ itd. 
- 
-  * [[http://​www.w3schools.com/​rdf/​rdf_owl.asp|OWL]] 
-    * daje więcej możliwości niż RDFS, umożliwia tworzenie ontologii, czyli pewnego rodzaju modelu dziedziny w postaci pojęć (classes/​concepts) oraz relacji między nimi (properties/​roles). ​ 
-    * OWL jest oparty na wariancie Logiki Opisowej (Description Logic) i posiada formalną semantykę (znaczenie pojęć i relacji jest ściśle określone i pozwala na automatyczne wnioskowanie dot. np. hierarchii pojęć, instancji klas itd.) 
-    * ontologie można tworzyć w [[http://​protege.stanford.edu/​|Protege'​u]],​ przeglądać online w [[http://​pellet.owldl.com/​ontology-browser|OWL Sight]], a silnik wnioskujący to np. [[http://​clarkparsia.com/​pellet|Pellet]] 
- 
-Dokumenty Semantic Web mogą znajdować się w sieci w postaci plików z rozszerzeniem *.rdf, *.owl, ​ do ich wyszukiwania służy wyszukiwarka [[http://​swoogle.umbc.edu/​|Swoogle]] 
- 
-Adnotacje semantyczne mogą też być dodawane do istniejących stron, za pomocą odpowiedznich standardów,​ np.RDFa ( 
- ​[[http://​www.planbooktravel.com.au/​region-images/​QLD/​outback-queensland/​outback-queensland-400x272/​dinosaur-footprints-lark-quarry.jpg/​discussion_reply_form|zobacz przykład]] (aby zobaczyć adnotacje pokaż źródło strony i wyszukaj "​rdf"​)). 
- 
- 
-==== SWI-Prolog ==== 
-SWI-Prolog udostępnia [[http://​www.swi-prolog.org/​web/​index.txt|kilka pakietów]] pozwalających na pracę z  Semantic Web. 
- 
-[[http://​www.swi-prolog.org/​pldoc/​package/​semweb.html|Podstawowy pakiet]] do przetwarzania dokumentów RDF, umożliwia wczytywanie,​ wykonywanie zapytań oraz przechowywanie dokumentów Semantic Web oraz zawiera biblioteki XPCE do wizualizacji i edycji tych dokumentów. 
- 
-Dodatkowe pakiety to: 
-  * [[http://​www.swi-prolog.org/​web/​Triple20.html|The Triple20 ontology editor]] ​ - narzędzie do tworzenia, edycji i przeglądania ontologii. 
-  * [[http://​e-culture.multimedian.nl/​software/​ClioPatria.shtml|The ClioPatria semantic search web-server]] ​ - serwer umożliwiający wykonywanie zapytań w językach SPQRQL i SeRQL 
-  * [[http://​www.semanticweb.gr/​TheaOWLLib/​|Thea,​ an OWL library for SWI-Prolog]] - pakiet umożliwiający pracę z ontologiami zapisanymi w OWL. Umożliwia interakcję z silnikami wnioskującymi dla DL (Description Logics, formalizm , na którym oparty jest OWL). 
- 
- 
-Podstawowe moduły: 
-  * ''​library(semweb/​rdf_db.pl)''​ - przechowywanie i zapytania do RDF 
-  * ''​library(rdf.pl)''​ - parser RDF 
-  * ''​library(semweb/​rdfs.pl)''​ - zapytania RDFS 
-  * ''​library(semweb/​rdf_edit.pl)''​ - edytowanie dokumentów Semantic Web 
-  * ''​library(semweb/​owl.pl)''​ - zapytania OWL 
-Aktualna wersja biblioteki SWI-Prolog nie zawiera modułu owl.pl. ​ 
-Podstawowe wsparcie dla OWL jest częścią edytora Triple20. 
- 
-**Ćwiczenie:​** 
- 
-Uruchom : 
-<code prolog> 
-?- use_module(library('​semweb/​rdf_db'​)). 
-</​code>​ 
- 
-===== Praca z dokumentami RDF ===== 
-W tym ćwiczeniu pokazana zostanie (część) funkcjonalności [[http://​www.swi-prolog.org/​pldoc/​package/​semweb.html|podstawowej biblioteki swi-prolog semweb]]. 
- 
-Prosze pobrać przykładowe pliki: 
-  * [[http://​www.w3.org/​TR/​owl-guide/​wine.rdf|wine.rdf]] 
-  * [[http://​139.91.183.30:​9090/​RDF/​VRP/​Examples/​moviedatabase.rdf|moviedatabase.rdf]] 
-  * [[http://​athena.ics.forth.gr:​9090/​RDF/​VRP/​Examples/​earthrealm.rdf|earthrealm.rdf]] 
-  * [[http://​protege.stanford.edu/​junitOntologies/​testset/​animals-vh.owl|animals-vh.owl]] 
- 
-==== Wczytywanie i zapisywanie plików ==== 
-  * ''​rdf_load(+InOrList)''​ - wczytanie trójek z podanego źródła 
-  * ''​rdf_unload(+Spec)''​ - usunięcie trójek z podanego źródła 
-  * ''​rdf_save(+File)''​ - zapis do pliku 
- 
-**Ćwiczenie:​** 
-Wczytaj plik RDF/XML: 
-<code prolog> 
- ?- rdf_load('​sciezka_do_pliku'​). 
-</​code>​ 
-Np. 
-<code prolog> 
- ?- rdf_load('​wine.rdf'​). 
- ?- rdf_load(['​moviedatabase.rdf','​earthrealm.rdf'​]). 
- ?- rdf_unload('​moviedatabase.rdf'​). 
-</​code>​ 
- 
- 
-==== Zapytania do bazy RDF ==== 
- 
-=== Podstawowy predykat - rdf/3 === 
- 
-Podstawowy predykat: ''​rdf(?​Subject,​ ?Predicate, ?​Object))'' ​ ([[http://​www.swi-prolog.org/​pldoc/​man?​predicate=rdf%2f3|rdf/​3]]). 
-  * Subject i Predicate są atomami reprezentującymi identyfikator URI zasobu. 
-  * Object - może być URI lub tzw. literałem, czyli konkretną wartością. Literał może być typu: 
-    * Atom - jeżeli Object jest prostym tekstem, bez specyfikowania typu danych ​ 
-    * lang(LangID,​ Atom) - Atom reprezentuje tekst w podanym języku langID 
-    * type(TypeID,​ Value) - atrybuty o określonym typie danych (według ''​rdf:​datatype''​) TypeID. 
- 
- 
-**Ćwiczenie** 
- 
-Pobierz i wczytaj plik [[http://​www.w3.org/​TR/​owl-guide/​wine.rdf|wine.rdf]] ​ 
-Przetestuj działanie predykatu rdf/3: 
- 
-<code prolog> 
-?- rdf(A,S,D). 
-?- rdf(A,​S,​literal(lang(fr,​D))),​ write(D), nl. 
-?- rdf(_,​_,​literal(Literal)). 
-</​code>​ 
- 
-Jakie są możliwe typy danych? 
-Z jakiej przestrzeni nazw pochodzą? 
- 
-=== Wybieranie elementów z trójki === 
- 
-''​rdf_subject(?​Subject)''​ służy do pobierania pierwszych elementów trójek. 
-W przeciwieństwie do zapytania '':​-rdf(Subject,​ _, _).''​ nie zwraca duplikatów. 
- 
-Przeglądu wszystkich literałów można dokonać przez: 
- 
-<code prolog> 
-?- rdf(_,​_,​literal(Literal)). 
-</​code>​ 
- 
-**Ćwiczenie:​** 
-Proszę przetestować:​ 
-<code prolog> 
-?- rdf_current_literal(D). 
-?- rdf_subject(Subject). 
-?- rdf(Subject,​ _, _). 
-</​code>​ 
- 
-=== Zaawansowane wyszukiwanie === 
- 
-W celu wykonania bardziej zaawansowanych zapytań na tekstach, zmienna Object może być zastąpniona przez ''​literal(+Query,​ -Value)''​. 
-''​+Query''​ może mieć postać: 
-  * ''​exact(+Text)''​ - dokładne dopasowanie wzorca (bez rozróżnienia wielkości liter) 
-  * ''​su bstring(+Text)''​ - szukany tekst zawiera ''​+Text''​ 
-  * ''​word(+Text)''​ - szukany tekst zawiera ''​+Text''​ zakończony znakiem niealfanumerycznym 
-  * ''​prefix(+Text)''​ - szukany tekst zaczyna się od ''​+Text''​ 
-  * ''​like(+Pattern)''​ - wyszukiwanie za pomocą wyrażeń regularnych 
- 
-**Ćwiczenie** 
- 
-Proszę poeksperymentować z powyższymi zapytaniami. 
- 
- 
-==== Przestrzenie nazw ==== 
- 
-Każdy zasób identyfikowany jest przez URI, zawyczaj zawierający //​namespace//​. 
-Np. definicja ''​Class''​ jest identyfikowana przez URI: ''​http://​www.w3.org/​2000/​01/​rdf-schema#​Class''​ 
- 
-Biblioteka SWI-Prolog dostarcza specjalny predykat ns do mapowania przestrzeni nazw na krótsze nazwy symboliczne:​ 
- 
-ns(rdf, ​ '​http://​www.w3.org/​1999/​02/​22-rdf-syntax-ns#'​).\\ 
-ns(rdfs, '​http://​www.w3.org/​2000/​01/​rdf-schema#'​).\\ 
-ns(owl, ​ '​http://​www.w3.org/​2002/​7/​owl#'​).\\ 
-ns(xsd, ​ '​http://​www.w3.org/​2000/​10/​XMLSchema#'​).\\ 
-ns(dc, ​  '​http://​purl.org/​dc/​elements/​1.1/'​).\\ 
-ns(eor, ​ '​http://​dublincore.org/​2000/​03/​13/​eor#'​).\\ 
- 
-Aby móc w tworzonych predykatach uzywać tego mapowania należy użyć [[http://​www.swi-prolog.org/​pldoc/​man?​predicate=rdf_meta%2f1|rdf_meta/​1]]. 
- 
-Aby dodać nową przestrzeń nazw należy użyć predykatu ''​rdf_register_ns/​2''​. 
- 
-**Ćwiczenie** 
-Pobierz i wczytaj plik: {{:​pl:​prolog:​prolog_lab:​card.pl|}} 
-Przeanalizuj działanie. 
- 
-Więcej o przestrzeniach nazw [[http://​www.swi-prolog.org/​pldoc/​doc_for?​object=section%283%2c%20%273.5%27%2c%20swi%28%27%2fdoc%2fpackages%2fsemweb.html%27%29%29|w dokumentacji]]. 
- 
-==== Zapytania z użyciem RDFS ==== 
-Predykat ''​rdf_has(?​Subject,​ ?Predicate, ?Object, -TriplePred)''​. 
-Predykat ''​rdf_has/​3''​ używa relacji ''​rdfs:​subPropertyOf''​. 
-Zwraca trójki, w których własność (predicate) jest taka jak //​Predicate//​ lub jest jego pochodną (''​subPropertyOf''​) 
-Przykładowe użycie: znajdź wszystkie podklasy klasy Wine (UWAGA: każda klasa zdefiniowana jest przez unikalne URI, zatem np. klasa Wine to '​http://​www.w3.org/​TR/​2003/​PR-owl-guide-20031209/​wine#​Wine'​) 
- 
-<code prolog> 
-?- findall(S, rdf_has(S, rdfs:​subClassOf,​ '​http://​www.w3.org/​TR/​2003/​PR-owl-guide-20031209/​wine#​Wine'​),​SubClasses). 
-</​code>​ 
- 
-Predykat rdf_reachable(?​Subject,​ +Predicate, ?Object) sprawdza, czy Object jest osiągalny z Subject poprzez przechodnią relację Predicate 
- 
- 
-**Ćwiczenie** 
- 
-Proszę napisać predykat ''​subclasses(Class,​ SubClasses)'',​ który wyszuka wszystkie podklasy zadanej klasy Class i zunifikuje je z SubClasses. ​ 
- 
-Proszę pobrać plik: [[http://​139.91.183.30:​9090/​RDF/​VRP/​Examples/​moviedatabase.rdf|moviedatabase.rdf]]. 
-Ten plik stosuje identyfikatory względne, przestrzeń nazw jest określona przez bieżący katalog. 
- 
-Proszę dodać nową przestrzeń nazw, prowadzącą do bieżącego katalogu, np: 
- 
-<code prolog> 
-?- rdf_register_ns(movie,​ '​file:///​home/​users/​students/​temp/​wfurmanska/​prolog/​lab_semweb/​moviedatabase.rdf#'​) 
-</​code>​ 
- 
-Proszę wczytać plik [[http://​139.91.183.30:​9090/​RDF/​VRP/​Examples/​moviedatabase.rdf|moviedatabase.rdf]]. 
- 
-Proszę napisać predykat wyszukujący rodzaje filmów (podklasy klasy Movie). 
- 
-Proszę napisać predykat wyszukujący osoby pracujące przy tworzeniu filmu: (predicate '​participates'​). 
- 
-==== Modyfikowanie bazy ==== 
-Podstawowe: 
-  * ''​rdf_assert(+Subject,​ +Predicate, +Object)''​ 
-  * ''​rdf_retractall(?​Subject,​ ?Predicate, ?​Object)''​ 
-  * ''​rdf_update(+Subject,​ +Predicate, +Object, +Action)''​ - modyfikacja jednego z elementów trójki w zal. od argumentu ''​+Action''​ 
- 
-Zaawansowane - z uzyciem biblioteki ''​rdf_edit''​ - umożliwia transakcje i dostęp wielowątkowy 
-  * ''​rdf_transaction(:​Goal,​ +Id)''​ 
- 
- 
-===== Ontologie ===== 
- 
-==== Klasy, role, instancje ==== 
-Ontologie typowo składają się z //klas//, //​ról/​własności//​ (properties,​ predicates) i //​instancji//​ (instances, individuals). 
- 
-W RDFS: 
-  * **klasa** to zasób (subject), którego własnością (predicate) jest ''​rdf:​type'',​ a jej wartością (object) jest ''​rdfs:​Class''​ 
-  * **podklasy** definiuje się poprzez własność ''​rdfs:​subClassOf''​ 
-  * **instancje** klasy C to zasoby, których własność ''​rdf:​type''​ ma wartość C 
-  * zasób może być instancją więcej niż jednej klasy 
-  * **własności** są instancjami klasy ''​rdfs:​Property''​ 
-  * istnieją dwie ważne własności:​ ''​rdfs:​domain''​ do określania dziedziny danej własności,​ oraz ''​rdfs:​range''​ do określania przeciwdziedziny (klasa lub typ danych) 
- 
-==== RDFS ==== 
- 
-Przykładowe predykaty z biblioteki ''​semweb/​rdfs'':​ 
-  * ''​rdfs_subproperty_of(?​SubProperty,​ ?​Property)''​ 
-  * ''​rdfs_subclass_of(?​SubClass,​ ?​Class)''​ 
-  * ''​rdfs_class_property(+Class,​ ?​Property)''​ - zwraca true, jeśli dziedzina ''​Property''​ zawiera klasę ''​Class''​ 
-  * ''​rdfs_individual_of(?​Resource,​ ?​Class)''​ - zwraca true jeżeli dany zasób jest instancją danej klasy. Oznacza to, że w trójce RDF (subject predicate object) predicate to ''​rdf:​type''​ a object to pewna klasa. Predykat może być użyty to testowania przynależności do klasy, generowania instancji danej klasy lub generowania klas, do których nalezy dana instancja. 
- 
-**Ćwiczenie** 
-Proszę napisać predykaty: 
-  * wyszukanie wszystkich klas zdefiniowanych w danym pliku 
-  * znalezienie instancji danej klasy (jeśli w pliku nie ma żadnych instancji, proszę zastosować predykat rdf_assert/​3 i dodać jakieś instancje dowolnej klasy) 
-  * z użyciem własności ''​rdfs:​range''​ znalezienie możliwych typów danych 
-  
-==== OWL ==== 
-OWL rozgranicza własności,​ których przeciwdziedziną są obiekty klas  - są to ''​owl:​ObjectProperty''​ oraz te, których przeciwdziedziną są prymitywne typy danych ''​owl:​DatatypeProperty''​. 
- 
-Np. 
-?- rdf(S,​rdf:'​type',​owl:'​ObjectProperty'​). 
-wyszuka wszystkie własności zdefiniowane w ontologii win, których przeciwdziedziną są obiekty klas. 
- 
-**Ćwiczenie** 
-Proszę wyszukać własności typu owl:'​DatatypeProperty'​. 
- 
- 
-==== Edytor Triple20 ==== 
-Tworzenie i edytowanie ontologii możliwe jest dzięki edytorowi [[http://​www.swi-prolog.org/​web/​Triple20.html|Triple20]]. 
-Edytor ten wykorzystuje bibliotekę semweb. 
- 
-Aby uruchomić edytor Triple20 należy wpisać w konsoli: 
- 
-<​code>​ 
-triple20 
-</​code>​ 
- 
-**Ćwiczenie:​** 
-Proszę uruchomić Triple20. 
- 
-Następnie proszę wczytać uprzednio ściągnięte pliki oraz pliki ontologii bazowych. \\ 
-Proszę przeanalizować przykładowe ontologie. 
- 
-Jakie są typowe własności klas (properties)?​\\ 
-Jak budowana jest hierarchia?​\\ 
-Jaka klasa jest najbardziej ogólna w przestrzeni rdfs?\\ 
-A jaka w przestrzeni OWL?\\ 
- 
- 
- 
- 
- 
-==== Tworzenie ontologii ==== 
-Proszę stworzyć prostą ontologię opartą na [[https://​ai.ia.agh.edu.pl/​wiki/​hekate:​semweb:​dl_intro#​history_and_background|diagramie]]. 
- 
-Uwaga: W węzłach grafu znajdują się nazwy klas i instancji. ​ 
-Słowa pisane z welkiej litery (na diagramie) oznaczaja instancje danej klasy, ​ 
-słowa pisane z małej litery oznaczają nazwy klas. 
-Na krawędziach grafu znajduja się role (properties). 
- 
- 
-Proszę porównać zbudowaną ontologię z: [[http://​www.cs.man.ac.uk/​~horrocks/​ISWC2003/​Tutorial/​people+pets.owl.rdf|tą tutaj]]. 
- 
- 
-W miarę czasu i możliwości proszę poeksperymentować z tworzeniem i edycją ontologii, a także przeglądnąć przykładowe ontologie "​bazowe",​ takie jak FOAF, SKOS itd. 
- 
- 
-==== Wizualizacja grafów RDF ==== 
- 
-Na podstawie [[https://​ai.ia.agh.edu.pl/​wiki/​pl:​prolog:​prolog_lab:​prolog_lab_system#​tematgraphviz_i_imagemagick|ćwiczenia z Lab. Metaprogramowanie]] oraz przykładu poniżej, napisz program, który stworzy graf RDF na podstawie wczytanego pliku RDF/XML. 
- 
-Przykład pliku dla graphViza: 
- 
-<​code>​ 
-digraph D{ 
-Fred -> person [label = "is an instance of" ]; 
-Fred -> Tibbs [label = "has pet" ]; 
-Tibbs -> cat [label = "is an instance of" ]; 
-cat -> animal [label = "is an" ]; 
-person -> animal [ label= "is an" ]; 
-man -> adult [label = "is an" ]; 
-man -> male [label ="is a" ]; 
-man -> person [label = "is a" ]; 
-cat_liker -> person [label = "is a" ]; 
-cat_liker -> cat [label = "​likes"​ ]; 
-vegetarian -> animal [label = "is an" ]; 
-vegetarian -> animal [label = "​doesn'​t eat"]; 
-cow -> vegetarian [label = "is a" ]; 
-sheep -> animal [label = "is an" ]; 
-sheep -> grass [label = "eats only" ]; 
-} 
-</​code>​ 
- 
-===== Dla Zainteresowanych ===== 
-  * [[http://​www.google.pl/​url?​sa=t&​source=web&​ct=res&​cd=6&​url=http%3A%2F%2Fftp.informatik.rwth-aachen.de%2FPublications%2FCEUR-WS%2FVol-287%2Fpaper_1.pdf&​ei=-rAAStiVNZCZ_Qb4xYTyBg&​usg=AFQjCNHhlNu6e0nuEOKjRsLMkN5wGCN0xw&​sig2=X8tnc9A71XDvswaVmxCxSQ|Using ​                ​Prolog as the fundament for applications on the semantic web]]  
-  * [[http://​hcs.science.uva.nl/​projects/​SWI-Prolog/​articles/​iswc-03.pdf|Prolog-based Infrastructure for RDF: Scalability and Performance]] 
-  
-====== Uwagi, komentarze, propozycje ====== 
-Tu studenci mogą wpisywać swoje uwagi. 
- 
- --- //​[[gjn@agh.edu.pl|Grzegorz J. Nalepa]] 2009/05/06 09:13// 
- 
-Za mało przykładów (przydałby się np. do punktu Zaawansowane wyszukiwanie). Nie za bardzo wiadomo jak ma działać obsługa przestrzeni nazw (gdzie to można zastosować). 
- 
- --- //​[[szymek@adres.pl|Szymon Świerkosz]]//​ 
pl/prolog/prolog_lab/prolog_lab_semweb.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