Заметка на полях исследований стека технологий для дейцентричного процессинга.
Оператор negation в спецификации SPARQL проявляет интересную проблему с интеграцией разноуровневых онтологий и эпистемических вычислений. Данные, представленные в блоке "Data"- текущая онтика, набор фактов, организованный в соответствии с какой-то онтологией (О1). По факту там несколько онтологий импортировано (example, rdfs, foaf), но тут это не важно, т.к. они одного уровня.
Текст запроса в части WHERE создаёт локальную онтологию О2, группу условий - классов истинности, которая для каждого конкретного факта из О1 производит булевый экземпляр, значение срабатывания фильтра.
При этом выражение FILTER NOT EXISTS (или FILTER EXISTS) - можно считать эпистемическим оператором: если перефразировать объективистский квантор EXISTS в конструктивистском виде, получим аналогичное оному WE DON'T KNOW OF, "онтика агента не содержит такого факта". Closed world assumption предполагает положение, что "не знаем - значит не существует", но, как assumption, в эпистемологических, а не частных методологических задачах оно нас не ограничивает.
Мы имеем две онтики о1 и о2 с разным жизненным циклом: первая протяжённая, вторая существует только во время исполнения запроса. Онтологии О1 и О2, нормативные для этих онтик, реализуются различными формализмами: О1 - rdf/turtle, О2 - SPARQL.
Генераторы фактов в rdf - SPO триплеты. Они, предположим, удобны для описания объектного знания "объект отношение свойство", "субъект отношение объект" и пр. Для описания эпистемических ситуаций вида "мы не знаем, что А" такие конструкции недостаточны: ведь нужно превратить факт в объект целиком, реифицировать. Появляются named graphs, N-quads и TriG. Теперь можно генерировать эпистемические факты, вроде
@prefix e: <http://epistemic.org/> .
:alice rdf:name "Alice" :fact1.
:we e:dontKnown :fact1 .
Для объектной онтологии выглядит несколько странно, странность эта неслучайна, но рефлексивные онтики реальных агентов чем-то подобным переполнены. Ощущение странности возникает из-за того, что rdf/owl для эпистемически-насыщенных задач приспособлены примерно никак. Это онтологические инструменты, да ещё и с большим количеством ограничений на средства онтологизации. А вот SPAQRL, как и многие/любые языки запросов по необходимости должны быть эпистемически-способны. Одна из их задач - определять статус знания долгоживущей онтики - "база знаний", относительно знания оперативного - контекст запроса. При этом эпистемические генераторы вида NOT EXISTS зашиты в синтаксис SPARQL, т.е. связаны с жизненным циклом языка, формализма. Эпистемически активный процессинг, и тем более - разработка в рефлексивно-насыщенных доменах однозначно требуют большей гибкости. В SQL или SPARQL возможно создать онтику эпистемических состояний, "записать знание о знании и незнании" не только в онтику запроса (состояние предикатов WHERE, JOIN, GROUP и пр), но и в промежуточные базы, сначала собрав онтологию эпистемических состояний, но текущими объект-центричными (не обязательно объектно-ориентированными) средствами это, похоже, будет весьма громоздко.