Семантический разрыв
Представление понятий и связей в обычной семантической сети и в CWH
Как известно - семантическая сеть представляет из себя граф, вершины которого соответствуют объектам предметной области, а ребра - отношениям между ними.
В примерах отношение часто изображается в виде надписи над стрелкой, идущей от одной вершины к другой. то есть взвешенный ориентированный граф
С одной стороны это машинное представление семантической сети должно быть достаточно выразительным для представления именно взвешенного ориентированного графа.
Машинным представлением графа является матрица смежности вершин, матрица инцидентности, список ребер.
С другой стороны - приводимые в примерах семантические сети являются не вполне корректными моделями предметной области с точки зрения полноты.
Например, широко применяемое отношение AKO (A Kind of, отношение между надмножеством и подмножеством), отображенное как обычно в виде надписи над стрелкой в графическом представлении, и в виде одной строки в матрице инцидентности в машинном представлении, выражает только тот факт, что "множество Y является надмножеством по отношению к множеству X".
В то время как отношение "X AKO Y", подразумевает две равноправные интерпретации
- "множество Y является надмножеством по отношению к множеству X"
- "множество X является подмножеством по отношению к множеству Y".
Каждому из этих прочтений соответствует свое ребро графа, представляющего семантическую сеть, своя строка в матрице инцидентности.
То же самое относится и к другим двуместным отношениям,
В большинстве примеров используются двухместные отношения, однако практическое применение требует представления трех- и более местных отношений, что заставляет заниматься их представлением в видем комбинации двухместных отношений, что не всегда возможно.
Проблему представления многоместных отношений решают концептуальные графы,
Двуместные и многоместные отношения.
(отношения и аспекты, двунаправленные связи, проблемы двунаправленных связей, "полуторанаправленные связи")
Организация хранилища
Данные в памяти хранятся в виде иерархии списочных структур, иногда с наличием обратных ссылок на вышестоящие структуры.
Организация сБД в памяти будет неизменной и в дальнейших версиях программы.
Предполагается, что в процессе разработки в формат хранения данных будут постоянно вноситься коррективы, поэтому формат хранения на диске в черновой версии целесообразно сделать максимально простым (т.е. в виде текстовых файлов), а после стабилизации структуры - заменить на бинарный вид, обеспечивающий более высокую скорость работы. Таким образом при переходе от черновой версии изменятся только функции, работающие с созданием самих БД и контекстов, и с чтением с диска в кеш и сбросом кеша на диск.
Примитивы хранения
сБД - совокупность контекстов. Предполагается, что могут существовать приложения, работающие одновременно с несколькими разными сБД, хотя бы для целей импорта-экспорта данных или бэкапа.
Контекст - группа хранения узлов семантической сети, состоит из дерева понятий и дерева имен.
Изначальное применение - распределение данных по предметным областям: контекст про химию, про физику, про бухучёт, про бизнес-процессы в компании X.
Альтернативное применение - разделение на части для преодоления ограничений по объёму, которые могут быть вызваны разрядностью адресов в случае бинарной базы данных или длиной идентификаторов в случае построения базы данных на тексктовых файлах, как XML.
Узел семантической сети - совокупность идентификатора, человеко-понятного описания смысла узла и список инцидентности других узлов семантической сети. В оригинальной семантической сети описанием инцидентности было бы словесное указание типа связи и адрес связанного узла.
В CWH для описания связи между узлами семантической сети используется четверка "Ключ" - "Тип связи" - "Тип адреса" - "Адрес".
тип связи на данный момент реализован только "s"
возможные форматы адресов:Примитивы обработки
Курсор - структура данных , предназначенная для сохранения результатов поиска, т.е. множества узлов сети. Особо важна, поскольку планируется практически все операции и вычисления свести к поиску на семантической сети.
количество узлов сети, на которые указывает курсор может изменяться в ходе поиска.
Команды обработки
Команды, прямого управления примитивами.
Эти команды не могут быть описаны на языке управления сБД, исполняемом интерпретатором, поскольку оперируют структурами данных, непредставимыми в текстовом виде.
Function MkSubDir(Path:String;Module,Sub:Longint):String;
Function ParseAddr(Cursor:TsDBCursor;Addr:String;Var CtxName,NodeID:String):String;
Function LookupFQ(DBName,CtxName:String;Var DB:TsDB;Var Ctx:TsDBCtx):String;
Function IDToPath(ID,Module,Depth:Longint):String;
Function GetCursorByName(Name:String):TsDBCursor;
Function Read2Cache(Var CacheObject:TCacheObject;var Error:String):String; //а не может ли здесь тоже мгновенно устаревать кэш?
Function Read2CacheByID(Var Error:String;Var Ctx:TsDBCtx;Var Tree:TDataTree;ID:String):TCacheObject;
Function FlushCacheObject(Var CacheObject:TCacheObject):String;
Function CreateNode(Var Ctx:TSDBCtx;Var Tree:TDataTree;InternalName:String;Var Error:String):TCacheObject;
Function WriteValue(CacheObject:TCacheObject;Key,Value:String;List:TStringList):String;
Function sDB_FQGetConceptHandleByID(DBName,CtxName,ConceptID:String):TCacheObject;
Function CreateSLink(Var CacheObject:TCacheObject;Key,AddrType,Addr:String):String;
Function SlideByKey(Source:TCacheObject;Key:String):TCacheObject;
Function BranchBySingleKey(Source:TCacheObject;Key:String;Var List:TStringList;Var EvalResult:TStringList):String;
Function BranchByKey(Source:TCacheObject;Key:String;Var List:TStringList;Var EvalResult:TStringList):String;
Команды-обертки
аналоги некоторых команд прямого управления, доступные для описания на интерпретируемом языке
Function sDB_FQFlushCacheObject(DBName,CtxName,ObjectID:String):String;
Function sDB_CRWriteValue(CursorName,SourceAddr,Key,Value:String;List:TStringList):String;
Команды для манипуляции с БД.
Function sDB_CreateDB(DBName,Path:String):String;
Function sDB_DeleteDB(Path:String):String;
Function sDB_OpenDB(Path:String):String;
Function sDB_CloseDB(DBName:String):String;
Команды для манипуляции с контекстами.
Function sDB_FQCreateCtx(DBName,CTXName,Module,Depth,CacheSize,CachePolicy,NModule,NDepth,NCacheSize,NCachePolicy:String):String;
Function sDB_FQDeleteCtx(DBName,CtxName:String):String;
Команды для манипуляции с курсорами.
Function sDB_CreateCursor(Name:String):String;
Function sDB_SetCursor(CursorName,DBName,Addr:String):String;
Function sDB_DeleteCursor(Name:String):String;
Function sDB_CopyCursor(Name1,Name2:String):String;
Команды 1-го уровня для манипуляции с понятиями и отношениями.
Function sDB_CRCreateConcept(CursorName,InternalName:String):String;
Function sDB_FQDeleteConcept(DBName,CtxName,ConceptID:String):String;
Function sDB_CRCreateRelation(CursorName,InternalName:String):String;
Function sDB_FQWriteName(DBName,CtxName,Name,ConceptID:String):String; записывает имя в дерево имен
Function sDB_CRCreateSLink(CursorName,SourceAddr,Key,AddrType,Addr:String):String;
Function sDB_CRCreateALink(CursorName,SourceAddr,Key,AddrType,Addr:String):String;
Function sDB_FQFindConceptByName(DBName,CtxName,Name:String):String;
Function sDB_CRFindConcept(CursorName,Addr:String):String;
Function sDB_CRSearchByName(CursorName,Name:String):String;
Function sDB_CRSearchByChain(CursorName,Chain:String):String;
Function sDB_CREvalByChain(CursorName,Addr,Chain:String;Var Value:TStringList):String;
Команды 2-го уровня для манипуляции с понятиями и отношениями.
Function sDB_CRCreateBinRel(CursorName,Addr1,Addr2,RelIntName,Aspect1,Aspect2:String):String;
Function sDB_CRFilterByChain(CursorName,Chain:String):String;
Команды для манипуляции с группами (множествами).
Function sDB_CRAddToGroup(CursorName,GroupAddr:String):String;
Команды для манипуляции с таксонами и объектами.
Function sDB_CRSetAttrValue(CursorName,ConceptAddr,AttrName,Value:String):String;
Function sDB_CRImportObject(CursorName,Addr,FileName:String):String;
Function sDB_CREnumAttrs(CursorName,Name:String;Var AttrList:TStringList):String;
Function sDB_CRActivateMethod(CursorName,Name:String):String;
Рубрика | Непосредственные | Обертки | 1-й уровень | 2-й уровень | 3-й уровень |
Вспомогательные | Function MkSubDir (Path:String;Module,Sub:Longint):String; |
||||
Function IDToPath (ID,Module,Depth:Longint):String; |
|||||
Манипуляции БД |
Function sDB_CreateDB (DBName,Path:String):String; |
||||
Function sDB_DeleteDB (Path:String):String; |
|||||
Function sDB_OpenDB (Path:String):String; |
|||||
Function sDB_CloseDB (DBName:String):String; |
|||||
Манипуляции контекстами |
Function sDB_FQCreateCtx (DBName,CTXName,Module,Depth, CacheSize,CachePolicy,NModule,NDepth, NCacheSize,NCachePolicy:String):String; |
||||
Function sDB_FQDeleteCtx (DBName,CtxName:String):String; |
|||||
Манипуляции курсорами |
Function GetCursorByName (Name:String):TsDBCursor; |
||||
Function sDB_CreateCursor (Name:String):String; |
|||||
Function sDB_DeleteCursor (Name:String):String; |
|||||
Function sDB_SetCursor (CursorName,DBName,Addr:String):String; |
|||||
Function sDB_CopyCursor (Name1,Name2:String):String; |
|||||
Манипуляции примитивами (узлами) |
Function ParseAddr (Cursor:TsDBCursor;Addr:String;Var CtxName,NodeID:String):String; |
||||
Function LookupFQ (DBName,CtxName:String;Var DB:TsDB;Var Ctx:TsDBCtx):String; |
|||||
Function CreateNode (Var Ctx:TSDBCtx;Var Tree:TDataTree;InternalName:String;Var Error:String):TCacheObject; |
|||||
Function Read2Cache (Var CacheObject:TCacheObject;var Error:String):String; |
|||||
Function Read2CacheByID (Var Error:String;Var Ctx:TsDBCtx;Var Tree:TDataTree;ID:String):TCacheObject; |
Function sDB_FQGetConceptHandleByID (DBName,CtxName,ConceptID:String) :TCacheObject; |
||||
Function FlushCacheObject (Var CacheObject:TCacheObject):String; |
|||||
Манипуляции понятиями и отношениями |
|||||
Function sDB_CRCreateConcept (CursorName,InternalName:String):String; |
|||||
Function sDB_FQDeleteConcept (DBName,CtxName,ConceptID:String):String; |
|||||
Function sDB_CRCreateRelation (CursorName,InternalName:String):String; |
Function sDB_CRCreateBinRel (CursorName,Addr1,Addr2,RelIntName,Aspect1,Aspect2:String):String; |
||||
Function sDB_FQWriteName (DBName,CtxName,Name,ConceptID:String):String; |
|||||
Function CreateSLink (Var CacheObject:TCacheObject;Key,AddrType,Addr:String):String; |
Function sDB_CRCreateSLink (CursorName,SourceAddr,Key,AddrType,Addr:String):String; |
||||
Function sDB_CRCreateALink (CursorName,SourceAddr,Key,AddrType,Addr:String):String; |
|||||
Function sDB_FQFindConceptByName (DBName,CtxName,Name:String):String; |
|||||
Function sDB_CRFindConcept (CursorName,Addr:String):String; |
|||||
Function SlideByKey (Source:TCacheObject;Key:String):TCacheObject; |
Function sDB_CRSearchByName (CursorName,Name:String):String; |
||||
Function BranchBySingleKey (Source:TCacheObject;Key:String;Var List:TStringList;Var EvalResult:TStringList):String; |
Function sDB_CRSearchByChain (CursorName,Chain:String):String; |
Function sDB_CRFilterByChain (CursorName,Chain:String):String; |
|||
Function BranchByKey (Source:TCacheObject;Key:String;Var List:TStringList;Var EvalResult:TStringList):String; |
Function sDB_CREvalByChain (CursorName,Addr,Chain:String;Var Value:TStringList):String; |
||||
Function WriteValue (CacheObject:TCacheObject;Key,Value:String;List:TStringList):String; |
|||||
Манипуляции группами |
Function sDB_CRAddToGroup (CursorName,GroupAddr:String):String; |
||||
Манипуляции таксонами |
|||||
Function sDB_CRSetAttrValue (CursorName,ConceptAddr,AttrName,Value:String):String; |
|||||
Function sDB_CRImportObject (в зависимости от реализации может рассматриваться как 4 уровня или мета ) |
|||||
Function sDB_CRActivateMethod (мета-команда, т.к. ставит в очередь подкоманды + создает подкурсоры) |
|||||
Function sDB_CREnumAttrs пока недописана |
Предсталвение понятия в семантической сети.
Представление отношения в семантической сети.
Хранение значений в семантической сети.
Реализация объектной модели поверх семантической сети.