1. Słowo wstępu
Triplestore jest bazą danych przeznaczoną do przechowywania i pobierania meta-danych RDF. Podobnie jak w przypadku relacyjnych baz danych (DBMS) dane są pobierane za pomocą specjalnego języka zapytań, np. SPARQL. Triplestore jest zoptymalizowany do zarządzania krótkimi stwierdzeniami zwanymi triples, w formie podmiot-predykat-obiekt np. „Bob zna Freda”.
Sesame jest open-sourcową bazą danych ze wsparciem dla wnioskowania na RDF Schema i wykonywaniu zapytań. Jest bardzo podobna do Jeny, z tym, że Jena zajmuje swoją uwagę mechanizmami wnioskowania. Natomiast Sesame jest zoptymalizowany do przechowywania RDF i wykonywania zapytań. Wydaje się być bardziej niezawodny i szybszy od Jeny. Ponadto ma wsparcie do obsługi transakcji i zapisywania Notation3 data. Obecnie Trwają prace umożliwiające wykorzystanie narzędzi wnioskowania Jeny w Sesame.
2. Typy repozytoriów w Sesame
Sesame pozwala na tworzenie repozytoriów czterech typów:
- przechowywanych w pamięci RAM (In Memory Store)
- przechowywanych na dysku HDD (Native Java Store)
- przechowywanych w relacyjnej bazie danych (obecnie tylko mySQL/postgreSQL RDF Store)
- Remote RDF Store (dostępne na innym serwerze)
Poza tym dwa pierwsze typy repozytoriów dostępne są z opcją przechowywania informacji o RDF Schema – wykorzystywane one są do wnioskowania. Pierwszy z nich jest najwydajniejszy jednak nie nadaje się do przechowywania dużych zbiorów danych. W przypadku takich danych najlepiej sprawdza się korzystanie z relacyjnej bazy danych.
3. MySQL RDF Store
Podczas tworzenia tego typu repozytorium trzeba podać wiele danych konfiguracyjnych. Przykładowe dane dostępne są poniżej dla triplestor’a przechowującego informacje o filmach utworzonego za pomocą Sesame Workbench:
| Type: | MySQL RDF Store |
| ID: | MovieDB |
| Tittle: | MovieDB |
| JDBC Driver: | com.mysql.jdbc.Driver |
| Host: | localhost |
| Port: | 3306 |
| Database: | MovieDB |
| Connection : | jdbc:mysql://localhost:3306/MovieDB |
| User: | <Nazwa_użytkownika_DB> |
| Password: | <Hasło_użytkownika_DB> |
| Max nr of triple | 256 |
Trzeba pamiętać oczywiście o wcześniejszym dodaniu sterownika JDBC do folderu [SESAME]/WEB-INF/lib.
Do utworzonego repozytorium należy załadować dane, można je pobrać z http://semprog.com/psw/chapter7/iva_movies.xml. Za pomocą Sesame Workbench dane można załadować za pomocą opcji “Add”. Ukaże się nam formularz, w którym trzeba wskazać lokalizację pliku i jego typ (w tym wypadku RDF/XML), pozostałych opcji można nie modyfikować.
4. Interfejsy dostępu do Sesame
Dostęp do danych zgromadzonych w repozytorium możliwy jest na kilka sposobów:
- za pomocą Sesame API (dostępne wyłącznie dla aplikacji napisanych w Javie)
- za pomocą Consoli
- za pomocą Workbencha
- za pomocą REST API
Wykonywanie zapytań do triplestore możliwe jest w języku SPARQL lub SeRQL (macierzystym języku Sesame).
4.1 Sesame API
Sesame dostarcza API, ktore może być wykorzystane przez aplikacje Javy do dostępu i zarządzania repozytoriami RDF. Pisząc aplikację w Javie, dodatkowo warto wykorzystać bibliotekę Elmo, pozwala ona na mapowanie obiektów Javy na RDF upraszczając w znacznym stopniu pisanie aplikacji Semantic Web. Więcej o mapowaniu obiektów do RDF można znaleść tutaj.
4.2 Consola Sesame
Znajduje się ona w folderze bin pakietu Sesame sdk (Console.sh). Po jej uruchomieniu możemy zarządzać triplestore’m z poziomu konsoli. Wykonywanie zapytań jak różwnież manipulacja danymi są w niej dopuszczalne.
Przykładowe komendy:
– connect http://localhost:8080/openrdf-sesame. – podłączenie się do Sesame server
– show r. – pokazanie wszystkich repozytoriów
– create <profile>. – stworzenie nowego repozytorium. Profile może być np. “memory”or “memory-rdfs”.
– open <repository>. – otwarcie repozytorium
– load <file name>. – załadowanie danych pliku do obecnego repozytorium
– close. – zamknij obecne repozytorium
– drop <repository> – usuń repozytorium
– sparql <query>. – wyślij zapytanie SPARQL do obecnego repozytorium
– exit. – zamknij konsolę
4.3 Sesame Workbench
Dostępny jest pod adresem http://localhost:8080/openrdf-workbench/. Dostarcza interfejsu graficznego do zarządzania repozytoriami (dodawanie/edycja/usuwanie). Głównym repozytorium jest SYSTEM, w którym nie należy umieszczać danych RDF. W nim znajduje się bowiem konfiguracja pozostałych repozytoriów. Dane konfiguracyjne domyślnie przechowywane są w ukrytym folderze w katalogu domowym użytkownika: .aduna. Skutkuje to tym, że usunięcie aplikacji webowej Sesame z folderu ../tomcat/webapps nie powoduje usunięcia informacji o repozytoriach. Ponowne umieszczenie w tym miejscu plików .war przywraca poprzedni stan.
Zapytanie w SPARQL:
Po załadowaniu danych z punktu 3 można wykonać przykładową kwerendę odpytującą o filmy, w których zagrał “John Malkovich”. Po wybraniu opcji Query ukaże nam się formularz Query Repository do którego trzeba wkleić poniższe zapytanie.
PREFIX dc:<http://purl.org/dc/elements/1.1/> PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX fb:<http://rdf.freebase.com/ns/> SELECT ?fn WHERE { ?film fb:film.film.performances ?perf . ?perf fb:film.performance.actor ?actor . ?act dc:title "John Malkovich" . ?film dc:title ?fn.
Kliknięcie w “Execute” zwróci wyniki.
Sesame poza językiem SPARQL obsługuje również język SeRQL (rozwijany od początku z Sesame).
4.4 Rest API
Polega ono na wysyłaniu do serwera poleceń HTTP. Są to polecenia :
- GET
- UPDATE
- PUT
- DELETE
Szczegółowy opis tych poleceń wraz z przykładami użycia dostępny jest tutaj.
Zapytanie w REST API:
http://localhost:8080/openrdf-sesame/repositories/Movie2? query=PREFIX+dc%3A<http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F>PREFIX+rdf%3A<http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf- syntax-ns%23>PREFIX+fb%3A<http%3A%2F%2Frdf.freebase.com%2Fns%2F>SELECT+%3Ffn+WHERE+{%3Ffilm+fb%3Afilm.film.performances+%3Fperf +.%3Fperf+fb%3Afilm.performance.actor+%3Factor+.%3Fact+dc%3Atitle+"John+Malkovich"+.%3Ffilm+dc%3Atitle+%3Ffn.}
Odpowiedzią jaką zwróci Sesame może być plik RDF/XML albo plik JSON.
Odpowiedź w REST API:
<?xml version='1.0' encoding='UTF-8'?> <sparql xmlns='http://www.w3.org/2005/sparql-results#'> <head> <variable name='fn'/> </head> <results> <result> <binding name='fn'> <literal>BOY IN THE STRIPED PAJAMAS, THE</literal> </binding> </result> .... </sparql>
Lista wszystkich repozytoriów na serwerze:
curl -H "Accept: application/sparql-results+xml, */*;q=0.5" http://localhost:8080/openrdf-sesame/repositories
Uwaga ! Jeżeli nie posiadamy curl, to instalujemy go komendą: sudo apt-get intall curl.
W przypadku korzystania z REST API i języka programowania Ruby, warto zaopatrzyć się w bibliotekę ActiveRDF (opis).
Jest to zorientowane obiektowo API do zarządzania danymi RDF,pozwala na pełne manipulowanie i wysyłanie zapytań do repozytorium.
5. Wnioskowanie
Sesame wspiera wnioskowanie na RDF Schema. Wsparcie do OWL zapewnia mu OWLIM .OWLIM wykorzystuje silnik IRRE w celu wnioskowania OWL DLP. Według przeprowadzonych badań SwiftOWLIM jest najszybszym silniekiem RDF(S) i OWL (darmowy). Wspiera własne reguły (custom rule engine).
Ciekawa prezentacja na temat biblioteki OWLIM znajduje się tutaj. Opis konfiguracji OWLIM z Sesame i Tomcatem znajduje się tutaj.
6. Bezpieczeństwo
Sesame nie posiada zintegrowanych mechanizmów zarządzających bezpieczeństwem dostępu do repozytoriów. Zamiast tego korzysta z mechanizmów bezpieczeństwa zaimplementowanych w kontenerze webowym (np. Tomcat). Reguły dostępu konfiguruje się w Tomcacie (więcej tutaj) albo dadaje się servlet filter do web.xml (i WEB-INF/classes). Jako, że każde repozytorium ma unikalny URL można określić prawa dostępu HTTP (dla metod GET, POST, PUT, etc.) do określonego użytkowniak dla każdego repozytorium.
7. Odnośniki
[Prezentacja Sesame2]:http://www.openrdf.org/conferences/eswc2006/Sesame-tutorial-eswc2006.ppt
[Prezentacja OWLIM]: http://www.openrdf.org/conferences/eswc2006/OWLIM_SesameTutorialESWC06.pdf
[Prezentacja Elmo]: http://www.openrdf.org/conferences/eswc2006/elmo/ESWC-Elmo.pdf
[Tutorial]: http://www.snee.com/bobdc.blog/2009/02/getting-started-with-sesame.html