Pull to refresh

FOAF и пример

Reading time2 min
Views4.6K
FOAF (англ. Friend of a Friend) — проект по созданию модели агенто-читаемых домашних страниц и социальных сетей. Основатели Либби Миллером и Дэном Брикли. Основанием проекта является спецификация, которая определяет некоторые выражения, используемые в высказываниях (англ. statements) о ком-либо: например, имя, пол и другие характеристики. Это для тех кто не знает, что это такое, но на Хабре про это писали, но без практического примера.

Для примера работы с FOAF страничкой пользователя будем использовать LAMP. Для легкой работой с FOAF можно использовать библиотеку ARC, которая помогает очень быстро и легко манипулировать rdf данными и делать запросы sparql. Также эту библиотеку часто советуют автора книг по Семантическому Вебу за рубежом.

Например, создадим свою страничку для FOAF:

test.rdf
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<foaf:Person>
<foaf:name>Dima Kalinin</foaf:name>
<foaf:mbox rdf:resource="mailto:kal1sha.ua@gmail.com"/>
<foaf:homepage rdf:resource="http://twitter.com/kal1sha" />
<foaf:nick>kal1sha</foaf:nick>
<foaf:depiction rdf:resource="http://a1.twimg.com/profile_images/596994746/17752844_bigger.gif" />
<foaf:interest>
<rdf:Description rdf:about="http://habrahabr.ru/" rdfs:label="Habrahabr" />
</foaf:interest>
<foaf:knows>
<foaf:Person>
<foaf:name>Dima Kulish</foaf:name>
<foaf:name>Konstanit Gancov</foaf:name>
</foaf:Person>
</foaf:knows>
</foaf:Person>
</rdf:RDF>


Описание к ней думаю будет излишним, т.к. rdf является веткой xml и также не нужны большие знания английского языка, чтобы понять, что описали.

Вот пример, как вывести все имена в файле профиля:
test.php
<?php
include_once("./ARC2.php");

//конфигурация для БД
$config = array(
'db_name' => 'foaf',
'db_user' => 'root',
'db_pwd' => '1234',
'store_name' => 'arc_tests',
'max_errors' => 100,
);
//создаем базу и таблицы
$store = ARC2::getStore($config);
if (!$store->isSetUp()) {
$store->setUp();
}
//пример, как распарсить rdf файл
$parser = ARC2::getRDFParser();
$parser->parse('test.rdf');
$triples = $parser->getTriples();

//а вот пример, как распарсить и сохранить в mysql базе
$parser = ARC2::getRDFParser();
$parser->parse('./test.rdf');
//вот сам запрос
$store->query('LOAD <./test.rdf>');
$triples = $parser->getTriples();

//выводим все имена, которые встречаются
// в файлах профиля
$q = '
PREFIX foaf: <xmlns.com/foaf/0.1> .
SELECT ?person ?name WHERE {
?person a foaf:Person ; foaf:name ?name .
}
';
$r = '';
if ($rows = $store->query($q, 'rows')) {
foreach ($rows as $row) {
$r .= '' . $row['name'] . '';
}
}

echo $r ? '' : 'Не указал имена';
?>


Выводит на экран:
Dima Kalinin
Dima Kulish
Konstantin Gancov
Tags:
Hubs:
+4
Comments7

Articles

Change theme settings