To jest stara wersja strony!
Integracja z Semantic Web
Celem laboratorium jest przetestowanie wykorzystania Prologu w aplikacjach związanych z Semantic Web.
Wprowadzenie
Semantic Web
Podstawowymi standardami Semantic Web są:
-
RDFS
pozwala na tworzenie prostych taksonomii, czyli hierarchii pojęć
rozszerza RDF o predykaty typu Class, subClassOf, Property, subPropertyOf, Resource itd.
-
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.)
-
Dokumenty Semantic Web mogą znajdować się w sieci w postaci plików z rozszerzeniem *.rdf, *.owl, do ich wyszukiwania służy wyszukiwarka Swoogle
Adnotacje semantyczne mogą też być dodawane do istniejących stron, za pomocą odpowiedznich standardów, np.RDFa (
zobacz przykład (aby zobaczyć adnotacje pokaż źródło strony i wyszukaj „rdf”)).
SWI-Prolog
SWI-Prolog udostępnia kilka pakietów pozwalających na pracę z Semantic Web.
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:
-
-
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 :
?- use_module(library(semweb/rdf_db)).
Praca z dokumentami RDF
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:
?- rdf_load('sciezka_do_pliku').
Np.
?- rdf_load('wine.rdf').
?- rdf_load(['moviedatabase.rdf','earthrealm.rdf']).
?- rdf_unload('moviedatabase.rdf').
Zapytania do bazy RDF
Podstawowy predykat - rdf/3
Podstawowy predykat: rdf(?Subject, ?Predicate, ?Object))
(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 wine.rdf
Przetestuj działanie predykatu rdf/3:
?- rdf(A,S,D).
?- rdf(A,S,literal(lang(fr,D))), write(D), nl.
?- rdf(_,_,literal(Literal)).
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:
?- rdf(_,_,literal(Literal)).
Ćwiczenie:
Proszę przetestować:
?- rdf_current_literal(D).
?- rdf_subject(Subject).
?- rdf(Subject, _, _).
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.
Dla Zainteresowanych
Uwagi, komentarze, propozycje