====== SemWeb_RDFStore ====== Dawid Molenda dawid at molenda.info * RDF Stores - investigate the tools' functionality & possibilities * importing data from Relational Databases into RDF Triple Stores › examples, applications * importing data from various sources (spreadsheets, databases, other…) into RDF Triple Stores ====== Spotkania ====== ===== 20090521 ===== godz. 11:00 * szkic sprawozdania ok - proszę uzupelnić * aplikacja ===== 20090513 ==== * dołożyc do porównania do tabelki: [[http://www.swi-prolog.org/web/index.txt|swi-prolog, cliopatria]] * 2 przypadki użycia: * rodzina - powiązania * miasto - wydarzenia * o dbpedii, freebase, yago etc.(opis, linki do danych) * + to co nie zostało wgrane z poprzedniego razu ===== 20090421 ==== * na następny raz: * uzupelnic tabelke por. narzędzi * wykaz istniejacych baz RDF * ok.3 propozycje przypadkow użycia * pdfy, prezentacje - **wgrać do wiki** z krótkim komentarzem ===== 20090327 ==== * na nast. raz: * syntetyczne porówn narz * poczytać o RDFS/OWL * wybrany silnik/i (sparql->niezależny od impl) * przypadki użycia ===== 20090312 ==== * ogólny cel projektu: poznać metody inż.wiedzy w SemWeb, w szczególności zastosowanie RDF, RDFS, OWL w praktycznych aplikacjach * stworzyć prototyp aplikacji * baza danych RDF * Query Engine * GUI * na następny raz proszę przygotować (opisać w sekcji [[#Sprawozdanie]]): * architektura aplikacji Semantic Web z bazą danych w postaci RDFStore * dostępne RDFStore -> patrz linki w sekcji [[#Materiały]] oraz [[http://semanticweb.org/wiki/Category:RDF_store|na stronie SemanticWeb.org]] ====== Projekt ====== ====== Sprawozdanie ====== ===== Konwersja SQL -> RDF ===== Relacyjne bazy danych pozwalają na to aby tabela miała dowolną liczbę kolumn których wiersz wyraża informację dotyczącą predykatu w logice pierwszego rzędu z dowolną ilością miejsc. Taki wiersz albo predykat musi być dekomponowany do reprezentacji jako trójka RDF. Prosta forma dekompozycji wprowadza nowy pusty węzeł odpowiadający wierszowi i nowa trójka (triple) jest wprowadzona do jego każdej komórki. Temat każdej trójki to nowy pusty węzeł, predykat odpowiada nazwie kolumny, a obiektem jest wartość wprowadzona do komórki wiersza. Nowy pusty węzeł może mieć także właściwość rdf:type, której wartość odpowiada nazwie tabeli. Stąd bardziej kompleksowy fakt wyraża się w RDF przy użyciu iloczynu logicznego (logical-AND) prostej relacji dwuargumentowej. RDF nie dostarcza środków do negacji (NOT) czy alternatywy (OR). [[http://www.geocities.com/pan_andrew/ResourceDescriptionFramework.htm|Koncepcje i Składnia Abstrakcyjna]] ===== Trójka RDF ===== * temat (podmiot) który jest znacznikiem RDF URI lub pusty węzeł * predykat, który jest znaczniekiem RDF URI * obiekt, który jest znacznikiem RDF URI, literałem lub pustym węzłem ===== RDF/RDFS/OWL ===== W wielkim skrócie jakie są różnice: * **RDF** Język opisu zasobów. * **RDFS** O ile RDF zawiera jedynie informacje w postaci grafu skierowanego, to RDF Schema wprowadza podstawowe pojęcia, pozwalające na strukturalne uporządkowanie tego grafu. RDF Schema stanowi bazę dla języka OWL. Wprowadza pojęcie klasy i właściwości. * **RDFS+ (OWL RDFS+)** Jest to RDFS wzbogacony o predykaty owl:sameAs i owl:InverseFunctionalProperty z języka OWL. * **OWL** OWL dodaje więcej słownictwa dla opisywania właściwości I klas: między innymi, relacje między klasami (np. rozłączność), liczebność (np. dokładnie jeden), równość, bogatsze grupowanie właściwości, cechy właściwości (np. symetryczność), oraz ponumerowane klasy. Istnieją 3 podjęzyki OWL o wzrastającej ekspresyjności: **OWL Lite** Udostępnia jedynie proste ograniczenia (np. liczebność tylko 0 lub 1). **OWL DL** Udostępnia pełny model OWL ale z ograniczeniami gwarantującymi obliczeniową kompletność (wszystkie są wykonywalne obliczeniowo). Najczęściej wykorzystywany przy budowie ontologi OWL. **OWL Full** Udostępnia bez ograniczeń pełny model OWL i składniową dowolność RDF. Jak podaje W3C "mało prawdopodobne jest, by jakiekolwiek oprogramowanie logiczne będzie w stanie wspierać kompletne rozumowanie logiczne dla każdej cechy OWL Full". ===== Serializacja danych RDF ===== * **XML** Podstawowa metoda serializacji danych RDF. Jak w każdym dokumencie XML przerost formy nad treścią. Przykład: Tony Benn Wikipedia * **Notation3 (N3)** Obecnie najpolularniejsza metoda serializacji danych RDF, po definicji przestrzeni nazw (@prefix) nie trzeba używać pełnych URI. Dokument przedstawia po kolei trójki RDF bez dodatkowych tagów. Przykład: @prefix dc: . dc:title "Tony Benn"; dc:publisher "Wikipedia". [[http://www.w3.org/DesignIssues/Notation3.html]] [[http://en.wikipedia.org/wiki/Notation_3]] * **Turtle** Uproszczona wersja (pozdbiór) notacji N3. [[http://www.w3.org/TeamSubmission/turtle/]] [[http://en.wikipedia.org/wiki/Turtle_(syntax)]] * **RDFa** Standard pozwalający na dołączanie dancyh RDF do zwykłych stron XHTML. Każdemu elementowu HTML możemy przypisać dane RDF w ten sposób opisując wyrażeniami sieci semantycznej zwykłą treść strony.

