Semantic web, social media – SemantycznyWeb

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.

:, , , , ,

Zostaw komentarz

Spam protection by WP Captcha-Free




Szukasz czegoś?

Użyj formularza:

Jeśli nadal nie możesz nic znaleźć, napisz do mnie!

Polecane strony