Как создать приложение Semantic Web?

Ответ на это прост, если не учитывать проблемы, которые я освещал в одном из предыдущим постов.

Cначала давайте определимся, что будем понимать под приложением Semantic Web.

Итак, если приложение построено с использованием таких средств Semantic Web, как XML,  RDF, OWL, SPARQL, то такое приложение будем называть приложением Semantic Web первого типа.

В случае, если приложение реализует идеи Semantic Web, как концепции,  тогда такое приложение назовем приложением Semantic Web второго типа.

Отмечу, что приложения 2-го типа могут быть сделаны вообще без использования текущих технологий  Semantic Web.

При создании приложений первого типа ситуация следующая — необходимо создать три компонента и создать интерфейс, обеспечивающий межкомпонентное взаимодействие.

Компонент 1 — распределенная база знаний в виде онтологии. Онтология может быть описана  на одном из языков представления поверхсностных знаний (RDF/RDFS, OWL, DAML+OIL и т.п.)

Компонент 2 — подсистема логического вывода, позволяющая осуществлять CRUD-запросы к онтологии. Приношу извинения за столь неуважительное отношение к логическому выводу, но в любом случае, логический вывод это не более чем набор операций над базой знаний, примененных в определенной последовательности для получения ответной реакции на входящий в подсистему запрос.

Отмечу, логический вывод  — это прежде всего запросы на выборку по условию. Все остальное, это мое не желание добавлять лишние компоненты в приложение Semantic Web.

Что касается термина CRUD — это просто набор операций Create, read, update and delete! ))

Компонент 3 — SPARQL-точка доступа, через которую приложение  Semantic Web будет осуществлять взамодействие c внешним миром ( агентами, другими семантическими приложениями и т.п.).  Для такой точки доступа к ресурсами приложения Semantic Web можно использовать различные языки запросов, например, SPARQL или SWRL.

Ну конечно же пару слов об интефейсе межкомпонентного взаимодействия приложения  Semantic Web — это набор предопределенных сообщений, интерпретация которых соответствующими компонентами приводит к вызову определенных методов. при чем каждый такой метод реализует логику выполнения некоторого действия, например, вычисление среднего значения атрибутов экземпляров определенного класса… Что-то просто объяснить не получилось, объясню при необходимости в следующий раз… Комментируйте посты!!!

Реализация!

Приложения Semantic Web первого типа разделим на два подкласса (деление характерно и для обычных приложений):

1) Статические приложения

2) Динамические приложения

Если со статическими приложениями все в общем ясно, заглянув на сайт ontolib.com! Есть онтология RDF, есть правила логического вывода на  XSLT, есть генератор страниц HTML  в виде  XSLT процессора, например,  Saxon или XALAN. Вообщем и все. Полноценное статическое приложение  Semantic Web готоро. Почему статическое? Да потому что запросы по формированию html-страниц выполняются не в реальном режиме времени.

А где вы скажите CRUD? А CRUD в редакторе онтологий, например,  в Protege или SemanticWorks. Вы скажите, что это неудобно и так уже никто не делает программы ))) и я с вами соглашусь )))

Конечно, проще всего сделать динамическое приложение, например, что-то из серии Web-ориентированных приложений.

Итак, берем относительно простой язык программирования Java, пишем простой сервлет или JSP-страницу, добавляем в проект сервлета вызов стандартной библиотеки для обработки XML с помощью XSLT или непосредственно к сервлету/JSP подключаем XALAN или SAXON, берем правила интерпретации RDF- конструкций отсюда и все готово! Динамическое приложение Semantic Web 1-го типа готово! Предугадывая вопросы типа RDF- это отстой, хочу напомнить, что никто вам не запрещает модифицировать мои правила для интерпретации OWL -конструкций )) А это сделать очень легко вспомнив, что в основе представления OWL лежит RDF, а в основе представления RDF в синтаксисе XML/RDF лежит XML! Для примера, я некоторые приведенные на моем сайте правила  модифицировал для обработки OWL за 15 минут )) Время привожу исключительно для того, чтобы вы не думали, что это сложно!

