Семантическая Сеть

индекс
94,74

FOAF for dummies

Вам довелось узнать что такое RDF.
Вам доводилось читать в моем блоге по каких-то страшных FOAF, SIOC, SKOS, DOAP...
Настало время узнать, что это такое, и зачем я рассказывал про RDF.

Начнем?

FOAF
Friend Of A Friend — онтология описания человека (грубо говоря), точнее личности. Короче, обычная анкета, которую вы заполняли на сайтах миллион раз. Содержит информацию об имени, дате рождения, работе, контактах, знакомствах.Он является отправной точкой в Социальном Графе. Давайте разберемся по-подробнее? Для большей понятливости, мы с вами его придумаем, заново, что б вы поняли всю логику и увидели, как тут все продумано и почему все так, а не эдак. К тому же это будет удобно людям, не читающим XML.

У нас есть человек (в данном случае я отдал себя на эксперимент, ради науки)
Итак, кто я?

Имя: Николай Коробко
Почта: admin@futuri.us
Домашняя страница: http://futuri.us
Ник: Nicholass
Фотография: http://img-fotki.yandex.ru/get/9/w88lf.8/0_9266_a7b0b5d8_L.jpg
Интересы:
  1. Веб 3.0
  2. Семнтическая сеть
Знакомства:
  • Имя: Миша Квакин Домашняя страница: http://design-freak.com Интересы:
    1. Дизайн
    2. Юзабилити
  • Имя: Роман Рыбальченко Почта: ************** Ник: Cooluck Домашняя страница: http://blog.cooluck.kiev.ua Интересы:
    1. SEO
    2. SMO
Это далек но не полный список, конечно, но для понятливости хватит.
Помните N3? давайте попробуем применить?
@prefix < http://xmlns.com/foaf/0.1/>
Николай Коробко A :person
Николай Коробко :hasMail <admin@futuri.us>
Николай Коробко :hasHomepage <http://futuri.us>
Николай Коробко :hasNik "Nicholass"
Николай Коробко "hasPhoto <http://img-fotki.yandex.ru/get/9/w88lf.8/0_9266_a7b0b5d8_L.jpg>
Николай Коробко :hasInterest "Веб 3.0"
Николай Коробко :hasInterest "Семнтическая сеть"
Николай Коробко :knows :people

(на самом деле эта схема не работает!)
По-хорошему далее я должен создать аналогичный список для моих знакомств. Но это немного сложновато, лучше читабельно для человека, но хуже - для машины. Для этих целей и был разработан FOAF.
Интерлюдия: Пространства имен Пространство имен (в XML) определение тегов, атрибутов и их расположения относительно друг друга в документе. Например возьмем HTML. Списки. В пространстве имен четко сказано, что <ul> может содержать одно или более <li>, а так ж другие элементы. Или в том же пространстве имен четко сказано, что <head> потомок <body> и что <head> не может содержать <img>.
Не дваваясь в подробности пространства имен, запишем информацию обо мне (пока только обо мне) в виде FOAF:
<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 rdf:about="#JW">
    <foaf:name>Коробко Николай</foaf:name>
    <foaf:mbox rdf:resource="mailto:admin@futuri.us" />
    <foaf:homepage rdf:resource="http://futuri.us/" />
    <foaf:nick>Niholass</foaf:nick>
    <foaf:depiction rdf:resource="http://img-fotki.yandex.ru/get/9/w88lf.8/0_9266_a7b0b5d8_L.jpg" />
Разберем построчно?
<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 rdf:about="#JW">
Тут как раз и происходит подключение тех самых пространств имен. xmlns это не что иное, как XML Name Space (Пространство Имен XML). Мы подключили RDF, FOAF и RDF-schema. RDF для того, что б создать документ RDF. FOAF понятно для чего :) RDF-schema это формат оформления RDF., поскольку FOAF это тоже RDF документ, машина должна проверить его оформление, согласно словарю RDF.
  <foaf:Person rdf:about="#JW">
Эта строчка указывает, что мы описываем человека. Она равносильна "Николай Коробко A :person". Это контейнер описания личности. "Почему он нужен, ведь мы используем FOAF, это и есть описание человека!?" гневно прокомментируете вы, но все впереди, все продумано. смотрите дальше.
  <foaf:name>Коробко Николай</foaf:name>
Кстати, забыл сказать, приставка в теге (foaf:) указывает из какого пространства имен мы его берем, потмоу что есть совпадения, к примеру в Дублинском Ядре (о нем позже) и в HTML есть элемент title.
тут кажется вся ясно. Имя: Николай Коробко.
    <foaf:mbox rdf:resource="mailto:admin@futuri.us" />
    <foaf:homepage rdf:resource="http://futuri.us/" />
    <foaf:nick>Niholass</foaf:nick>
    <foaf:depiction rdf:resource="http://img-fotki.yandex.ru/get/9/w88lf.8/0_9266_a7b0b5d8_L.jpg" />
Общую структуру поняли?

Вначале мы объявили foaf:Person, это в N3 у нас субъект, имя тега - будет предикатом, а содержание - объектом. На пример. foaf:Person foaf:name "Коробко Николай". rdf:resource используется что б передать в качестве объекта не строку, а URI.

