FOAF for dummies

    Вам довелось узнать что такое 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“ и я постараюсь написать.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 9

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

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

              Only users with full accounts can post comments. Log in, please.