[[
✎ pl:prolog:prolog_lab:prolog_lab_semweb
]]
aiWiki
Pokaż stronę
Ostatnie zmiany
Indeks
Zaloguj
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== 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'. ===== 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//
pl/prolog/prolog_lab/prolog_lab_semweb.1242779920.txt.gz
· ostatnio zmienione: 2019/06/27 15:59 (edycja zewnętrzna)
Pokaż stronę
Poprzednie wersje
Menadżer multimediów
Do góry