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

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-запроса не приносит результата и логический вывод может не работать )) Эти  приложения находятся на уровне качественно высшем, чем приложения первого типа.

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

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