예제 #1
0
        private IEnumerable <string> Type1OneWord(string mainObj, Node attrNode)
        {
            //находим все экземпляры MainObject
            // Список всех коктейлей
            List <string> instancesNames = MetadataSearch.ToList(MetadataSearch.AddInstancesOfMetaObject(mainObj));
            // Список всех неименованных вершин - коктейлей
            var instances = instancesNames.Select(x => SafelyGetNodeByName(x, SemanticWeb.Web().GetMainMetaObjectNames()[0]));
            // Список всех атрибутов метаобъекта (Ингредиент, Ёмкость, Действие...)
            var attrs = MetadataSearch.ToListWithHeader(MetadataSearch.AddAttribute(SafelyGetNodeByName(mainObj, null), mainObj));
            //Вершина, соответствующая экземпляру атрибута, который ищем (например, неименованный узел для Вишни)
            var list = new List <string>();

            foreach (Node instanceNode in instances)
            {
                string res = GetAttrNameIfExists(instanceNode, attrNode, attrs);
                if (res != null)
                {
                    if (res == SemanticWeb.Web().GetNameForUnnamedNode(attrNode, false))
                    {
                        list.Add(SemanticWeb.Web().GetNameForUnnamedNode(instanceNode, false));
                    }
                    _workMemory.WorkedArcs.AddRange(SemanticWeb.Web().WayToSystemArcs);
                    _workMemory.WorkedNodes.AddRange(SemanticWeb.Web().WayToSystemNodes);
                }
            }
            return(list);
        }
예제 #2
0
        //Тип запроса 2 (ConcreteMainObject + ConcreteMainObject.Attribute)

        /* Например: есть ли в French75 вишня?
         * используется ли в WinterChill бокал?
         */

        private bool Type2Execute(string mainName, IEnumerable <Node> attNodes)
        {
            var metaName = SemanticWeb.Web().OldestParentArc(SafelyGetNodeByName(mainName, null).ID); //тип mainName
            //список атрибутов для metaName
            string res           = null;
            var    childrenNames = new List <string>();

            foreach (var attrNode in attNodes)
            {
                var attrs =
                    MetadataSearch.ToListWithHeader(
                        MetadataSearch.AddAttribute(SafelyGetNodeByName(metaName, null), metaName));
                var instanceNode = SafelyGetNodeByName(mainName, SemanticWeb.Web().GetMainMetaObjectNames()[0]);

                childrenNames = MetadataSearch.ToListWithHeader(MetadataSearch.AddInstances(attrNode, false));

                List <Node> children = childrenNames
                                       .Select(x => SafelyGetNodeByName(x, SemanticWeb.Web().GetNameForUnnamedNode(attrNode, false))).
                                       ToList();

                res = null;
                for (int i = 0; i < children.Count && res == null; i++)
                {
                    res = GetAttrNameIfExists(instanceNode, attrNode, attrs);
                }
            }

            if (res != null)
            {
                if (childrenNames.Contains(res))
                {
                    return(true);
                }
            }
            return(false);
        }