Wpisy otagowane ‘sesame’

Sesame – triplestore

piątek, 9 Październik 2009

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

Instalacja serwera Sesame w wersji 2.2.4

piątek, 9 Październik 2009

1) Do instalacji Sesame wymagane jest:

  • Java
  • Tomcat

Opis instalacji obu tych narzędzi znajduje się tutaj.

2) Pobieramy pakiet sdk Sesame

Pobieramy pakiet poleceniem wget, rozpakowujemy archiwum i przenosimy pliki war do folderu webbapps serwera Tomcat.

wget http://sourceforge.net/projects/sesame/files/Sesame%202/2.2.4/openrdf-sesame-2.2.4-sdk.tar.gz/download
tar xvzf openrdf-sesame-2.2.4-sdk.tar.gz
mv ./openrdf-sesame-2.2.4/war/* /usr/local/tomcat/webapps

3) Wykonujemy reset Tomcata

 sudo /etc/init.d/tomcat restart

Po wpisaniu w oknie przeglądarki http://localhost:8080/openrdf-workbench/ ukaże nam się Workbench, za pomocą którego w łatwy sposób możemy zarządzać repozytoriami.

4) Integracja z MySQL

W celu dodania możliwości przechowywania repozytorium w MySQL należy umieścić odpowiedni sterownik JDBC w folderze

[TOMCAT_HOME]/webapps/openrdf-sesame/WEB-INF/lib/.

Żeby móc dodać sterownik wewnątrz podanego folderu trzeba zmienić prawa dostępu wszystkich plików i folderów znajdujących się wewnątrz folderu openrdf-sesame:

 sudo chmod 777 -R openrdf-sesame

Następnie pobieramy, rozpakowujemy i przenosimy w odpowiednie miejsce sterownik JDBC:

wget http://mirror.cogentco.com/pub/mysql/Connector-J/mysql-connector-java-5.1.9.tar.gz
tar mysql-connector-java-5.1.9.tar.gz
mv ./mysql-connector-java-5.1.9/*.jar /usr/local/tomcat/webapps/openrdf-sesame/WEB-INF/lib/

Uwaga ! Przed dodaniem bazy jako źródła repozytorium w Workbenchu, trzeba ją wcześniej utworzyć (np. w phpmyadmin).