Советы от читателей форума Semantic Web User Group (Выпуск 4)

, , , , , | Shcherbak Sergey | 11.12.2011 | Комментариев нет


Пользователь Pavel форума Semantic Web User Group интересовался вопросами, важными для многих наших читателей.
Итак,

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

Ответы, знающих:

Tester

RDF и OWL — языки разметки. Для онтологий есть RDF-S, OWL 1.0 DL, … OWL 2.0 DL, … При этом OWL основан на RDF.

  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). А можно хранить отдельно — картинки в файловой системе и БД, а онтологии их семантическое описание.

PavelK

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


Pavel: если в будущем предстоит взаимодействовать с приложением на .NET, лучше разбираться с RDFS?

Tester

Для .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.

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

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

http://www.w3.org/wiki/SparqlImplementations (тут ничего нет на C#, кроме SemWeb, но всё равно полезно)

http://www.w3.org/wiki/SemanticWebTools … Developers (тут на C#, но для RDF)

http://semanticweb.org/wiki/Tools (лишь у единиц продуктов заполнен язык реализации, а конкретно у двух, и в обоих случаях — Java, но всё равно, есть ссылки, по ссылкам есть описание, а там уж видно на чём написано).

PavelK: Для .NET могу еще предложить глянуть на dotNetRDF. Он по крайней мере активно развивается.

 

Еще раз про профили OWL (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 лет, а официальную семантику практически никто не реализует (в ризонерах) и не использует — значит это была ошибка.

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

Полную версию вы можете прочитать на форуме!


Понравилась статья? Поделитесь с друзьями!


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Ответить с помощью ВКонтакте: