1

Тема: Основы

Здравствуйте! Извините за столь глупый вопрос. С чего начать? С онтологиями никогда не сталкивался, буквально на днях меня поставили перед фактом - необходимо создать онтологию, и семантический поиск по ней (ну я так понимаю логический вывод).
Почитал про OWL, RDF, SPARQL, немного не понял чем принципиально отличаются RDF и OWL. Не могли бы вы подсказать что предпочтительней (OWL или RDF), если в будущем придется взаимодействовать с онтологией из .NET приложения?     

  • Ну и в целом, различия OWL/RDF?

  • Выборка из онтологий и логический вывод осуществляется исключительно средствами SPARQL?

  • В каком виде хранятся онтологии? Это только схемы или данные так же хранятся внутри?

Если не сложно, объясните доступным языком, так сказать в двух словах.
Заранее благодарен всем, кто откликнется.

Thumbs up Thumbs down

2

Re: Основы

Вопросы из серии, на которые на форуме уже отвечали
начните от сюда на 90% ваших вопросов ответы есть
http://semanticfuture.net/index.php/%D0 … %D1%8F:OWL

3

Re: Основы

RDF и OWL - языки разметки. Для онтологий есть RDF-S, OWL 1.0 DL, ... OWL 2.0 DL, ... При этом OWL основан на RDF. Дополнительно можно посмотреть русский перевод описания OWL тут: http://zajtcev.org/docs/w3c/ru/REC-owl2 … 91027.html

1. Различий OWL/RDF много, OWL выразительнее, гибче.
2. SPARQL, RDQL - языки запросов, логический вывод делают не языки, а "резонеры" (решатели). Которые можно писать самому. Если при выборе данных надо знать лишь кто предок/потомок, а также выяснить какие объекты связаны друг с другом одним единственным рефлексивным отношением, то запросто можно свой решатель написать. И чем проще язык представления данных, тем проще сделать свой решатель. Простой RDFS (RDF Shema) - самый простой язык представления данных (описания онтологий).
3. Есть много разных вариантов
3.1. Все данных хранятся в БД, а онтология делает семантическую увязку этих данных. Экземплярами классов онтоолгии являются строки/запросы/сущности из БД. Тут используется RDF-mapping.
3.2. Все данные - и классы и экземпляры классов хранятся в виде RDF-троек, без применения RDF-mapping на БД. Так рекомендует делать Iv_an_ru (см. "Авторские колонки" на этом сайте), если данных очень много. Так как при большом количестве данных RDF-mapping тормозит такие операции как добавление/изменение, а также усложняет поддержку коррктной работы. Но безусловно, поиск будет быстрее. И хранить все в онтологии проще/лучше, если она маленькая.
3.3. Даже если классы и экземпляры хранятся в онтологии, то такие объекты как картинки можно хранить в онтологии (соотвествующие типы есть в XML, имя файла хранить как строку, а тело файла как BASE64 строку, например, в формате data). А можно хранить отдельно - картинки в файловой системе и БД, а онтологии их семантическое описание.

Для себя не придумал такую задачу, где был бы нужен именно OWL, с его большими возможностями. Скромных возможностей RDFS хватит. Но если вдруг после длительного развития проекта выяснится, что нужно что-то большее. То перейти с RDFS на OWL 2 DL будет просто. Не скажу точно, есть ли тут обратная совместимость, но по внутреннему ощущению есть, всё что есть в RDFS есть и в OWL DL, но не наоборот.

Отредактировано tester (2011-12-06 22:39:32)

Thumbs up +2 Thumbs down

4

Re: Основы

tester пишет:

И чем проще язык представления данных, тем проще сделать свой решатель. Простой RDFS (RDF Shema) - самый простой язык представления данных (описания онтологий).

Ага. Но при этом логический вывод в RDFS - NP-полная задача. А в OWL 2 EL - полиномиальная. Так шта...

5

Re: Основы