The trouble with Bob

Alice

...
...
[[http://www.w3.org/TR/xhtml-rdfa-primer/]] [[http://www.w3.org/TR/rdfa-syntax/]] [[http://en.wikipedia.org/wiki/RDFa]] ===== SPARQL ===== Jest to język zapytań RDF. [[http://en.wikipedia.org/wiki/SPARQL]] [[http://www.w3.org/TR/rdf-sparql-query/]] ===== Dostępne bazy wiedzy ===== ==== Wikipedia ==== [[http://www.wikipedia.org/]] [[http://download.wikipedia.org/]] Wikipedia jset olbrzymią bazą wiedzy. Może być wykorzystana do testowania systemów analizy tekstu. Artykuły zawierają duże fragmenty ciągłego tekstu o łatwej do przewidzenia tematyce i co ważne są pisane względnie poprawnym, współcześnie używanym językiem. Bardzo szybko można bydować bazę wiedzy wykrozystująć szablony używane w [[http://en.wikipedia.org/wiki/Wikipedia:Infobox_templates|Infoboksach]]. Informacje zawarte w tej części są uporządkowane w formie tabeli klucz -> wartość i dotyczą okręślonego typu obiektu (np. miasto, polityk, roślina). Wykorzystująć linki pomiędzy wersjami językowymi można uzyskać nazwy pojęć w wielu językach (te linki znajdują się w osobnej tabeli 'langlinks', więc nie trzeba analizować treści artykułów). Przekierowania mogą być wykorzystane do budowy bazy równoznacznych nazw pojęć (także znajdują sie w osobnej tabeli 'redirects'). [[http://en.wikipedia.org/wiki/Wikipedia:Categorical_index|Kategorie]] porządkują pojęcia w zbiory dotyczące określonego tematu. Niestety panuję tu duża dowolność i wiele pojęć nie jest przypisanych do odpowiedniej kategorii. Kategorie są opisane w tabeli 'category'. Kolejnym elementem są linki zewnętrzne, są opisane w osobnej tabeli 'externallinks'. Zazwyczaj trafnie powiązują strony internetowe z danym pojęciem, dodatkowo część posiada tytuł, który opisuje zewnętrzną stronę. Wikipedii nie ma sensu analizować pobierając strony poszczególnych haseł, należy ściągnąć zrzuty bazy danych i załadować na lokalny serwer. Dane haseł (wraz z treścią) są dostępne w postaci pliku xml, pozostałe dane jako tabele MySQL. Problemem może być rozmiar danych, dla angielskiej wersji XML ma 21GB, a niektóre tabele SQL ponad 200 000 000 wierszy. ==== WikiProject Geographical coordinates ==== [[http://en.wikipedia.org/wiki/Wikipedia:WikiProject_Geographical_coordinates]] Projekt przyporządkowywania współrzędnych geograficznych do artykułów wikipedii. Dla wszystkich artykułów musi być wykorzystywany szablon [[http://en.wikipedia.org/wiki/Template:Coord|{{coord}}]]. Dzięki temu można przeparsować artykuły z wikipedii w celu wydobycia współrzednych, możliwe są 2 metody: * przegląd treści wszystkich artykułów w poszukiwaniu tagu `coord` (pliki *wiki-latest-pages-articles.xml), nie powinno się stosować - nie wszystkie współrzędne są wprost określone za pomocą `coord`, dużo danych jest w infoboxach w innej postaci. * lub lepsza metoda polegająca na przeglądzie tabeli `externallinks`, jest to możliwe ponieważ wszystkie współrzędne linkują w to samo miejsce 'http://stable.toolserver.org/geohack/geohack.php' (plik [[http://www.mediawiki.org/wiki/Externallinks_table|*wiki-latest-externallinks.sql]]) ** [[http://de.wikipedia.org/wiki/Wikipedia:WikiProjekt_Georeferenzierung/Wikipedia-World/en|Wikipedia-World]] ** Isnieje (istniał) projekt na wiki tools, który parsuje artykuły w poszukiwaniu współrzędnych i tworzy gotowe do pobrania tabele SQL. Niestety ostatnia aktualizacja to 5 sierpnia 2008. ==== DBpedia ==== [[http://www.dbpedia.org/]] DBpedia jest bazą wiedzy RDF (zawiera ponad 275 milionów trójek). Dane są tworzone na podstawie wikipedii (14 wersji językowych, także Polska). Opisuje ponad 2.5 miliona haseł (213,000 persons, 328,000 places, 57,000 music albums, 36,000 films, 20,000 companies). ** Dane ** DBpedia wykorzystuje kilka zbiorów RDF, lista wg przestrzeni nazw: * "dbpedia:" - nazwy zasobów (hasła). * "dbpprop:" - dane z infoboxów, są to zupełnie nie powiązane ze sobą trójki zawierające informacje przepisane wprost z infoboxów, wg. zasady klucz -> wartość (plik infobox_*.nt) * "dbpedia-owl:" - przetworzone dane z infoboxów, wszystkie predykaty tworzą uporządkowaną ontologie OWL, aktualnie ilość danych jest znacznie mniejsza w stosunku do "dbpprop:" (plik infobox-mappingbased-loose.nt, types-mappingbased.nt) * "foaf:" - [[http://xmlns.com/foaf/spec/]] (m.in. plik persondata_*.nt) * "skos:" - [[http://www.w3.org/TR/2009/CR-skos-reference-20090317/skos.html]] - powiązania z kategorami wikipedii (skos:subject, plik articlecategories_*.nt, skoscategories_*.nt) * "geo:" - [[http://www.w3.org/2003/01/geo/]], współrzędne geograficzne (plik: geo_*.nt) * "georss:" - [[http://www.georss.org/georss/point]], współrzędne geograficzne (plik: geo_*.nt) * "xsd:" - XML Shema * "rdf:" - wykorzystywany rdf:type - powiązania zasobów z ontologią dbpedia-owl (plik: types-mappingbased.nt) * "rdfs:" - wykorzystywane predykaty: rdfs:comment, rdfs:label * "owl:" - wykorzystywane predykaty: owl:sameAs - linki do innych baz Dla "rdf:", "rdfs:", "owl:" podałem tylko predykaty używane do opisu "haseł", opis ontologi wykorzystuje pełny RDFS / OWL-DL. DBpedia linkuje do kilku innych baz wiedzy, szczegóły na [[http://wiki.dbpedia.org/Interlinking]] ** Ontologia ** * [[http://wiki.dbpedia.org/Ontology|strona na wiki.dbpedia.org]] * Opis ontologi: [[http://downloads.dbpedia.org/3.2/en/dbpedia-ontology.owl]] * Graf klas: [[http://www4.wiwiss.fu-berlin.de/dbpedia/dev/ontology.htm]] * Ontologie można przeglądać za pomocą interfejsu HTML, np.: [[http://dbpedia.org/ontology/Place|klasa "Place"]], [[http://dbpedia.org/ontology/elevation|właściwość "elevation"]]. ** Przykładowe hasło ** [[http://dbpedia.org/page/Berlin]] ** Dostęp do danych ** [[http://wiki.dbpedia.org/Architecture?v=1411]] Dostępny jest interfejs SPARQL ([[http://dbpedia.org/sparql]]), SNORQL - interfejs do SPARQL w html ([[http://dbpedia.org/snorql/]]). Zasoby mogą być prezentowane jako: [[http://dbpedia.org/page/Berlin|html]], [[http://dbpedia.org/data/Berlin.n3|n3]], [[http://dbpedia.org/data/Berlin.rdf|rdf/xml]]. Można także pobrać pełny dump bazy (format N3): [[http://wiki.dbpedia.org/Downloads32]]. ** System parsujący dane z wikipedii ** Dokumentacja i link do kodu poprzez SVN: [[http://wiki.dbpedia.org/Documentation]], całość napisana w PHP, można pobrać pełny kod w tar.gz. Kod jest bardzo czytelny i jego fragmenty mogą być podstawą do pisania własnego parsera wiki, np. wspomnianego wydobywania współrzędnych geo - w kodzie jest m.in. klasa "GeoExtractor". ==== Freebase ==== [[http://www.freebase.com/]] [[http://www.freebase.com/view/freebase/faq]] Freebase jest otwartą bazą wiedzy tworzoną przez użytkowników (ale część danych pochodzi także z innych zaimportowanych źródeł). Freebase prezentuje trochę inne podejście niż pozostałe bazy wiedzy. Jest pełnym systemem prezentacji i edycji danych a dostęp Linked Data jest tylko kolejną możliwością przeglądania bazy, udostępnioną znacznie później niż inne interfejsy. Baza zawiera bardzo uporządkowane dane w ściśle określonych kategoriach, dla każdego hasła są wybrane odpowiednie zestawy właściwości, pojedyncze właściwości mogą odpowiadać predykatom RDF (np. zestaw "Location" zawiera informacje o lokalizacji geograficznej). ** Przykładowe hasło ** [[http://www.freebase.com/view/en/berlin]] ** Dostęp do danych ** [[http://download.freebase.com/datadumps/|Download]] - pliki nie są w formacie RDF. A full dump of Freebase assertions in a simple utf8 text format. This is a complete "low level" dump of data which is suitable for post processing into RDF or XML datasets. The format of the link export is a series of lines, one assertion per line. The lines are tab separated quadruples, , , , An assertion is a statement of fact about the object. In any assertion, either the or or both and are present. [[http://rdf.freebase.com/|Dostęp RDF]] - interfejs pozwalajaćy przeglądać pojedyncze hasła w formacie RDF (stworzony aby Freebase mogło być linkowane z innymi bazami RDF). Przykładowe hasło w RDF: [[http://rdf.freebase.com/rdf/en/berlin]] ==== Geonames ==== [[http://www.geonames.org/]] Jest to baza danych geograficznych dla całego świata. Udostępniania na licencji Creative Commons Attribution 3.0 License (jednak niektóre inne otwarte systemy, np. OpenStreetMap nie chcą korzystać z geonames ponieważ baza jest częściowo stworzona z komercyjnych zasobów bez otwartej licencji). Baza zawiera informacje zarówno o krajach, jednostach administracyjnych, miastach jak i innych obiektach geograficznych takich jak jeziora, szczyty, doliny. Aktualnie baza nie zawiera informacji o dzielnicach i ulicach. Każdy obiekt jest przydzielony do odpowiedniej kategorii ([[http://www.geonames.org/export/codes.html]]). Do każdego rekordu jest dołączona informacja o połorzeniu geograficznym (współrzędne geograficzne, kraj, podział administracyjny), populacji (tam gdzie pasuje), wysokością, obliczoną wysokością na podstawie danych GTOPO30, strefie czasowej. Dodatkowo dla krajów jest dostarczonych więcej informacji - nr kierunkowy, schemat kodów pocztowych, kody FIPS10-4, kody ISO, itp. Jedną z większych zalet geonames jest olbrzymia baza nazw alternatywnych, zawierająca skróty, nazwy potoczne oraz nazwy w kilkudziesięciu językach. ** Ontologia ** [[http://www.geonames.org/ontology/]] RDF endpoint http://sws.geonames.org/ serwuje dane rdf zgodne z Linked Data. Ontologia definiuje kilka klas, m.in.: * #Class - klasa (kategoria) * #Code - kod obiektu * #Country - kraj * #Feature - id obiektu w bazie geonames * #WikipediaArticle - artykuł z wikipedi o obiekcie owl:DatatypeProperty: * #alternateName - nazwa alternatywna * #name - nazwa * #officialName - nazwa oficjalna * #population - populacja * #postalCode - kod pocztowy * #wgs84_pos - współrzędne owl:ObjectProperty: * #childrenFeatures - link do "potomków" * #inCountry - kod iso kraju * #locatedIn - połorzenie wewnątrz innego obiektu * #nearby - obiekty połorzone w pobliżu * #nearbyFeatures - link do obiektów połorzonych w pobliżu * #neighbour - obiekty sąsiadujące * #neighbouringFeatures - link do obiektów sąsiadujących * #parentFeature - obiekt "rodzic" Dodatkowo w ontologi są zdefiniowane wszystkie kategorie obiektów (#featureClass, #featureCode) jako linki owl:sameAs do stron [[http://www.eionet.europa.eu/gemet/]], np. "kanał": [[http://www.eionet.europa.eu/gemet/concept/1126]]. Podsumowując ontologia pozwala na wyszukiwanie obiektów połorzonych w pobliżu, sąsiadujących i nadrzędnych do danego. ** Przykładowe zapytania ** * [[http://demo.openlinksw.com/ode/?uri=http://sws.geonames.org/3094802/]] - Kraków * [[http://demo.openlinksw.com/ode/?uri=http://sws.geonames.org/3094802/nearby.rdf]] - obiekty w pobliżu krakowa ** Web Services ** [[http://www.geonames.org/export/web-services.html]] Umożliwia zdalne pobieranie danych. ** Download: ** [[http://download.geonames.org/export/dump/]] Pliki są w formacie tekstu rozdzielanego tabulatorami. Aby załadować dane do bazy SQL najlepiej stworzyć tabele i posłużyć się komendą LOAD DATA INFILE. ==== yago ==== [[http://www.mpi-inf.mpg.de/yago-naga/yago/]] YAGO is a huge semantic knowledge base. Currently, YAGO knows more than 2 million entities (like persons, organizations, cities, etc.). It knows 20 million facts about these entities. Unlike many other automatically assembled knowledge bases, YAGO has a manually confirmed accuracy of 95%. ** Przykładowe zapytania ** [[http://www.mpi-inf.mpg.de/yago-naga/yago/demo.html]] ==== UMBEL ==== [[http://www.umbel.org/]] Umbel jest ontlogią posiadającą połączenia z innymi ontologiami oraz z innymi bazami wiedzy (dbpedia, yago). Sam projekt nie jest bazą wiedzy. W pełni wykorzystuje OWL-Full. Dokumentacja: [[http://www.umbel.org/documentation.html]] **Przykładowe hasło**: [[http://umbel.zitgist.com/reporter_named_entity.php?source_named_entity=http://umbel.org/umbel/ne/wikipedia/Berlin|http://umbel.org/umbel/ne/wikipedia/Berlin]] ( ==== OpenCyc, Cyc ==== [[http://pl.wikipedia.org/wiki/Cyc]] [[http://www.opencyc.org/doc]] OpenCyc is the open source version of the Cyc technology, the world's largest and most complete general knowledge base and commonsense reasoning engine. OpenCyc contains the full set of (non-proprietary) Cyc terms as well as millions of assertions about the. Cycorp offers this ontology at no cost and encourages you to make use of it as you see fit. Release 1.0 of OpenCyc includes the entire Cyc ontology containing hundreds of thousands of terms, along with millions of assertions relating the terms to each other, forming an upper ontology whose domain is all of human consensus reality. ==== WordNET ==== [[http://wordnet.princeton.edu/]] [[http://wordnet.princeton.edu/obtain]] WordNet® is a large lexical database of English, developed under the direction of George A. Miller. Nouns, verbs, adjectives and adverbs are grouped into sets of cognitive synonyms (synsets), each expressing a distinct concept. Synsets are interlinked by means of conceptual-semantic and lexical relations. The resulting network of meaningfully related words and concepts can be navigated with the browser. WordNet is also freely and publicly available for download. WordNet's structure makes it a useful tool for computational linguistics and natural language processing. ==== SUMO (Suggested Upper Merged Ontology) ==== [[http://www.ontologyportal.org/]] * Mappings to all of WordNet * Largest free, formal ontology available, with 20,000 terms and 70,000 axioms when all domain ontologies are combined. ==== DMOZ ==== [[http://www.dmoz.org/]] Publicznie dostępny dump bazy katalogu dmoz jest w formacie rdf, ale jest nie do końca zgodny ze standardami i są problemy z jego załadowaniem przez większość parserów. Format RDF jest tu prawdopodobnie wykorzystywany ze względu na łatwiejsze opisanie drzewa kategorii niż w bazach relacyjnych. Baza nie jest ciekawa pod względem bezpośredniego wykorzystania w SemWeb. Istnieją gotowe narzędzia do konwersji pobranych plików na tabele SQL, np.: [[http://sourceforge.net/projects/suckdmoz/|suckDMOZ]]. DMOZ może być wykorzystany jako lista stron o wstępnie określonej tematyce (choć bardzo niedokładnie), jako taka baza URLi może być wykorzystany do budowy pająka. [[http://rdf.dmoz.org/|RDF Dump]] ==== Chef Moz ==== [[http://chefmoz.org/]] Jest to baza wiedzy dotycząca restauracji. Bardzo stary projekt i już raczej nie aktualizowany. [[http://chefmoz.org/rdf.html|RDF dump download]]. ** Przykładowe hasła ** [[http://chefmoz.org/Poland/MP/Cracow/Stare_Miasto_-_I_-_Rynek_Główny/]] ==== MusicMoz ==== [[http://musicmoz.org/]] Baza wiedzy na temat muzyki (wykonawcy, albumy i inne). Projekt nie jest aktualizowany od 2007 roku. ** Download dancyh ** [[http://musicmoz.org/xml/]] Dane nie są w formacie RDF. ** Przykładowe hasło ** [[http://musicmoz.org/Bands_and_Artists/D/Delirious/]] XML: [[http://musicmoz.org/xml/musicmoz.bandsandartists.d.delirious.xml]] ===== Linked Data ===== Jedna z dziedzin Semantic Web. Zajmuje się łączeniem różnych otwartych zbiorów wiedzy RDF poprzez określenie standardu prezentacji danych. Jeśli system udostępniaja odpowiedni interfejs to możemy z dowolnego miejsca przeglądać dowolną bazę wiedzy wykrozystując dowolny kompatybilny interfejs (jak strony WWW). * [[http://en.wikipedia.org/wiki/Linked_Data]] * [[http://esw.w3.org/topic/SweoIG/TaskForces/CommunityProjects/LinkingOpenData]] * [[http://esw.w3.org/topic/TaskForces/CommunityProjects/LinkingOpenData/DataSets]] * [[http://esw.w3.org/topic/TaskForces/CommunityProjects/LinkingOpenData/DataSets/Statistics]] * [[http://www4.wiwiss.fu-berlin.de/bizer/pub/LinkedDataTutorial/]] * [[http://www.w3.org/DesignIssues/LinkedData.html]] * [[http://linkeddata.org/]] Hasło "Berlin" z DBpedii w dwóch przykładowych przeglądarkach Semantic Web: * http://www5.wiwiss.fu-berlin.de/marbles/?uri=http://dbpedia.org/resource/Berlin * http://demo.openlinksw.com/ode/?uri=http://dbpedia.org/resource/Berlin [[http://demo.openlinksw.com/sparql]] - pod tym adresem znajduje się interfejs sparql umożliwiający wykonywanie zapytań wykorzystujących Linked Data. ===== Sitemap Extension ===== Warto też wspomnieć o [[http://sw.deri.org/2007/07/sitemapextension/|Sitemap Extension]] umożliwiającym robotom dostęp do informacji. Mapa strony Semantic Web definiuje prefix dla zlączonych danych (np. http://dbpedia.org/resource/), adres interfejsu SPARQL, adresy zrzutów bazy danych oraz kilka dodatkowych informacji. Przykładowa mapa strony (dbpedia): [[http://dbpedia.org/sitemap.xml]] ===== RDF Stroes ===== [[http://en.wikipedia.org/wiki/Triplestore]] ^ Nazwa ^ Język ^ RDFS / OWL ^ Składowanie ^ Interfejs ^ Uwagi ^ Web ^ | 3store | C | - | MySQL \\ Berkeley DB | RDQL and SPARQL (HTTP server) C API | do 100mln | [[http://sourceforge.net/projects/threestore/]] \\ [[http://www.aktors.org/technologies/3store/]] | | Redland | C | - | Berkeley DB \\ MySQL \\ PostgreSQL \\ AKT Triplestore (?) \\ SQLite \\ files \\ URIs | SPARQL and RDQL \\ Perl \\ PHP \\ Python \\ Ruby | Raptor RDF Parser Library | [[http://librdf.org/]] | | ARC | PHP | - | MySQL | SPARQL \\ PHP | | [[http://arc.semsol.org/]] | | RAP | PHP | rdfs:subclass \\ rdfs:subproperty \\ rdfs:range \\ rdfs:domain \\ owl:sameAs \\ owl:inverseOf | Memory \\ Database | SPARQL \\ RDQL \\ PHP | [[http://phplens.com/lens/adodb/docs-adodb.htm|ADOdb Library]] \\ [[http://www.semanticscripting.org/SFSW2005/papers/Oldakowski-RAP.pdf]] | [[http://www4.wiwiss.fu-berlin.de/bizer/rdfapi/]] | | AllegroGraph | Java | RDFS+ \\ OWL DL | SPARQL \\ Prolog | Bardzo wydajny \\ Darmowy ma liczne ograniczenia – m.in. 50 mln trójek | [[http://www.franz.com/agraph/]] | | Jena | Java | RDFS \\ OWL | Memory \\ Database | SPARQL | Możliwość wyboru zakresu RDFS i OWL \\ Słaba wydajność RDFS/OWL dla baz danych (dobra tylko w pamięci) \\ Dla samego RDF bardzo dobra wydajność | [[http://jena.sourceforge.net/]] | | Mulgara | Java | - | Memory \\ Database | SPARQL | RDFS/OWL planowany | [[http://www.mulgara.org/]] | | Sesame | Java | RDFS | Memory \\ MySQL, PostgreSQL, Oracle | SeRQL \\ API | | [[http://www.openrdf.org/]] | | Oracle 11g | | RDFS \\ OWL Full | | | Darmowy dla deweloperów | [[http://www.oracle.com/technology/tech/semantic_technologies/index.html]] | | Virtuoso | | RDFS \\ OWL Full | | | | [[http://virtuoso.openlinksw.com/|Virtuoso]] \\ [[http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/|Virtuoso Open-Source Edition]] | | ClioPatria | Prolog | - | Memory | SeRQL \\ SPARQL | | [[http://e-culture.multimedian.nl/software/ClioPatria.shtml]] | ==== C/C++: ==== * [[http://www.aktors.org/technologies/3store/|3store]] (100M) 3store is an RDF "triple store", written in C and backed by MySQL and Berkeley DB. It is an optimisation and port of an older triple store (WebKBC). It provides access to the RDF data via RDQL or SPARQL over HTTP, on the command line or via a C API. [[http://sourceforge.net/projects/threestore/|strona na sourceforge]] * [[http://librdf.org/|Redland]] Redland is a set of free software libraries that provide support for the Resource Description Framework (RDF). The software is available under multiple licenses, namely GPL, LGPL, and Apache License, to simplify reuse. Posiada biblioteki do PHP i innych jezyków ==== PHP: ==== * [[http://arc.semsol.org/|ARC]] ARC is a flexible RDF system for semantic web and PHP practitioners, developed by Benjamin Nowack. It's open-source, easy to use, and runs in most web server environments. The new version of ARC, ARC 2, is currently available for preview. * [[http://www4.wiwiss.fu-berlin.de/bizer/rdfapi/|RAP]] RAP, the RDF API for PHP, is a software package for parsing, searching, manipulating, serializing and serving RDF models. Model wykorzystujący bazę danych nie obsługuje RDFS i OWL, wnioskowanie jest obsługiwane jedynie w modelach przechowujących bazę wiedzy w pamięci. ** Instalacja i uruchomienie ** Całość jest napisana w PHP więc nie jest wymagana instalacja - wystarczy po rozpakowaniu dołączyć do projektu (skryptu) odpowiednie pliki PHP i zyskujemy dostęp do RDF API. ==== Java: ==== * [[http://agraph.franz.com/|AllegroGraph]] (1B) AllegroGraph is a disk-based RDF Database, that aims at providing a solid storage layer for powerful geotemporal reasoning, social network analytics and ontology modeling capabilities for today's Semantic Technology applications. Biblioteki do prologa. * [[http://jena.sourceforge.net/|Jena]] (1.7B/650M/200M) Jena is a Java framework for building Semantic Web applications. It provides a programmatic environment for RDF, RDFS and OWL, SPARQL and includes a rule-based inference engine. **Joseki** is an HTTP engine that supports the SPARQL Protocol and the SPARQL RDF Query language. [[http://www.joseki.org/]] ** Instalacja i uruchomienie ** Po pobraniu wystarczy rozpakować archiwum i jeśli mamy zainstalowaną odpowiednią wersję java wszystko powinno działać. W pakiecie jest dostarczony skrypt testujący działanie. * [[http://www.mulgara.org/|Mulgara]] (500M) Mulgara is a scalable open source RDF database written entirely in Java. Mulgara is an open source fork of Kowari. * [[http://www.openrdf.org/|Sesame]] [[http://www.aduna-software.com/home/overview.view]] Sesame is an open source RDF framework with support for RDF Schema inferencing and querying. Originally, it was developed by Aduna (then known as Aidministrator) as a research prototype for the EU research project On-To-Knowledge. Now, it is further developed and maintained by Aduna in cooperation with NLnet Foundation, developers from Ontotext, and a number of volunteer developers who contribute ideas, bug reports and fixes. ** Instalacja i uruchomienie ** [[http://www.openrdf.org/doc/sesame/users/ch02.html]] Po pobraniu wystarczy rozpakować archiwum i jeśli mamy zainstalowaną odpowiednią wersję java wszystko powinno działać. Można wykonać test uruchamiając konsole. ==== Prolog: ==== * [[http://e-culture.multimedian.nl/software/ClioPatria.shtml|ClioPatria]] ClioPatria is the award winning, SWI-Prolog-based platform for Semantic Web Applications. It joins the SWI-Prolog RDF and HTTP infrastructure with a SeRQL/SPARQL query engine, interfacing to the The Yahoo! User Interface Library (YUI) and libraries that support semantic search. The platform combines a high performance in-core RDF store with flexible reasoning in Prolog, query optimization. Prolog's interactive usage and capabilities of recompiling modified source code while the system remains alive greatly speedup development. Key figures Up to about 25 million RDF triples on 32-bit hardware, only limited by memory on 64-bit hardware. Exploits multi-CPU and multi-core hardware to answer requests over HTTP concurrently. Runs on Windows, MacOS X, Linux and most Unix flavours, supporting both 32-bit and 64-bit operating systems. 64-bit systems are recommended for servers with lots of data or many users. * [[http://www.semanticweb.gr/TheaOWLLib/|Thea]] Thea is a Prolog library for generating and manipulating OWL (Web Ontology Language) content. Thea version 0.5 consists of: OWL parser, OWL generator and SQL to OWL converter. ==== Inne: ==== * [[http://virtuoso.openlinksw.com/|Virtuoso]] (1B) [[http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/]] Jeden z bardziej wydajnych silników. Wersja OpenLink Virtuoso używany m.in. przez DBpedia. Virtuoso Universal Server s a middleware and database engine hybrid that combines the functionality of a traditional RDBMS, ORDBMS, virtual database, Resource Description Framework (RDF), XML, free-text, Web Application Server, and File Server functionality in a single server product offering. Rather than have dedicated servers for each of the aforementioned functionality realms, Virtuoso is a "universal server"; it enables a single multithreaded server process that implements multiple protocols. The open source edition of Virtuoso Universal Server is also known as OpenLink Virtuoso. ** Instalacja i uruchomienie ** [[http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSMake]] Dotyczy wersji OpenLink Virtuoso. Po pobraniu archiwum (źródła) kompilujemy. ./configure make Następnie można uruchomić automatyczny skrypt testujący: make check Instalacja wymaga uprawnień root i zostanie wykonana po poleceniu: make install System nie sprawiał żadnych problemów podczas któregokolwiek etapu. * [[http://www.oracle.com/global/pl/tgb/produkty_oracle/database.html|Oracle 11g]] ===== Benchmark ===== * [[http://www4.wiwiss.fu-berlin.de/benchmarks-200801/]] - bardzo dobry test wydajności systemów RDF * [[http://www4.wiwiss.fu-berlin.de/bizer/BerlinSPARQLBenchmark/]] - nowa, jeszcze lepsza wersja testu, wszystko dokładnie omówione Podczas własnych testów zauważyłem, że ważna jest odpowiednia ilość pamięci (minimum 2GB), OpenLink Virtuoso podczas działania skryptu testującego zajmował około 1GB. Wszystkie środowiska uzyskują odpowiednią wydajność wtedy gdy dane są przechowywane w pamięci RAM. Przechowywanie danych RDF w bazie MySQL znacznie zmniejsza wydajność, a w niektórych prostych systemach wyłącza wnioskowanie. ===== Przykłady użycia ===== Przykłady opierają się na dbpedii. * Obiekty połorzone w pobliżu Krakowa: SELECT ?subject ?label ?lat ?long WHERE { geo:lat ?myLat . geo:long ?myLong . ?subject geo:lat ?lat. ?subject geo:long ?long. ?subject rdfs:label ?label. FILTER(xsd:float(?lat) - xsd:float(?myLat) <= 0.05 && xsd:float(?myLat) - xsd:float(?lat) <= 0.05 && xsd:float(?long) - xsd:float(?myLong) <= 0.05 && xsd:float(?myLong) - xsd:float(?long) <= 0.05 && (lang(?label) = "en" || lang(?label) = "pl")). } [[http://dbpedia.org/snorql/?query=SELECT+%3Fsubject+%3Flabel+%3Flat+%3Flong+WHERE+{%0D%0A%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FKrak%25C3%25B3w%3E+geo%3Alat+%3FmyLat+.%0D%0A%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FKrak%25C3%25B3w%3E+geo%3Along+%3FmyLong+.%0D%0A%3Fsubject+geo%3Alat+%3Flat.%0D%0A%3Fsubject+geo%3Along+%3Flong.%0D%0A%3Fsubject+rdfs%3Alabel+%3Flabel.%0D%0AFILTER(xsd%3Afloat(%3Flat)+-+xsd%3Afloat(%3FmyLat)+%3C%3D+0.05+%26%26%0D%0Axsd%3Afloat(%3FmyLat)+-+xsd%3Afloat(%3Flat)+%3C%3D+0.05+%26%26%0D%0Axsd%3Afloat(%3Flong)+-+xsd%3Afloat(%3FmyLong)+%3C%3D+0.05+%26%26%0D%0Axsd%3Afloat(%3FmyLong)+-+xsd%3Afloat(%3Flong)+%3C%3D+0.05+%26%26%0D%0A(lang(%3Flabel)+%3D+%22en%22+||+lang(%3Flabel)+%3D+%22pl%22)).%0D%0A}%0D%0A|wynik]] * Uniwersytety w Krakowie: SELECT ?subject ?label ?lat ?long WHERE { ?subject rdfs:label ?label. ?subject dbpprop:city . ?subject rdf:type . FILTER ( (lang(?label) = "en" || lang(?label) = "pl") ). OPTIONAL { ?subject geo:lat ?lat. ?subject geo:long ?long. } } [[http://dbpedia.org/snorql/?query=SELECT+%3Fsubject+%3Flabel+%3Flat+%3Flong+%0D%0AWHERE+{%0D%0A+++++%3Fsubject+rdfs%3Alabel+%3Flabel.%0D%0A+++++%3Fsubject+dbpprop%3Acity+%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FKrak%25C3%25B3w%3E.%0D%0A%09%3Fsubject+rdf%3Atype+%3Chttp%3A%2F%2Fdbpedia.org%2Fontology%2FUniversity%3E.%0D%0A%09+FILTER+(%0D%0A%09(lang(%3Flabel)+%3D+%22en%22+||+lang(%3Flabel)+%3D+%22pl%22)%0D%0A%09).%0D%0A%09OPTIONAL+{%0D%0A++++%3Fsubject+geo%3Alat+%3Flat.%0D%0A%09%3Fsubject+geo%3Along+%3Flong.%0D%0A%09}%0D%0A}%0D%0A|wynik]] * Obiekty powiązane z Krakowem: SELECT ?subject ?label ?lat ?long ?type WHERE { ?subject rdfs:label ?label. ?subject dbpprop:city . ?subject rdf:type ?type. FILTER ( (lang(?label) = "en" || lang(?label) = "pl") ). OPTIONAL { ?subject geo:lat ?lat. ?subject geo:long ?long. } } [[http://dbpedia.org/snorql/?query=SELECT+%3Fsubject+%3Flabel+%3Flat+%3Flong+%3Ftype%0D%0AWHERE+{%0D%0A+++++%3Fsubject+rdfs%3Alabel+%3Flabel.%0D%0A+++++%3Fsubject+dbpprop%3Acity+%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FKrak%25C3%25B3w%3E.%0D%0A%09%3Fsubject+rdf%3Atype+%3Ftype.%0D%0A%09+FILTER+(%0D%0A%09(lang(%3Flabel)+%3D+%22en%22+||+lang(%3Flabel)+%3D+%22pl%22)%0D%0A%09).%0D%0A%09OPTIONAL+{%0D%0A++++%3Fsubject+geo%3Alat+%3Flat.%0D%0A%09%3Fsubject+geo%3Along+%3Flong.%0D%0A%09}%0D%0A}%0D%0A|wynik]] * Polscy piłkarze: SELECT DISTINCT ?name ?type WHERE { ?subject ?func . ?func rdfs:label ?type. ?subject foaf:name ?name . ?subject rdf:type . } [[http://dbpedia.org/snorql/?query=SELECT+DISTINCT+%3Fname+%3Ftype%0D%0AWHERE+{%0D%0A++++%3Fsubject+%3Ffunc+%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FPoland%3E.%0D%0A%09%3Ffunc+rdfs%3Alabel+%3Ftype.%0D%0A++++%3Fsubject+foaf%3Aname+%3Fname+.%0D%0A++++%3Fsubject+rdf%3Atype+%3Chttp%3A%2F%2Fdbpedia.org%2Fontology%2FFootballPlayer%3E.%0D%0A}%0D%0A|wynik]] * Osoby powiązane z Berlinem: SELECT ?name ?type ?ffa ?fff WHERE { ?subject ?func . ?func rdfs:label ?type. ?subject foaf:name ?name . ?subject rdf:type . ?subject rdf:type ?ffa. ?ffa rdfs:label ?fff. } [[http://dbpedia.org/snorql/?query=SELECT+%3Fname+%3Ftype+%3Fffa+%3Ffff%0D%0AWHERE+{%0D%0A++++%3Fsubject+%3Ffunc+%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FBerlin%3E.%0D%0A%09%3Ffunc+rdfs%3Alabel+%3Ftype.%0D%0A++++%3Fsubject+foaf%3Aname+%3Fname+.%0D%0A++++%3Fsubject+rdf%3Atype+%3Chttp%3A%2F%2Fdbpedia.org%2Fontology%2FPerson%3E.%0D%0A%09%3Fsubject+rdf%3Atype+%3Fffa.%0D%0A%09%3Fffa+rdfs%3Alabel+%3Ffff.%0D%0A}%0D%0A|wynik]] ====== Prezentacja ====== ====== Materiały ====== Czyli zestaw, z którym trzeba się zapoznać: ===== Na początek ===== * [[http://www.amazon.ca/Semantic-Web-Working-Ontologist-Effective/dp/0123735564|D.Allemang, J.Hendler - "Semantic Web for the Working Ontologist"]] - książka, dobra na początek, wyjaśnia idee semweb oraz dosyć wyczerpująco omawia RDF, RDFS i OWL, bardzo dużo przykładów * [[http://en.wikipedia.org/wiki/Semantic_Web|Semantic Web]], [[http://en.wikipedia.org/wiki/Ontology_(computer_science)|Ontology]], [[http://pl.wikipedia.org/wiki/Resource_Description_Framework|RDF]], [[http://pl.wikipedia.org/wiki/OWL|OWL]] - kilka haseł na wiki * [[https://ai.ia.agh.edu.pl/wiki/pl:miw:miw08_hml_rules|miw08_hml_rules] - inny projekt z miw, m.in. informacje o RDF, OWL ===== Specyfikacje ===== * [[http://www.w3.org/RDF/|Resource Description Framework (RDF)]] - strony w3c o RDF * [[http://www.w3.org/TR/rdf-syntax-grammar/|RDF/XML Syntax Specification]] - specyfikacja RDF * [[http://www.geocities.com/pan_andrew/ResourceDescriptionFramework.htm|Struktura Opisu Zasobów (RDF)]] - polskie tłumaczenie specyfikacji RDF * [[http://www.w3.org/2004/OWL/|Web Ontology Language (OWL)]] - strony w3c o OWL * [[http://www.w3.org/TR/owl-features/|OWL Overview]] * [[http://www.w3.org/TR/owl-guide/|OWL Guide]] * [[http://www.w3.org/TR/owl-ref/|OWL Reference]] * [[http://www.w3.org/TR/owl-semantics/|OWL Semantics and Abstract Syntax]] * [[http://www.rax.pl/tlumaczenia/OWL-Web-Ontology-Language-Overview/index.htm|OWL Język Ontologii Sieciowej]] - polskie tłumaczenie * [[pl:miw:2009:miw09_semweb_rdfstore:|02-Shimizu.pdf]] - strona 14, logiczna reprezentacja predykatów OWL * [[pl:miw:2009:miw09_semweb_rdfstore:|icde_2008_inf_engine.pdf]] - prezentacja z Oracle na temat RDFS/OWL * [[http://tools.ietf.org/html/rfc3986|Uniform Resource Identifier (URI): Generic Syntax]] - przed czytaniem o RDF trzeba wiedzieć co to jest URI, w RDF używane są URI niehierarchiczne * [[http://pl.wikipedia.org/wiki/Uniform_Resource_Identifier|URI]] - w zasadzie wystarczy przeczytać na pl wiki ===== Narzędzia ===== * [[http://semanticweb.org/wiki/Category:RDF_store|RDF store]] - lista narzędzi na wiki semanticweb.org (nie wszystko aktualne - 5.2009) * [[http://esw.w3.org/topic/LargeTripleStores|LargeTripleStores]] - lista RDFStores z opisem wydajności różnych silników, już trochę nieaktualne, ale warto przeglądnąć * [[http://esw.w3.org/topic/SemanticWebTools|SemanticWebTools]] - lista narzędzi związanych z RDF * [[http://www.w3.org/TR/rdf-sparql-query/|SPARQL]] - specyfikacja SPARQL na w3.org * [[http://en.wikipedia.org/wiki/SPARQL|SPARQL]] - SPARQL na wikipedii