Odpytywanie semantycznych zasobów z użyciem klas ARC
przez admin dnia lut.26, 2010, w Programowanie
Od jakiegoś czasu dostępnych jest kilka, mniej lub bardziej popularnych narzędzi, za pomocą których można korzystać z dobrodziejstw semantic web. Większość języków programowania posiada na dzień dzisiejszy takowe. Jednym z nich jest ARC (RDF Classes for PHP).
Narzędzie to posiada kilka bardzo użytecznych funkcji, za pomocą których w łatwy sposób możemy odpytywać zasoby opisane w RDF. Klasy te posiadają parsery dla: RDF/XML, Turtle, SPARQL + SPOG, Legacy XML, HTML tag soup, RSS 2.0, Google Social Graph API JSON, umożliwiają wykorzystanie SPARQL Endpoint w bardzo szybki i prosty sposób, posiadają możliwość odczytywanie mikroformatów ze stron www (DC, eRDF, microformats, OpenID, RDFa). Pełna funkcjonalność opisana jest w dokumentacji pod adresem arc.semsol.org.
Pierwszym przykładowym zastosowaniem klas ARC jaki chce pokazać to zapytanie do serwisu DBPedia z wykorzystaniem SPARQL Endpoint. W ARC cały proces łączenia się z serwisem to parę linijek kodu:
include_once('arc/ARC2.php'); $config = array( 'remote_store_endpoint' => 'http://dbpedia.org/sparql', ); $store = ARC2::getRemoteStore($config);
Zapytanie będzie brzmiało tak: „Wyszukaj wszystkie nazwy państw (commonName), ich waluty (currency) z oznakowaniem (currencyCode), których oficjalny język (officialLanguages) to hiszpański.”
$query = ' PREFIX countries: <http://dbpedia.org/ontology/Country> SELECT DISTINCT ?name ?currency ?code WHERE { ?b rdf:type countries: . ?b <http://dbpedia.org/property/officialLanguages> ?c . ?b <http://dbpedia.org/property/commonName> ?name . ?b <http://dbpedia.org/ontology/currency> ?currency . ?b <http://dbpedia.org/property/currencyCode> ?code FILTER(regex(?c, "Spanish")) } '; $r = '<table>'; if ($rows = $store->query($q, 'rows')) { foreach ($rows as $row) { $r .= '<tr><td>' . $row['name'] . '</td><td>' . $row['currency'] . '</td><td>' . $row['code'] . '</td></tr>'; } } $r.='</table>'; echo $r ? $r : 'nic nie znaleziono';
Otrzymany wynik wyglądał tak:
| Peru | [[Peruvian nuevo sol|Nuevo Sol]] | PEN |
| Costa Rica | [[Costa Rican colón]] | CRC |
| Easter Island | [[Chilean Peso|Peso]] | CLP |
| Chile | [[Chilean peso|Peso]] | CLP |
| Juan Fernández Islands | [[Chilean peso|Peso]] | CLP |
| Cuba | 4217 | CUC |
| Dominican Republic | [[Dominican peso|Peso]] | DOP |
| Honduras | [[Honduran lempira|Lempira]] | HNL |
| Western Sahara | [[Moroccan Dirham|Moroccan]] [[dirham]] | MAD |
| Nicaragua | [[Nicaraguan córdoba|Córdoba]] | NIO |
| Venezuela | 4 | VEF |
| Equatorial Guinea | [[Central African CFA franc]] | XAF |
| Spain | [[Euro]] ([[Euro sign|€]]) | EUR |
| Puerto Rico | [[United States dollar]] | USD |
| Ecuador | [[United States dollar|U.S. dollar]] | USD |
| El Salvador | [[United States dollar|U.S. dollar]] | USD |
| Argentina | [[Argentine peso|Peso]] | ARS |
| Colombia | [[Colombian peso|Peso]] | COP |
| Bolivia | [[Bolivian boliviano|Boliviano]] | BOB |
| Uruguay | 4217 | UYU |
Drugim przykładem zastosowania tego narzędzia jest odczytywanie semantycznych znaczników ze stron www. ARC umożliwia odpytywanie pobranych danych po wcześniejszym „zamontowaniu” ich w lokalnej bazie danych użytkownika. Cały proces polega na zapisie tychże danych do specjalnie oznakowanych tabel (przez dodanie prefiksu). Pisząc zapytania SPARQL ARC przekształca je na zapytania odpowiednie dla relacyjncyh baz danych np. MySQL.
Prosta strona www z paroma semantycznymi znacznikami (DC i FOAF) mogłaby wyglądać tak:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="XHTML+RDFa 1.0" xml:lang="en"> <head> <title></title> <meta property="dc:creator" content="admin" /> </head> <body> <p>Mój nick to <span property="foaf:nick">testowy_nick44</span><br /> Mój ulubiony gatunek filmu to <span property="foaf:interest">Sci-Fi</span><br /> Mój blog znajdziesz ppd adresem <span property="foaf:homepage">semantictechnology.eu</span> </p> </body> </html>
Skrypt w PHP odczytujący nick, stronę domową oraz zainteresowania wszystkich osób opisanych znacznikiem foaf z wykorzystaniem klas ARC mógłby wyglądać tak:
$config = array( 'db_name' => 'arc', 'db_user' => 'root', 'db_pwd' => 'password', 'store_name' => 'arc_tables', 'max_errors' => 100, ); $store = ARC2::getStore($config); if (!$store->isSetUp()) { $store->setUp(); } $store->query('LOAD <http://www.przykladowaatrona.pl/semantycznapodstrona.html>'); $q = ' PREFIX foaf: <http://xmlns.com/foaf/0.1/> . SELECT ?nick ?interest ?homepage WHERE { ?p foaf:homepage ?homepage ; foaf:nick ?nick ; foaf:interest ?interest } '; $r = ''; if ($rows = $store->query($q, 'rows')) { foreach ($rows as $row) { $r .= '<li>' . $row['nick'] . '- '.$row['homepage'].' - '.$row['interest'].'</li>'; } } echo $r ? '<ul>' . $r . '</ul>' : 'nic nie znaleziono';
Otrzymany wynik:
- testowy_nick44- semantictechnology.eu – Sci-Fi
Przyglądając się stworzonym przez ARC tabelom w bazie danych widzimy, że jest ich 6. Opisane są w nich trójki s-p-o:
To tylko niektóre z oferowanych możliwości klas ARC. Więcej można znaleźć w dokumentacji.