Спасибо за ответы. Я так понимаю если в будущем предстоит взаимодействовать с приложением на .NET, лучше копать в сторону RDFS?

Thumbs up Thumbs down

6

Re: Основы

не понят вопрос, не вижу связи между RDFS и .NET

7

Re: Основы

Верно. Я смешал понятие синтаксиса (OWL DL), и профили (OWL 2 EL, OWL 2 QL, OWL 2 RL). В голове каша, спасибо, PavelK.

Для .NET не много готовых проектов (счас пишу свой велосипед). Но на Java есть Jena, Sesame и OWL API, а в качестве резонера есть Pellet (он тоже на Java, для OWL).

Так что, если речь о .NET, то загружайте в .NET модели на Java, а в качестве переходника использовать можно IKVM.NET http://sourceforge.net/apps/mediawiki/i … =Main_Page. IKVM.NET хорошо работает, во всяком случае, индексатор Sphinx в проекте на VB.NET успешно трудится, и его родная реализация на Java (стандартный API написан на Java), обёрнутая в IKVM работает лучше, чем реализация для .NET (http://code.google.com/p/sphinx-dotnet-client/).

А также есть J#, который транстирует Java в .NET (но тут нужны исходники, а они есть не для всего, и куча времени, так как сразу не заработает, не факт).