Итак, теперь мы присвоили персоне имя, почту (для защиты от спама он иногда кодируется в sha1), домашнюю страничку, ник, и некое описание (foaf:depiction это поле может содержать любую информацию о вас, в данном случае это адрес фотографии).

Помните, что RDF у нас обладает вложенностью? То есть объектом может быть другая тройка значений. В XML это показывается просто вложением тегов.

Итак, создадим для персоны интересы, для этого используем тег foaf:interest и вкладываем в него мои интересы. Теперь тройки будут такие foaf:interest df:Description (rdf:about rdfs:label). То бишь уПерсоныЕстьинтересы :Интерес :(URI и описание интереса). Смотрим:
    <foaf:interest>
      <rdf:Description rdf:about="http://futuri.us" rdfs:label="Web 3.0" />
    </foaf:interest>
    <foaf:interest>
      <rdf:Description rdf:about="http://futuri.us" rdfs:label="Семантическая сеть" />
    </foaf:interest>
Примерно так. Такая же вложенность и со знакомствами, но тут мы вспомним, зачем мы объявляем foaf:Person. Ведь знакомы мы с людьми, то есть объект будет содержать вложенную персону. Еще один foaf:Person. Я думаю, многие догадались как это будет выглядеть:
     <foaf:knows>
     <foaf:Person>
       <foaf:name>Миша Квакин</foaf:name>
       <foaf:homepage rdf:resource="http://design-freak.com/" />
       <rdf:Description rdf:about="http://www.google.com.ua/search?q=design" rdfs:label="Дизайн" />
       <rdf:Description rdf:about="http://www.google.com.ua/search?q=Юзабилити" rdfs:label="Юзабилити" />
    </foaf:Person>
    <foaf:Person>
       <foaf:name>Роман Рыбальченко</foaf:name>
       <foaf:homepage rdf:resource="http://cooluck.kiev.ua" />
      <foaf:nick>Cooluck</foaf:nick>
       <rdf:Description rdf:about="http://www.google.com.ua/search?q=SEO" rdfs:label="SEO" />
    </foaf:Person>
   </foaf:knows>
Осталось собрать воедино весь документ.
<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 rdf:about="#JW">
    <foaf:name>Коробко Николай</foaf:name>
    <foaf:mbox rdf:resource="mailto:admin@futuri.us" />
    <foaf:homepage rdf:resource="http://futuri.us/" />
    <foaf:nick>Niholass</foaf:nick>
    <foaf:depiction rdf:resource="http://img-fotki.yandex.ru/get/9/w88lf.8/0_9266_a7b0b5d8_L.jpg" />
    <foaf:interest>
      <rdf:Description rdf:about="http://futuri.us" rdfs:label="Web 3.0" />
    </foaf:interest>
     <foaf:knows>
     <foaf:Person>
       <foaf:name>Миша Квакин</foaf:name>
       <foaf:homepage rdf:resource="http://design-freak.com/" />
       <rdf:Description rdf:about="http://www.google.com.ua/search?q=design" rdfs:label="Дизайн" />
    </foaf:Person>
    <foaf:Person>
       <foaf:name>Роман Рыбальченко</foaf:name>
       <foaf:homepage rdf:resource="http://cooluck.kiev.ua" />
       <rdf:Description rdf:about="http://www.google.com.ua/search?q=SEO" rdfs:label="SEO" />
    </foaf:Person>
   </foaf:knows>
  </foaf:Person>
</rdf:RDF>
Вуаля! теперь, я надеюсь, все поняли не только FOAF, но и логику составления RDF документов в формате XML. Д/З Попробуйте создать свой FOAF, а потом проверьте что получилось. Ниже в ссылках приведен foaf-a-matic, он вам в этом поможет. Материалы взяты с моего блога. Напишите, о чем вам еще будет интересно услышать в разделе "for dummies" и я постараюсь написать.
+21
31 декабря 2007, 03:42
26

комментарии (9)

+1
gryzzly #
спасибо. интересно.
+15
trak #
Спасибо, отличная статья. Но вот 31 декабря чет никак ни в кассу :)
попробую о ней вспомнить и перечитать 10 марта :)
+1
mahoro #
Не забыл? :)
0
trak #
Ты знаешь, я конечно забыл, но перечитав сейчас, я понял все, дело в том, что с онтологией мы на работе развлекаемся, так что все понятно, вообще-то говоря. :)
Единственно, мне кажется, в статье стоило-бы раскрасить синтаксис, так легче было-бы :)
+1
QoSyS #
Спасибо, действительно - статья позновательная.
Интересно еще узнать в каких прикладных задачах используется foaf.
А так, всех еще раз с наступающим )
0
Klaus #
Я планирую сначала рассказать о форматах, а потом - прикладные задачи обсудить. Что б база уже была у аудитории.
0
enej #
ты сначала приведи все же один супер-пупер пример как это добро можно использовать, а потом уже и рассказывай как это можно сделать. а то вот читаю твои статьи и не знаю зачем :-/
0
Miaucha #
Здравствуйте. Не могли бы дать живую ссылку (если такая есть) на вашу статью?

*Название прям про меня.
0
mahoro #
Жаль, что ваш домен и блог канули в лету. Как раз тогда, когда они так нужны…

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.