Pull to refresh

FOAF for dummies

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

Начнем?


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

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

Имя: Николай Коробко
Почта: admin@futuri.us
Домашняя страница: futuri.us
Ник: Nicholass
Фотография: img-fotki.yandex.ru/get/9/w88lf.8/0_9266_a7b0b5d8_L.jpg
Интересы:
  1. Веб 3.0
  2. Семнтическая сеть

Знакомства:
  • Имя: Миша Квакин
    Домашняя страница: design-freak.com
    Интересы:
    1. Дизайн
    2. Юзабилити

  • Имя: Роман Рыбальченко
    Почта: **************
    Ник: Cooluck
    Домашняя страница: blog.cooluck.kiev.ua
    Интересы:
    1. SEO
    2. SMO


Это далек но не полный список, конечно, но для понятливости хватит.
Помните N3? давайте попробуем применить?
@prefix <xmlns.com/foaf/0.1/>
Николай Коробко A :person
Николай Коробко :hasMail <admin@futuri.us>
Николай Коробко :hasHomepage <futuri.us>
Николай Коробко :hasNik «Nicholass»
Николай Коробко «hasPhoto <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“ и я постараюсь написать.
Tags:
Hubs:
+21
Comments9

Articles