RDF Это просто

    image
    В этой заметке я попытаюсь объяснить на пальцах ключевые моменты и обосновать преимущества модели RDF.
    Более 10 лет концепция Semantic Web, частью который является RDF развивалась, была предметом споров и обсуждений, и сегодня ее все активнее поддерживает сообщество в своих приложениях.

    Однако для многих все еще совсем не понятно:

    • Зачем все это?
    • Как с этим работать?
    • Что это даст именно мне?




    Большинство, хотя бы мельком, видели знаменитый пирог:



    Тут много спецификаций, технологий, концепций — аж глаза разбегаются… Нижний уровень стар как мир, над верхним уровнем бьются академики, пытаясь найти простое и универсальное решение, чтобы научить приложения оценивать, на сколько, можно верить располагаемым утверждениям, полученным из сети. Рядовым разработчикам можно пока не беспокоиться об этом и подождать еще лет 5. Ребята из w3c не покладая рук шлифуют стандарты чуть выше середины, некоторые уже отшлифовав, такие как RDF и для них уже понаписано куча инструментов для всех основных платформ и языков чтобы можно было сразу идти и использовать. Именно с ними все чаще приходится сталкиваться в реальных приложениях, в первую очередь именно с RDF моделью.
    Очень хорошо бы еще понимать, зачем нужны, что дают, и как работать с онтологиями – но об этом не в этот раз.

    Итак, попробуем разобраться, что мы получаем от использования модели:
    • Логический вывод новых фактов
    • Обеспечения семантического поиска
    • Гибкость модели данных
    • Экстремальная легкость обмена данными между системами


    Если вы никогда раньше не изучали формальную логику, то пока отложите в памяти, что имея формально описанные факты можно автоматически получить ряд новых фактов, явно не определенных… эта тема заслуживает отдельного внимания, пока ее не трогаем.

    Семантический поиск, зачем, ведь есть гугл?
    Да можно ввести «список пользователей хабра» и вы получете что угодно только не то набор пользователей. Почему? — потому что гугл будет искать нахождение слова из запроса в тексте документов, и возвращать документы а не факты.
    А если бы он понял что нам нужны объекты «пользователь» ресурса «хабр», а формальные описания этих объектов были бы доступны для индексирования в модели RDF (например в форме записи RDFa на странице, чтобы поисковая машина могла бы их проиндексировать) был бы получен набор объектов которые мы искали.
    Многие возражают – «я могу походить по паре ссылок, сделать еще пару уточняющих запросов и найти все же что нужно, зачем все это?» – ответ – затем что мы не используем бумажные картотеки сегодня, а предпочитаем вбить в строку поиска пару ключевых слов, и само сабой разумеется сразу же получить информацию. На работу мы почему-то ездим на машинах, а на лошадях – потому что это удобнее.

    На вопрос – «Как RDF обеспечивает семантический поиск?» — ответ: RDF модель обеспечивает формальные описания. А там где есть формальные описания поисковый агент может искать факты и знания.

    Гугл сегодня такое не ищет – зачем мне надо сейчас париться об этом? В первую очередь для получения преимуществ описанных дальше, а во вторых чтобы не «опоздать» — индустрия у нас такая – «be quick or be dead».

    Поговорим более подробно о двух других преимуществах, они гораздо проще для понимания, как мне кажется. Но для начала проясним еще пару моментов.

    Что такое модель RDF?

    Сразу нужно понять RDF – это модель, абстрактная, очень простая, немного в вакууме. Просто направленный граф с несколькими дополнениями и оговорками. А вот записать его можно по разному, обычно выбор падает на один из вариантов: N3,N-Triples, Turtle,RDF/XML,RDFa и используемую спецификацию придется изучить.

    Что описывается: С помощью RDF можно описать как документы, отдельные фрагменты знаний внутри документа, так и объекты реального мира, например конкретного живого человека (тут некоторые it-шники впадают в ступор).
    Идентифицируется все с помощью URI. Притом URI хоть и похож на обычные URL ссылки – немного другое, например можно определить ресурс – реального человека и задать для него URI «http://example.org/people#Вася Пупкин».
    Да, можно писать по русски так как юникод а вот что нужно понимать, так то, что это не url – нельзя вставить в браузер и получить человека — наука до этого еще не дошла.

    Попробуем разобраться где-же здесь гибкость модели и обмена данными между системами.

    Давайте посмотрим как общаются люди:

    Они записывают свои мысли(формализуют) с помощью некого языка множеством способов, письменно, устно, дальше информация крутится через разные системы, передается из уст в уста, хранится, агрегируется и т.д. Но в конечном итоге ее читает человек который может интерпретировать этот язык и получает мысль. Как именно формализованная мысль передается от одного узла к другому в описанной цепочке никого не по большому счету в итоге не волнует.

    Если вы не знаете китайского языка – это вам не помешает сделать ctrl-c ctrl-v из одного места в другое.

    Очень похожим образом работает RDF.

    Информацию нужно интерпретировать только при ее формализации приложения в RDF и чтении ее агентом на другом конце. Между этими двумя этапами ее может обрабатывать кто угодно, как угодно ею обмениваться, не обязательно представляя какой смысл заложен, или понимая смысл, только часть утверждений.

    Например, RDF утверждение (триплет субъект-предикат-объект)

    <www.example.org/index.html> <www.example.org/terms/creation-date> «August 16, 1999».

    Для понимания можно перефразировать

    www.example.org/index.html имеет свойство www.example.org/terms/creation-date значение которого August 16, 1999"

    т.е. если я пишу приложение, я должен в логике приложения описать, как интерпретировать www.example.org/terms/creation-date. Сразу вопрос внимательного читателя – ведь тогда же каждый насоздает предикатов обозначающих одно и мне придется для каждого приложения с которым я хочу интегрироваться добавлять синонимы в логику приложения?
    Ответ – НЕТ!.. Во первых рекомендуется и на каждом углу пропагандируется использовать где только возможно общепризнанные словари, для большинства задач которые уже разработаны и активно используются, а во вторых, опираясь на онтологии, можно задавать такие утверждения, как owl:SameAs которые устанавливают связи между двумя сущностями и можно логически вывести нужный синоним, а приложение переписывать не придется. Для таких целей можно использовать внешний сервис.

    Таким образом мы можем обмениваться с кем угодно, не делая лишних телодвижений, в том числе мы интегрироваться с n+1 системой делая больше усилий не больше чем мы для показа нашего веб-сайта n+1 пользователю! Не надо программировать ничего для этого. Все понятия которые нужны будут этой системе от вашей — она сможет получить и интерпретировать.

    Для сравнения сегодня – надо поля одной системы явно связывать с другой (часто с каждой) с помощью XML, XSLT – или полями, получаемыми из API – и многие из нас знают какая, это головная боль.

    Мы подошли к пониманию, что данные могут быть независимы от модели любого конкретного приложения. Т.е. набор фактов живет сам по себе. Мы можем их добавлять, удалять, делать к ним запросы, интерпретировать – но они логически независимы.

    Этот факт несет следующее важное преимущество – легкость в изменении модели.

    Представим, что потребуется сделать в приложении, которое опирается на реляционную модель. Для драматичности представим что делать это надо уже после запуска если требуется изменить модель данных, например, связать с объектом пользователя некую новую сущность, скажем адрес (который к слову, не одна строчка, а содержит отдельные поля для дома, города, улицы и т.д.). Что потребуется сделать с базой данных? Правильно подправить пару табличек, может быть создать новые, добавить связь между ними, изменить процедурки для доступа к данным, подправить веб сервис и все готово. Ну и конечно надо изменить пользовательский интерфейс.

    Немного некомфортно этим заниматься, не кажется?

    А на сколько проще было бы, если все, что надо было сделать – это только добавить пару полей в интерфейс и выполнить действие добавления одного нового утверждения для каждого нового поля (от этого минимума тоже можно иногда уйти, если у нас более универсально спроектирован интерфейс)? пара строчек кода…
    С RDF моделью за спиной эта операция будет выглядеть именно так. Ведь все что хранится — это огромное число утверждений субъект-предикат-объект. Таким образом изменение модели данных перестает быть тем, что портит настроение как только об этом подумаешь, не правда ли здорово?

    Средняя зарплата в IT

    120 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 7 283 анкет, за 1-ое пол. 2021 года Узнать свою зарплату
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 16

      0
      Вот, мне всегда было интересно почему используются URI? Как-то странно давать идентификатор вида httр://example.org/people#Вася Пупкин но при этом это не URL.
      Почему тогда не просто как-то оформить в
      Namespace: Example
      Category: People
      Name: Вася Пупкин
      ?
        –1
        Из названия URI — он должен быть универсальным, ваше предложение не достаточно универсально.
        URL — это подкласс URI к слову.
        +5
        За фотку барышни спасибо — весьма стимулирует настроение.
          +2
          Похоже карточка вызвала интерес больше чем текст((
            0
            Да, это вы перестарались, выбирая обложку для новости. Но я этому только рад (:
            –1
            и не только настроение…
            +1
            Спасибо, я в курсе, что URL подкласс к URI :)
            Но почему тогда не rdf://example.org/people#Вася Пупкин?
            В вышеуказанном URI по сути содержатся те же 3 компонента, кто мешает написать их так
            {Example.org, People, Вася Пупкин}
            т.е.
            {Namespace, Category, Name}, где Namespace должен быть уникальным.
            Или подразумевается что для того что бы создать свой RDF идентификатор, мне необходимо зарегистрировать свой домен и тем самым обеспечить уникальность?
              0
              Извиняюсь, не туда, это ответ на этот комментарий
                0
                Вы хотите поспорить почему мировое сообщество использует URI как уникальный идентификатор — это не ко мне вопрос.

                Я считаю URI — хорошим решением, так как оно понятным образом решает впопрос.

                Еще раз — нет никакой прямой связи с URL — наличие домена вообще ни как не связанно с идентификацией ресурса — посмотрите спецификацию.
                  +1
                  Нет, я вообще спорить не собирался. Мне просто интересно, вот я и спросил.
                  Спецификацию я читал, правда достаточно давно, там вроде так и не объясняют почему в URI они используют схему http.
                  Ведь URI может иметь совсем другой вид, но у них в примерах именно так. Мне кажется, что сходство с обычными URL только добавляет путаницы, в и без того запутанные примеры. По крайней мере у меня было так.
                    0
                    Uri можно представить короче.

                    Задаем префикс или основной base URL и дальше можно просто писать что-то вроде ex: Вася Пупкин по всему документу или в SPARQL запросе. Просто сокращения — не относятся к спецификации URI — они онтосятся к спецификациям формата где этот URI может использоваться.
              • НЛО прилетело и опубликовало эту надпись здесь
                • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  Вопрос у меня
                  Я пытаюсь смастерить онтологию для описания кактегорий товаров в веб магазине.
                  так вот, категории товаров идут как субклассы друг друга
                  Category_2_1 rdfs:subClassOf Category_2
                  а вот как мне корректно описать чтоу товаров в такой-то категории должны быть такие-то аттрибуты
                  например у товара в категории Обувь должны быть параметры Brand, Size, forSeason
                  а поотм еще и указать типа данных
                  например что Brad и forSeason- это литерал, а Size- число?
                  как это корректно изложить с помощью rdfs?
                    0
                    Кстати, с момента написания поста прошло больше пяти лет. Как человек вне темы, но интересующийся, могу сказать, что распространённым стандартом семантический веб пока не стал…
                      0
                      Прошло 10 лет.
                      Он внедряется, но сильно неспешео)

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

                    Самое читаемое