И, конечно же, помните об оптимизации, примеры с моего сайта надо оптимизировать для реального использования! Я в приведенном материале не ставил перед собой цель создать эффективное решение!

Кроме того, подобное решение можно аналогично сделать на языках программирования PHP, C# и на любом другом, где есть поддержка XML!

Я ничего не сказал об третьей компоненте — SPARQL-точке доступа. Это тема для отдельной заметки )

Компоненту с XSLT-процессором и правилами вывода можно заменить средством обработки RDF-конструкций JENA!

В этом случае, Вам не нужно мучится с освоением XSLT и вы автоматически получаете средство, понимающее SPARQL. А это прямой путь автоматически получить функциональность точки доступа ))

Кстати, Вам никто не запрещает совместить в одном приложении на языке Java и XSLT процессор и JENA.

Пока думаю хватит!

PS Приложения Semantic Web второго типа — это не так просто как может показаться, это приложения в которых семантические приложения имеют дело с нечеткостью определения и неполнотой запросов к онтологии, где выполнение четко определенного SPARQL-запроса не приносит результата и логический вывод может не работать )) Эти  приложения находятся на уровне качественно высшем, чем приложения первого типа.

Повторюсь, эти приложения не решают основных проблем искусственного интеллекта!

Так что есть над чем еще работать ))


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