Кроме того, и можно же грузить простые библиотеки в .NET (http://archive.msdn.microsoft.com/DynamicDllLoading), а значит всё что есть в проекте Redland (librdf.og) можно будет использовать в .NET проекте.

Или см. http://www.semantictools.ru/tools/12---sw.html#4.6 - путь .NET реализации.
Drive - RDF парсер написанный на C# и платформе .NET http://sourceforge.net/projects/drive-rdf

SemWeb - RDF библиотека на C# с поддержкой RDBMS хранилища, чтения/записи XML и N3, SPARQL, и механизма логического вывода RDFS. http://razor.occams.info/code/semweb/

OwlDotNetApi - OWL (Web Ontology Language) API и парсер написанный целиком на C# для .NET платформы. Библиотека разработана на базе RDF парсера Drive и полностью удовлетворяет спецификации W3C OWL. OwlDotNetApi может быть использована с любым .NET языком. http://users.skynet.be/bpellens/OwlDotNetApi/index.html

(то есть 2 для RDF, 1 для OWL).

А для логического вывода можно использовать http://eulersharp.sourceforge.net/ (и для RDF и для OWL).

На сайте Microsoft Research нет ничего для OWL/RDF, у них есть подвижки в семантике, делают кое-что для Sharepoint, но пользоваться этим так трудно. Предполагается, что есть ряд пользователей и админов разных уровней, кто-то что-то делает (расставляет теги, пользуется ими), кто-то что-то согласовывает, кто-то назначает права на элементы помеченные разными тегами (аттрибутивное назначение прав). Чтобы сделать небольшую семантичекую разметку в Sharepoint надо её заранее придумать, всё обмозовать, а потом осторожно прикрутить всё (при этом лучше быть админом узла, так как придётся много чего создавать).

Ещё раз про свою точку зрения. Я пока за производство велосипедов (пусть заточенных под конкретную задачу, но зато своих). Существующие проекты активно не тестировал. Какой из них лучше не знаю точно. Понаступаю на свои грабли, пойму где они, может потом всё брошу и использую переходник к Java или SemWeb.

Thumbs up +1 Thumbs down

8

Re: Основы

Забыл про Virtuoso (Virtuoso Open Source), как же без него. На .NET можно сделать клиента к онтологии хранящейся в Virtuoso, см. http://virtuoso.openlinksw.com/dataspac … n/VOSRDFWP

А также, очень полезно посетить:

Отредактировано tester (2011-12-07 23:38:38)

Thumbs up +1 Thumbs down

9

Re: Основы

Для .NET могу еще предложить глянуть на dotNetRDF. Он по крайней мере активно развивается (хотя основного разработчика (Роба Вессе) только что переманил к себе Cray, поэтому неизвестно как будет дальше).

10

Re: Основы

tester пишет:

Верно. Я смешал понятие синтаксиса (OWL DL), и профили (OWL 2 EL, OWL 2 QL, OWL 2 RL). В голове каша, спасибо, PavelK.

Не-не. OWL 2 DL - это тоже профиль OWL 2. Я просто заметил, что хотя утверждение "чем проще язык, тем проще система лог. вывода" в целом верно, бывают случаи, когда кажущаяся простота языка оказывается обманчивой. Яркий пример - это OWL 1, особенно его вариант OWL Lite. Ярчайший пример грубейших ошибок при проектировании языка, в результате которых он имеет такую же вычислительную сложность, как значительно более выразительные логики. Семейство профилей RL/QL/EL/DL в OWL 2 существенно улучшило картину, тк каждый из них позволяет выразить практически максимум, не переходя на следующий уровень сложности (например, EL - максимум что можно впихнуть в полиномиальный вывод, DL - практически максимальный разрешимый язык и тд).

Что касается RDF/RDFS - то это второй яркий пример ошибочного проектирования, касающегося семантики blank nodes. По официальной семантике они являются existential variables (как в логике первого порядка), в то время как используются практически всегда просто как константы (вершины графа с неизвестным URI). К сожалению официальная семантика приводит к тому, что логический вывод в RDF сводится к задаче поиска изоморфного подграфа, что есть известная NP-полная задача. Се ля ви. Т.е. фактически бесполезное свойство языка резко ухудшает его вычислительные свойства.

На эту тему на последнем ISWC была классная статья On Blank Nodes, где эта ситуация разъясняется. И основная мысль там крайне проста: стандарту RDF скоро 10 лет, а официальную семантику практически никто не реализует (в ризонерах) и не использует - значит это была ошибка.

Но в целом да: чем язык проще, тем проще вывод (в вычислительным смысле). Но есть тонкости.

11

Re: Основы

Господа, спасибо вам большое!
Такой вопрос, хранилища онтологий - TripleStore, Virtuoso, для онтологий они как СУБД для БД? Я правильно понимаю?
В интернете есть примеры онтологий в RDF файлах, которые я могу изменять в Protege например, там же могу писать SPARQL-запросы. Такой вид хранения онтологии (RDF+RDFS) - это ее хранение в "чистом виде", как есть? Если да, то каким образом, в дальнейшем использовать хранилища? И как с ними взаимодействовать?
Заранее благодарен, благодаря вам каши в голове становится меньше smile .

Отредактировано Pavel (2011-12-10 13:32:19)

Thumbs up Thumbs down

12

Re: Основы

Тебе будет проще, если ты будешь разделять два понятия:
- схема (или TBox) - набор аксиом, описывающих понятия (концепты) предметной области и связи между ними
- данные (или ABox - набор фактов, описывающих объекты, относящиеся к тем или иным понятиям схемы, и связи между ними.
Под онтологией могут понимать как совокупность TBox + ABox (это стандартная терминология OWL), так и просто TBox.
Так вот, ABox - это фактически БД и есть, просто нереляционная. Факты в виде триплетов хранятся в RDF СУБД (Virtuoso, TDB, OWLim, 4store, Stardog, и тд). Взаимодействие как правило осуществляется через SPARQL, но есть и другие языки (например, SeRQL - Sesame Query Language).
TBox по размеру, как правило, намного меньше ABox и может храниться как вместе с ABox (внутри БД) так и извне. Хранение TBox определяется тем, как предполагается использовать схему. Если СУБД поддерживает логический вывод, то может иметь смысл хранить внутри БД (например, наш Stardog поддерживает вывод для всех подмножеств OWL 2). В этом случае взаимодействие часто происходит через SPARQL (БД сама обрабатывает запрос с учетом результатов вывода). Кроме того, можно держать TBox отдельно от БД и использовать стороннюю систему логического вывода (например, Pellet, FaCT++, HermiT, ELK и тд). В этом случае ты сам решаешь, как использовать результаты вывода по схеме для взаимодействия с данными.
RDFS/OWL (DL, EL, QL, RL) - это языки описания схемы. Для простоты можно считать, что сами данные - это просто набор RDF триплетов.

13

Re: Основы

То есть, я могу описать схему на RDFS, затем по схеме делать логический вывод, могу обращаться к ней SPARQL-запросами, и получая результат уже решать что делать с данными?

Thumbs up Thumbs down

14

Re: Основы

Да, вполне. Причем RDFS - язык достаточно простой, поэтому многие системы (тот Sesame) поддерживают RDFS-вывод "из коробки" (собственно весь вывод, как правило, заключается в простейших заключения типа "a rdf:type A, A rdfs:subClassOf B" => "a rdf:type B").

15

Re: Основы

Спасибо за ответ! Не могли бы вы подсказать, где я могу найти примеры простых онтологии?

Thumbs up Thumbs down

16

Re: Основы

Слова для поиска в гугле: "OWL 2 Primer", "Wine ontology", "Pizza ontology", "Protege tutorial". В pimer специально приводится простая онтология, где разбираются практически все возможности OWL 2. Может что-то в RDF primer есть.

17

Re: Основы

Здравствуйте! В очередной раз прошу вашего совета, надеюсь не сильно надоел smile. Прочитал методичку по Protege 3.2, сделал пример приведенный в ней, появились вопросы. Онтология выглядит так:
http://pikucha.ru/i7kEX/thumbnail/1.jpeg
Описания классов - схема - хранится в RDFS, объекты - в RDF файлах.
Например у класса Editor есть несколько слотов: name, salary и другие, которые хранятся в самой онтологии, в RDF-файле. Как быть, если я не хочу хранить какую-либо информацию о редакторе в файле онтологии? Создавать слот, в нем хранить какой-либо идентификатор, или URI, и затем в приложении, например, SPARQL-запрос вытаскивает значение слота для данного объекта, и по нему уже решаю какую информацию отображать? Я правильно понимаю?
И еще вопрос: например мне нужно будет создать онтологию для библиотеки (я привел это просто как пример, на самом деле я понимаю что онтология для библиотеки будет гораздо больше и сложнее), в библиотеке есть книги, у каждой книги есть автор, о каждом авторе есть информация. Получается в схеме я описываю 2 класса, Книга и Автор, класс Книга через слот связываю с классом автор? И затем я должен создать объекты этих классов для каждого автора и для каждой книги, которые имеются в библиотеке? Правильно?

Отредактировано Pavel (2011-12-13 17:39:41)

Thumbs up Thumbs down

18

Re: Основы

Правильно.
Была у меня попытка сделать что-то семантическое с библиотекой. Придумал так - сначала в программе Calibre e-book manager заполнил нужные книги, тут сразу генерируются обложки, указал авторов, некоторые теги (заранее выписал 20 тегов).
Потом на основе sqlite базы данных программы Calibre сделал онтологию (xml-ку, без какого-либо OWL-API, просто посмотрел как формирует записи Protege и сделал тоже самое в цикле). Ничего против Protege не имею. Но когда хочется сделать небольшое веб-приложение, чтобы там были и картинки и ссылки на файлы, то так удобнее. Потому что, сразу нужные картинки помещаются в нужные папки.

А RDF-mapping сделать не получилось. Хороших примеров (пошаговых руководств) как это сделать любым способом, хоть в Virtuoso, хоть где не нашел. А раз не нашел, то и выгружал всё из БД Calibre в xml-ку.

Такой способ не быстрее и не лучше чем другие. Написать нормальный редактор, который бы работал с базой знаний куда круче.

Thumbs up Thumbs down