Высшая школа ИТИС КФУ
Компания
25,41
рейтинг
25 мая 2015 в 16:19

Разработка → Технологии Semantic Web tutorial

Semantic Web (он же Web of Data, Linked Data, Linking Open Data) — это направление развития Всемирной паутины, позволяющее машинам не только отображать информацию в интернете, но и понимать ее смысл.



Несколько лет назад Semantic Web вырвался за пределы исследовательских лабораторий и стал достоянием широкого круга разработчиков. К сожалению, в русскоязычном сообществе SW распространен пока слабо. Мало русскоязычных наборов данных. Мало приложений, которые с ними работают.

Одна из причин — отсутствие на русском языке полноценного открытого обучающего материала. Есть хорошие узкоспециализированные статьи. Есть хорошие обзоры. Но нет систематического обучающего курса.

Мы с коллегами из ИТИС КФУ при поддержке Computer Science клуба и сообщества SWUG решили сделать такой курс, который я хочу представить хабралюдям. Он состоит из шести частей:

  1. Введение в семантику и Semantic Web;
  2. Формат представления данных RDF;
  3. Формальные онтологии;
  4. Язык описания онтологий OWL;
  5. Язык запросов SPARQL;
  6. Semantic Web в дикой природе: популярные ресурсы, онтологии и сервисы.

Я решил оформить курс не в виде сплошного текста, а виде слайдов с примерами и картинками. Надеюсь, его будет интереснее читать, чем традиционные учебники. (См. ответ на замечание ivanych относительно выбора формата).

Смотрите первые две части под катом.

Часть I. Введение в семантику и Semantic Web
Показать оглавление
  1. Мотивация Semantic Web: семантический поиск, интеграция данных, логический вывод, интеллектуальные агенты;
  2. Введение в семантику: язык, знак, семантика, денотат, концепт, формальная, явная и неявная семантика, метаязык;
  3. Семантика во Всемирной паутине и в Semantic Web;
  4. Технологии Semantic Web: RDF, OWL, SPARQL.

Скачать в PDF.

Часть II. Формат представления данных RDF
Показать оглавление
  1. Ресурс;
  2. URI;
  3. Триплет;
  4. RDF-граф;
  5. Облако Linked Data;
  6. Ресурс, задаваемый по URI;
  7. Анонимный ресурс (blank node);
  8. Литерал;
  9. RDF-классы;
  10. Реификация;
  11. Контейнеры и списки;
  12. Форматы сериализации RDF: RDF/XML, N-Triples, Turtle, Microdata.

Скачать в PDF.

Буду рад ответить на любые вопросы.

Подпишитесь на наш блог на «Хабре», чтобы не пропустить следующие части курса.
Хочу поблагодарить Сергея shcherbak Щербака (КрНУ), Павла klextor Клинова (Universität Ulm) и Наталью Кеберле (ЗНУ) из сообщества SWUG за ценные замечания, а также коллег из ИТИС и ребят из Computer Science клуба за поддержку.
Курс доступен по свободной лицензии Creative Commons Attribution-ShareAlike.
Автор: @Alik_Kirillovich
Высшая школа ИТИС КФУ
рейтинг 25,41
Компания прекратила активность на сайте

Комментарии (44)

  • +1
    Спасибо большое, Алик!

    Было бы здорово портировать этот курс на платформу SlideWiki: slidewiki.org
    Тем более, что эта платформа использует Linked Data (вот здесь можно узнать об этом больше: slidewiki.org/documentation/#tree-618-slide-17295-2-view).
    • +1
      Спасибо за идею! Про SlideWiki я, конечно, знаю. Особенно приятно, что ее ведущий разработчик — наш человек, Дарья Тарасова. Но сделать курс на SlideWiki, я, действительно, не догадался. Попробую перенести его туда. Единственная проблема, «Хабр» поддерживает слайды только со SlideShare.
  • +1
    Алик, отлично! Интересно, будут ли в курсе раскрыты следующие практические темы:

    • Крупнейшие базы знаний типа Google Knowledge Graph (Freebase), Microsoft Satori, Facebook Open Graph, WikiData — их структура и примеры использования
    • Применение технологий Semantic Web для Search Engine Optimization (SEO).

  • +2
    Почему слайды-то? Это же профанация. Нужно внятное последовательное изложение — текст, а не картинки.
    • 0
      Михаил, спасибо за замечание. Действительно, я выбрал несколько необычный формат, поэтому нужно было более подробно пояснить его выбор.

      Слайды сами по себе никак не связаны с последовательностью изложения — вопрос в том, что на них содержится. Традиционно, слайды используют как дополнительный материал к устному выступлению докладчика. Разумеется, такие слайды в отрыве от устной речи связанного изложения не содержат. Но слайды из данного курса полностью самостоятельны. Они уже содержат последовательное изложение без всякого докладчика.

      Если какие-то конкретные моменты кажутся непонятными — скажите, буду рад их доработать.
      • +2
        Извиняюсь, был напуган. В файлах PDF нормальный текст, не картинки.
  • +2
    Очень хотелось бы, услышать о том, что реально нового-хорошего достигнуто в SW за последний год-два.

    В своё время очень интересовался SW как пользователь, но, насколько я смог в итоге рассудить, SW «завис» на сценарии использования «Пролог с функцией позднего связывания для использования в университетах и в специализированных базах знаний». Т.к. в SW так и не появилось элементов, присущих той степени децентрализованности, которая присуща реальному миру, где информация у различных поставщиков может быть противоречива и неполна. ( К примеру, когда я интересовался, в SW не было стандартной возможности выразить отрицание факта ). Соответственно, очень хотелось бы узнать, что было сделано «Web-ного» в SW за последнее время.
    • +2
      Вы не поверите, но вы во всю пользуетесь Semantic Web: во-первых, это разметка schema.org, которая распознается всеми ведущими поисковиками. А также Google Knowledge Graph: виджет справа на странице поисковых результатов не что иное как реализация entity search over Web of Data. Просто в последнее время, особенно в индустрии, сделан ребрендинг этой темы на более практичные сценарии под маркой Web of Data. Google, который многое сделал для извлечения надежных фактов полуавтоматическими методами, анонсировал вложить Freebase в WikiData.

      Если говорить про ядровой SW, то мощно развивается RDF triple store Stardog, которая имеет хорошие возможности логического вывода и становится по сути уже отраслевым стандартом. Основное применение эти возможности находят в domain-specific applications типа медицинского IT.
      • +1
        Наконец, в смысле исследований отдельное интересное направление сейчас — это Machine Learning with Knowledge Graphs. Это попытка снизить выразительность логического вывода в угоду масштабируемости (основная проблема при reasoning) тоже находит свои практичные применения. Кому интересно, могу описать это здесь в блоге на русском языке.
        • 0
          Пиши, конечно. ML уже появился у нас в roadmap на Stardog 4+. Правда не в топе приоритетов пока.
        • +2
          Единственное что, ML (на knowledge graphs или на других данных) — это не попытка выиграть масштабируемость за счет выразительности. Для этого есть специальные «легковесные» подмножества OWL, т.н. profiles (OWL EL, OWL QL, OWL RL). Они имеют полиномиальную сложность и отлично масштабируются для своих задач (например, data complexity для запросов в OWL QL аналогична SQL). Выразительности там немного.

          ML интересен потому что сами основы вывода другие. Логика становится индуктивной т.е. из больших наборов данных выводятся некие знания, например, предсказания как в докладе в твоем блоге, которые дедуктивно, как в стандартных логиках, оттуда никак не следуют, какая бы масштабируемость ни была.

          PS. Только не путать индуктивную логику с мат. индукцией. Смысл термина «индукция» у них абсолютно разный.
          • 0
            Да, согласен. Просто для краткости завернул в основную проблему DL reasoners и мотивацию применения ML (об этом те же авторы RESCAL пишут). Но так — да, link prediction & knowledge discovery.

            По поводу ML в Stardog — очень интересно, good to know! Вы в Stardog — молодцы, конечно, что следите за трендами. Проблема Virtuoso в том, что они как-то остановились на каком-то этапе развития. Ну и хаос в их документации, конечно…
      • 0
        Это ведь не ответ на заданный вопрос. Понятно, что что-то где-то работает, но идея графовых СУБД кажется достойна куда большего. Нужны совсем другие темпы развития (SW-энтузиасты вообще согласны с этим?). Так что, ниже по ветке вынужден повторить вопрос.

        зы. Полностью согласен про необходимость «стандартной возможности выразить отрицание факта».
        • +1
          Хм, вы странно формулируете. Я не знаю, кто с чем согласен, но убежден, что SW community — это все мы. Хотите, что бы область быстрее развивалась — участвуйте, предлагайте, создавайте. Голой критикой делу не поможешь.
          • 0
            Если честно, то вопрос вызван тупо информационным голодом по поводу происходящего с SW. Реально интересно, что успели доделать, каковы тренды. Кстати, есть у русскоязычного сообщества SW какие-то сайты, форумы, новостные ленты?

            Сам то я давно уже пилю некий аналог RDF.
            Там:
            — не будет идеи дополнительного слоя над интернетом: предполагается создание централизованного ресурса-базы
            — не будет возможность в одном файле фиксировать структуры из многих триплов: один трипл = один файл/id + индексация
            — не будет blank_nodes
            — предикатом может быть литерал
            — списки будут устроены много проще и их идентификаторы могут напрямую быть указаны в роли object.
            — триплы можно будет активировать и деактивировать (почти «возможность выразить отрицание факта»)
            — изменения будут прикрепляться к юзерам-авторам
            — весь синаксис будет самым простым
            — будет REST-API ввода/вывода триплов
            — будет оптимизация под новую бизнес-модель дающую semantic-кодерам коммерческие преимущества
            и т.д.

            Это все ответ на фундаментальные слабости RDF. Просто странно, что приходится этим заниматься. Обычно действующие стандарты закрывают все повседневные потребности.
  • +1
    Спасибо огромное за труд! Однако, я столкнулся с ограничениями OWL. И это ограничение пока не разрешили ни наши сотрудники, ни сторонние помощники. Терзает меня чувство, что OWL — промежуточный этап в понимании онтологического моделирования. Задача же была такая: как описывать группы объектов? например: половина объектов данной группы белого цвета. Или распределение по значениям параметра «высота» такое: и далее ссылка на распределение.
  • 0
    солнце воздух и вода — укрепляют организм. Моделирования этого тезиса в OWL сводится к трем тезисам. ОДнако, в реальности — это один тезис. Причина в том, что в OWL рассматриваются только триплеты. Но в реальности надо иметь возможность строить более сложные конструкции (тапплы). ИМХО.
    • +1
      Марк, спасибо за комментарии!

      Но в этом вот комментарии вы не совсем правы.

      1.
      Причина в том, что в OWL рассматриваются только триплеты. Но в реальности надо иметь возможность строить более сложные конструкции (тапплы).
      В OWL вообще нет понятия триплета, есть только аксиомы (триплет — это понятие RDF). А аксиомы могут связывать любое количество сущностей. Например аксиома о том, что класс «мать-одиночка» эквивалентен пересечению трех классов: класса «женщина», класса «не имеющий мужа» и класса «имеющий больше трех детей».

      2.
      солнце воздух и вода — укрепляют организм. Моделирования этого тезиса в OWL сводится к трем тезисам. Однако, в реальности — это один тезис.
      Не совсем понял, что вы имеете в виду.

      Если солнце, воздух и вода укрепляют организм по отдельности и независимо друг от друга, то это и нужно выразить с помощью трех отдельных аксиом. Если очень грубо, то что-то типа: 1. «солнце» относится к классу «укрепляющая субстанция», 2. «воздух» относится к классу «укрепляющая субстанция» и 3. «вода» относится к классу «укрепляющая субстанция».

      Если организм укрепляет смесь, то надо для этой смеси определить отдельную сущность. Эта сущность будет относиться к классу «укрепляющая субстанция» и находится в отношении часть-целое к «солнцу», «воздуху» и «воде» соответственно.

      В любом случае, не вижу никаких проблем с тем, чтобы это выразить на OWL.
      • +1
        Я могу еще раз повторить, что я снимаю шляпу перед Вашим трудом? Спасибо Вам за ответ. Действительно белое пятно в образовании, которое надо закрывать. Поэтому ошибки в терминах.

        В онтомоделировании можно описать многое, но кое-что все-таки мне не удается. Например, я хочу связать именно три сущности в одном предложении, а не разделять предложение на дублирующие части. Или формально я хочу рассматривать не только связи между двумя сущностями, но и связи между сущностями в количестве больше двух. В книге www.brunel.ac.uk/~cssrcsp/BusObj.pdf такие объекты названы тапплами.

        и мне бы хотелось моделировать свойства группы объектов. Например, я хочу сказать, что объекты данной группы имеют вот такое распределение по скоростям, например.
        • 0
          Возможно, мои вопросы вызваны плохим знанием стандарта.
          • +1
            Я могу еще раз повторить, что я снимаю шляпу перед Вашим трудом? Спасибо Вам за ответ. Действительно белое пятно в образовании, которое надо закрывать. Поэтому ошибки в терминах.
            Марк, еще раз спасибо за теплый отзыв. Постараюсь ответить по порядку в меру своих сил.

            Однако, я столкнулся с ограничениями OWL. И это ограничение пока не разрешили ни наши сотрудники, ни сторонние помощники. Терзает меня чувство, что OWL — промежуточный этап в понимании онтологического моделирования. Задача же была такая: как описывать группы объектов? например: половина объектов данной группы белого цвета. Или распределение по значениям параметра «высота» такое: и далее ссылка на распределение.

            1.
            OWL не предназначен для подобного рода утверждений. OWL описывает концептуальные модели, а не произвольные научные теории.

            Пример: OWL-онтология определяет, что мать-одиночка — это женщина без мужа с тремя и более детьми. А также, что ей причитается пособие. Но не определяет формулу для вычисления этого пособия.

            Для описания произвольных теорий существуют более выразительные формализмы, например Semantic Web Rule Language или просто логика первого порядка.

            «Ограниченность» OWL — это не баг, а фича. Благодаря своей «ограниченности» OWL обладает свойством разрешимости. Т.е. машина может автоматически осуществлять логический вывод.

            2.
            Тем не менее, условие «половина объектов данной группы — белого цвета» в OWL смоделировать можно.

            Я могу ошибиться в деталях, но идея примерно такая:

            1. Класс шаров разбивается на два непересекающихся подкласса: белые и небелые.
              EquivalentClasses(
                :Ball
                ObjectUnionOf( :WhiteBall :NonwhiteBall  )
                )

              DisjointClasses( :WhiteBall :NonwhiteBall )

            2. Каждый белый шар связан свойством r с одним черным шаром и наоборот.
              InverseFunctionalObjectProperty(:r)

              SubClassOf( 
                 :WhiteBall
                 ObjectExactCardinality( 1 :r :NonwhiteBall )
               )

              SubClassOf( 
                 :NonwhiteBall
                 ObjectExactCardinality( 1 :r :WhiteBall )
               )
              Отсюда видно, что если число шаров конечно, то количество белых, действительно, составляет ровно половину.

            3. Для того, чтобы это работало на практике, нужно определить класс шаров, явно перечислив его элементы. А также, указать, что все шары отличны друг от друга.
              EquivalentClasses(
                :Ball
                ObjectOneOf( :ball1 :ball2 :ball3 :ball4 :ball5 :ball6)
              )

              DifferentIndividuals( :ball1 :ball2 )
              DifferentIndividuals( :ball1 :ball3 )
              ...

              Без этого, грубо говоря, будет непонятно, сколько всего шаров, и от какого количества считать половину.

            Возможно, «распределение по скоростям» можно смоделировать похожим образом. Но еще раз повторю, даже если OWL справляется с решением этой задачи, предназначен он для решения других задач.
        • +1
          Во-первых, в OWL действительно можно выразить не все. Это тривиально следует из того, что OWL DL — подмножество логики первого порядка (более того — разрешимого фрагмента FOL). Соответственно, все что невыразимо в FOL, невыразимо и в OWL. Кроме того, есть известные конструкции, выразимые в FOL, но невыразимые в OWL, например, ограничения кардинальности на транзитивных свойствах.

          Во-вторых, не совсем справедливо утверждать что в OWL рассматриваются только триплеты (это так в RDF). Связь OWL и RDF несколько сложнее, чем обычно объясняется в курсах (я пока не читал как Алик ее объяснял). Обычно n-арные отношения выражаются через реификацию, т.е. промежуточные сущности для представления аксиом. Подробнее можно почитать здесь:

          Defining N-ary Relations on the Semantic Web
          • 0
            Спасибо! Но есть еще одна проблема, с которой я столкнулся — это переход от индивидуального учета объектов с их ID к коллективному учету объектов.То есть, сначала мы отличаем гвозди друг от друга, но потом — сваливаем их в кучу и не учитываем их индивидуально. Попытка построить сквозную модель для этого кейса у меня провалилась. Но, возможно, потому что я мало знаю. Тот пример, что привел автор статьи, в котором для подсчета количества белых объектов, мне надо завести их айдишники, меня не устраивает. Я хочу выразить знание о группе объектов без обращения к знаниям об объектах группы.
            • 0
              Условие «половина объектов данной группы — белого цвета» мы выразили (1) и (2), без всякого «обращения к знаниям об объектах группы». Аксиомы из этих пунктов говорят ровно то, что вам нужно: если шаров конечное число, то половина из них — белые.

              Другое дело, это знание обычно нам нужно не само по себе, а для того, чтобы автоматически выводить новые факты относительно конкретных объектов. Например, у нас есть информация о 20 шарах. Про шары №1-10 мы знаем, что они черные, про шары №11-19 мы знаем, что они белые, а цвет 20-го шара неизвестен. И если мы точно знаем что всего шаров — 20, то мы можем автоматически сделать вывод, что этот 20-й шар — белый. Но чтобы сделать этот вывод, мы должны быть уверены, что других шаров нет. Вот это знание о том, что шаров всего 20 мы и выразили в аксиомах из пункта (3).

              Если же выводить новые факты относительно конкретных объектов вам не нужно, то вам достаточно (1) и (2).
              • 0
                Задача такая: мы выпускаем шары. Каждый выпущенный шар — либо белый, либо черный. Мы на бумажке ведем счет черным и белым шарам. Все они валятся в общую кучу, где теряют номера (айдишники), и все признаки индивидуальности. Однако, какая-то информация все-таки осталась. Эта информация о группе шаров в куче. Мы вычислили, что белых шаров в куче в среднем в Пи (3,14..) раз больше, чем черных. Повторюсь, шары не нумерованы. Теперь я задаю вопрос: какова вероятность того, что вытащенный мной наугад шар из кучи будет белого цвета. Ответ на это мне даст информация о группе шаров, которую я хочу сохранить в модели и к чему-то привязать. Вопрос: к чему и как?
                • 0
                  Вы не очень аккуратно формулируете задачу. Во-первых, черных шаров не может быть в среднем больше, их просто больше или меньше во сколько-то раз. Во-вторых, белых шаров не может больше в Пи раз, т.к. Пи — иррациональное число. В-третьих, неверно использован термин «группа».

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

                  Если так, то отлично. В (1) и (2) я выразил это условие при n = 1 (белых шаров столько же сколько и черных, т.е. половина). Аналогичным образом можно выразить это условие и для других n.

                  P.S. Другое дело, что, как я говорил выше, онтологии не очень подходят для моделирования подобного рода условий. Это почти то же самое, что вычислять с помощью онтологии давление нефтяных пластов или подъемную силу самолета. Может быть теоретически это и возможно, но очень неудобно. У онтологий своя, специфическая область применения. И помимо онтологий есть множество других, более подходящих для той или иной задачи инструментов моделирования.
                  • 0
                    Я хочу выразить тот факт, что распределение случайной величины в группе объектов такое: и далее само распределение. Очень хочется найти тот объект, к которому можно и нужно приаттачить этот параметр. Я занимаюсь моделированием бизнес-процессов и там необходимо найти тот объект, у которого появится распределение времен выполнения операций. Этот объект — группа, класс, множество операций, но при этом операции не имеют никакой индивидуальности и даже не посчитаны. Я понимаю, что онтомодель такие задачи, возможно, не решает. Просто надо понять, что онтомодель не моделирует свойства группы, множества, класса. Но моделирует свойства и отношения между объектами.
                    • 0
                      Мне не всегда легко понять то, что вы имеете в виду. Но я снова попробую :-)

                      Возможно, вы хотите сделать утверждение не об отдельных элементах класса, а о самом классе. Хотите присвоить классу некоторый атрибут.

                      В OWL это сделать можно, но только в OWL-Full, где класс может рассматриваться и как собственно класс, и как индивидуал.

                      Пример:

                      #мяч1 относится к классу БелыйМяч (здесь БелыйМяч выступает в роли класса)
                      :ball1 rdf:type :WhiteBall.
                      
                      #Класс БелыйМяч имеет свойство «вероятность» со значением «0.5» (БелыйМяч выступает в роли индивидуала)
                      :WhiteBall :probability "0.5". 

                      Единственная проблема — OWL-Full является неразрешимым, т.е. в нем не будет гарантированно работать логический вывод. Но если вам он не требуется, то можете, как вариант, использовать OWL-Full.
                      • 0
                        Спасибо! Теперь вопрос: что такое индивидуал? Если я не замучил вопросами
                        • 0
                          Индивидуал — это объект.
                          • 0
                            Но группа объектов — не есть объект. Или я не понимаю… В теории множеств есть элементы и классы. Это объекты разной природы. Или, в OWL попытка создать свойство для класса приводит к тому, что его надо связать с объектом, к которому уже можно будет привязать свойство? Или один и тот же объект будет одновременно с одной точки зрения считаться классом, а с другой — объектом?
                            • +1
                              Семантика OWL DL целиком выражается в наивной теории множеств, где есть множества, отношения и элементы. Т.е. individual интерпретируется как элемент. Класс — как множество. Свойство — как бинарное отношение.

                              Есть тонкость под названием punning: когда один и тот же IRI используется и для класса и для элемента. Но это чисто синтаксическая фича.
                              • 0
                                Ага, спасибо! Но получается, что указать свойство класса объектов прямо и честно я не могу?
                                • +2
                                  Не сможете, т.к. это утверждение уже второго порядка, а не первого. Есть всякие трюки мета-моделирования, от примитивных (аннотации в OWL) до хитрых (Henkin semantics), но в стандарте этого нет.

                                  Можно выражать свойства всех объектов данного класса (тем самым определяя класс как множество объектов с определенными свойствами), но не свойство класса как такогого.

                                  Хорошо это описано в статье On the Properties of Metamodeling in OWL, см. пример с орлами и Красной Книгой в начале. В КК занесены именно орлы как сущность, а не каждый живущий в мире орел как объект.
                                  • 0
                                    СПАСИБО! Вы мне очень помогли!
            • +1
              Не получится. Единственный способ ограничить сверху количество элементов класса — это использовать номиналы (явное перечисление объектов класса), что заставит таки присвоить идентификаторы. По-другому никак не получится выразить конечность множества. Собственно без equality (а номиналы в OWL — это фактически equality в логике первого порядка + синтаксический сахар) в логике первого порядка нельзя выразить конечность интерпретации унарного предиката. Это следует, например, из теоремы Löwenheim–Skolem

              Если логический вывод не нужен, то можно в RDF использовать blank nodes для ваших шаров. Это фактически способ выразить факт о существовании объекта, не генерируя для него идентификатор. Но в любом случае считать вероятности придется с помощью каких-то своих методов, в стандартном стеке (RDF, RDFS, OWL) таких инструментов нет.
  • 0
    del
  • +1
    А может кто-нибудь рассказать о прогрессе внутри Semantic Web за последние 4 года??
    Дело в том, что некоторые члены профильного сообщества выражали недоумение по поводу запущенности ряда проблем. Вот здесь, например. Или здесь. Да и существенный раздел «Критика» в «официальной» статье про Semantic-web не уменьшается много лет.

    Все же, если технического прогресса мало, то может в этом проблема с «в русскоязычном сообществе SW распространен пока слабо»? Есть вероятность того, что местные прогеры слишком циничны для восприятия хороших идей с плохими реализациями. ;)
  • 0
    информацию можно сделать понятной не только людям, но и машинам

    Психическая функция субъекта (понимание) приписывается неживому объекту (вычислительной машине) — это ИМХО, перебор. (Тезис взят из вашего учебного материала).
    Знак соотносится с объектом благодаря наличию у знака концепта
    •Концепт(≈ понятие, десигнат, интенсионал, смысл) —это некоторый набор условий, которые должен удовлетворять объект или ситуация, чтобы соотноситься со знаком

    Знак соотносится с объектом в воображении субъекта, там же правила. У другого субъекта — другой знак и другие правила.
  • 0
    А можно пару слов о сравнении Stardog vs Neo4j vs AllegroGraph? Пользуетесь мармоттой, сезамом?
    • +1
      Можно. Stardog и AllegroGraph — это RDF СУБД. Neo4j — это графовая СУБД. Различия эти на уровне API постепенно стираются мульти графы и RDF (как модели данных) в общем-то отображаются друг в друга. Поэтому neo4j может хранить RDF и поддерживает SPARQL (по-моему для этого есть плагин), а Stardog скоро будет поддерживать TinkerPop API 3.0 для работы с произвольными property graphs (я как раз над этим сейчас работаю).

      Но надо понимать что несмотря на близость на уровне API физически хранилища все равно оптимизированы под немного разные задачи. RDF ближе к реляционной модели, просто менее жестко структурированной и легче модифицируемой, и SPARQL удобен как аналог SQL, т.е. для запросов по шаблону, которые возвращают часть RDF графа, соответствующую шаблону. Графовая модель и языки запросов лучше приспособлены для вычислений на графах, всяческих traversals, shortest paths, PageRank и тому подобного. Но поддержка TinkerPop'a скоро позволит эти вещи делать и над графами в Stardog (но храниться они все равно будут как RDF).

      Отличительная особенность Stardog'a — reasoning. О нем можно говорить долго.

      Stardog сделан на собственном движке хранения данных. Sesame поддерживается в клиентских API (т.е. можно работать с БД в Stardog как с репозиториями Sesame) + в качестве парсера RDF (т.н. Sesame Rio но эту часть мы перепишем как дойдут руки). Marmotta не используется.
  • 0
    Спасибо
  • 0
    Хотелось бы все части :( Руководство получилось отличное, есть ли аналог на английском?
  • 0
    Да, где бы посмотреть 3-6 части? )

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

Самое читаемое Разработка