For effective use of the constructed KB, a system of requests to it as to SM is required. The project uses the tools of the Julog logical programming package [11] and the Julia programming language [12]. The justification for the use of the Julia language in the project is given in Appendix B.
Below is the text of a Julia program fragment that forms statements for the Julog logic programming system. This system is similar to the Prolog system, but implemented as a Julia package and allows you to use all the advantages of this language.
rules = @julog [
Attr(ID, Name) <<= A(ID, V) & V(V, Name, _),
Cat(ID, Name) <<= C(ID, V) & V(V, Name, _),
Rel(ID, Name) <<= R(ID, V) & V(V, Name, _),
Obj(ID, Name) <<= O(ID, _, V) & V(V, Name, _),
CatObj(ID, CatID, ObjID, CatName, ObjName) <<=
CO(ID, CatID, ObjID,) & Cat(CatID, CatName) & Obj(ObjID, ObjName),
RelCat(ID, RelID, CatFromID, CatToID, RelName, CatFromName, CatToName) <<=
RC(ID, RelID, CatFromID, CatToID) & Rel(RelID, RelName) & Cat(CatFromID, CatFromName) & Cat(CatToID, CatToName),
RelCatObj(ID, RelCatID, CatFromID, ObjFromID, CatToID, ObjToID, RelName, CatFromName, ObjFromName, CatToName, ObjToName) <<=
RCO(ID, RelCatID, ObjFromID, ObjToID) & RelCat(RelCatID, RelID, CatFromID, CatToID, RelName, CatFromName, CatToName) & Obj(ObjFromID, ObjFromName) & Obj(ObjToID, ObjToName),
AttrCat(ID, CatID, AttrID, ValueID, CatName, AttrName, Value) <<=
AC(ID, CatID, AttrID, ValueID) & Attr(AttrID, AttrName) & Cat(CatID, CatName) & V(ValueID, Value, _),
AttrCatObj(ID, CatObjID, CatID, ObjID, AttrID, ValueID, CatName, ObjName, AttrName, Value) <<=
ACO(ID, CatObjID, AttrID, ValueID) & CatObj(CatObjID, CatID, ObjID, CatName, ObjName) & Attr(AttrID, AttrName) & Cat(CatID, CatName) & V(ValueID, Value, _),
AttrRel(ID, RelID, AttrID, ValueID, RelName, AttrName, Value) <<=
AR(ID, RelID, AttrID, ValueID) & Attr(AttrID, AttrName) & Rel(RelID, CatName) & V(ValueID, Value, _),
AttrRelCat(ID, RelCatID, RelID, CatFromID, CatToID, AttrID, ValueID, RelName, CatFromName, CatToName, AttrName, Value) <<=
ARC(ID, RelCatID, AttrID, ValueID) & RelCat(RelCatID, RelID, CatFromID, CatToID, RelName, CatFromName, CatToName) & Attr(AttrID, AttrName) & V(ValueID, Value, _),
AttrRelCatObj(ID, RelCatObjID, RelID, CatFromID, ObjFromID, CatToID, ObjToID, AttrID, ValueID, RelName, CatFromName, ObjFromName, CatToName, ObjToName, AttrName, Value) <<=
ARCO(ID, RelCatObjID, AttrID, ValueID) & RelCatObj(RelCatObjID, RelCatID, CatFromID, ObjFromID, CatToID, ObjToID, RelName, CatFromName, ObjFromName, CatToName, ObjToName) & Attr(AttrID, AttrName) & V(ValueID, Value, _)
]These statements allow you to make sample queries from SM in Prolog style.