15 Responses to Как создать приложение Semantic Web?

  1. rabchevsky:

    Сергей,
    к характеристикам приложений второго типа я бы добавил еще распределенность. Ведь онтологии будут широко применяться, когда они адекватно будут описывать окружающий нас мир. То есть каждый интернет издатель должен создать маленький кусочек онтологии все Паутины. В общем комьюнити спасет мир!

  2. Да, конечно!
    Но когда я рассуждаю об онтологих Семантического Веба, то рассуждаю об онтологиях, каждый компонент которых распределен по WEB согласно свойство-центричной модели представления знаний.

  3. Не могли бы пояснить:
    «Компонент 1 — распределенная база знаний в виде онтологии.»
    Это означает, что и онтология распределенная?
    Если да, то распределенная онтология означает, что часть концептов с наборами экземпляров на одном серевере, а часть на другом или, что онтология присутствует на обоих, но они наполняют ее экземплярами разных типов?

  4. И вот еще такой момент: Вы говорите о модификации правил для обработки OWL конструкций. Правильно ли я Вас понял: если скажем есть онтология в формате RDF, я пишу запрос на SPARQL на получение всех экземпляров класса CAR, то я получу только экземпляры только этого класса, если даже у него есть подкласс LightCar со своими экземплярами. Соответвенно, для решения этой задачи мне надо делать неcколько запросов (т.е. модифицировать правило для учета отношений OWL)?

  5. онтология Semantic Web, в отличие от классического определения, изначально была распределенной, просто с точки зрения эффективности с локальной онтологией работать лучше и легче.

    а модификация структуры некоторого объекта на другом сервере ведет к возникновению противоречий в онтологии — а выявление таких противоречий это уже не проблема SW — это проблема агента или пользователя. Думаете почему такое широкое развитие получили нечеткие онтологии. Еще обратите внимание на то, что OWL уже версии 2, а показателя времени до сих пор нет, то есть глобально состояние объекта в развитии нельзя на уровне языка отследить.

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

    Вообще мое наблюдение за такими проблемами выглядят так — при увеличении степени детализации описания предметного мира, многих проблем можно избежать. О чем речь — а речь о том, что в одном мире только один объект с одним символьным именем может иметь один смысл, а в другом мире этом смысл может быть изменен. А многоосновные миры поддерживаются как OWL 1 так и OWL 2

    в многоосновном мире два объекта с одинаковым смыслом не являются эквивалентным, если не будет явно указана связь (еквивалентность).
    Ведь смысл то для человека очевиден, а для машины нет

    Вообще вопрос о возникающих противоречиях в онтологиях, а вообще и в любых структурированных систем — это извечный вопрос, который постоянно возникает и на который нет однозначного ответа.

  6. уточнение — по многоосновным мирам — в каждом мире конечно можно вводить объекты со одинаковым смыслом но разной структурой, но это уже противоречие, а с ним лучше не сталкиваться, так процедура устранения противоречия будет ресурсозатратной, а иногда еще и не автоматической!

  7. CAR и LightCar разные классы. Это и есть ответ на ваш вопрос!

  8. rabchevsky:

    Относительно CAR и LightCar:
    Если Вы выполните операцию логического вывода, то получите экземпляры обоих классов.

  9. Маленький анонс —
    К 15 февраля будет готов перевод перевод нового стандарта SPARQL.

  10. А понятие «предметная область» может быть синонимом «мира»?
    И в чем заключается поддержка многоосновности в OWL (не смог этого увидеть в спецификациях)?
    С Вашей точки зрения для чего использоваться показатель времени?

    И вот еще про выявление противоречий агентом или пользователем, это, как мне кажеться, относиться также к проблеме интеграции онтологий — многие системы (PROMPT, Ontomerge) после анализа 2х онтолгий выносят предложения по установлению соответсвий, а эксперт уже соглашается или нет. Каким в этом случае может быть критерий качества таких программных продуктов, т.е. как сказать как лучше или какая хуже? И соответственно, в какую сторону, с Вашей точки зрения, улучшать.

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

    Кроме OWL есть еще математические основы языка OWL — LBASE
    А кроме LBASE, есть еще и MOF

    А многоосновные миры — это вселенные со своим правилами и законами. Что касается многоосновных миров в OWL — это совокупности связанных отношениями базовых классов. От базовых классов строятся пользовательские классовые иерархии.
    А базовые классы — это классы уровня Thing в редакторе Protege

    На понятие мира можно смотреть с различных сторон.

    продолжу рассуждение позже…

  12. Показатель времени очень важная составляющая. во-первых как отследить динамику измения состояния объекта? Ведь реальный мир динамичен, а онтологии то статичны. в этом плане онтологии OWL еще называют 3D онтологиями.
    Во-вторых версионность(при чем версионность всех компонентов онтологии)
    Как развитие смыслового описания класса проследить? Ведь был вчера объект(класс) Человек, а завтра он стал Суперменом. Хотя определение Человек будет базовым и символьное имя класса не поменяется, но свойства, как в количественном так и в качественном плане претерпят изменения. Ведь человек останется человеком, но у него может появится свойство (умение), например, летать, дышать под водой и тп.

  13. по поводу интеграции онтологий —
    критерий качества?! хороший вопрос! Если бы вышеперечисленные средства представляли автоматическое средство запустил и забыл. Это было бы одно. И тут можно было бы рассуждать о качестве трансляции. А так сидишь и вручную устраняешь противоречивости в трактовке терминов и т.п.
    а если ищите конкретные качетственные показатели, то их легко найти в нечеткой логике. так как процесс интеграции онтологий нечеткий .

    А так все упирается в количество времени, которое вы потратите на поиски ошибок трансляции из одно языка представления в другой.
    Чесно говоря при необходимости для интеграции я бы написал XSLT преобразование и полностью контролировал бы процедуру склейки нескольких онтологий. Тем более логику слияния вы сами описывает и при необходимости модифицируете

  14. PavelK:

    Сергей, по-моему, Вы всех запутали :) Попробуйте дать четкое формальное определение «многоосновным мирам». А то у меня ощущение, что вы пытаетесь объяснить простой open world assumption, но делаете это как-то немножко странно.

  15. PavelK:

    Да, кстати. Забудьте об LBase. Его больше нет (ура!) Надеюсь Pat’а будут держать подальше от SW-языков и стандартов в дальнейшем…

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

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


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