Пример #1
0
void suiKnowBase::initialize()
{
    registerAllKeynodes();
//    createMinimalBase();

    // first of all we need to find identification* and main_ nodes
    resolveMainIdentificationKeynodes();

    // resolve other keynodes
    ScHelperInterface *helper = suiRoot::getInstance()->scHelper();
    for (KeynodesMap::iterator it = mKeynodesMap.begin(); it != mKeynodesMap.end(); ++it)
    {
        ScUri uri = helper->findElementByMainIdentifier(it.key());
        if (!uri.isEmpty()) helper->appendKeynode(uri, it.value());
    }
}
Пример #2
0
void suiKnowBase::loadSources(const QStringList &sourceDirs)
{
    // load knowledge base from sources
    QString sDir;
    foreach(sDir, sourceDirs)
        loadSourceDirectory(sDir, true);

    // find all keynodes
    ScHelperInterface *helper = suiRoot::getInstance()->scHelper();
    KeynodesMap::iterator it;
    for (it = mKeynodesMap.begin(); it != mKeynodesMap.end(); ++it)
    {
        // skip keynodes, that already found
        if (helper->hasKeynode(it.value())) continue;
        // try to find keynodes by main identifier
        ScUri uri = helper->findElementByMainIdentifier(it.key());
        if (uri.isEmpty()) SuiExcept(SuiExceptionItemNotFound,
                                         QString("Can't find keynode '%1'").arg(it.key()),
                                         "void suiKnowBase::initialize(const QStringList &sourceDirs)");
    }

    ScUri content_keynode = helper->keynode("/etc/content*");

    // trying to search all loaded sources
    ScMemoryInterface *mem = suiRoot::getInstance()->scMemory();
    ScSafeIterator scIt(mem, ScTemplate() << helper->keynode("/etc/source")
                                          << ScElementType(ScArcMain)
                                          << ScElementType(ScNode | ScConst));
    while (!scIt.is_over())
    {
        ScUriVector res;
        // trying to find content of source
        if (helper->searchOneShot(ScTemplate() << scIt.value(2)
                                             << ScElementType(ScArcCommon | ScConst | ScPositive)
                                             << ScElementType(0) // fix to link
                                             << ScElementType(ScArcMain)
                                             << content_keynode, res))
        {
            suiRoot::getInstance()->translateDataToSc(res[2]);
        }else
            SuiExcept(SuiExceptionInternalError,
                      "Can't find knowledge base source content",
                      "void suiKnowBase::initialize(const QStringList &sourceDirs)");

        scIt.next();
    }
}