Esempio n. 1
0
        /// <summary>
        /// Получить коллекцию конструкций, соответствующих указанной конструкции-шаблону.
        /// </summary>
        /// <param name="template">Конструкция-шаблон.</param>
        /// <returns>Список конструкций (списков элементов).</returns>
        public List <List <ScAddress> > IterateElements(ConstructionTemplate template)
        {
            if (!knowledgeBase.IsAvaible)
            {
                return(new List <List <ScAddress> >());
            }
            var cmd = new IterateElementsCommand(template);
            var rsp = (IterateElementsResponse)knowledgeBase.ExecuteCommand(cmd);

            return(rsp.Constructions);
        }
Esempio n. 2
0
        public List <ScAddress> FindApples()
        {
            List <ScAddress> apples = new List <ScAddress>();
            //ищем адресс класса яблоко
            var classAppleAddress = this.FindElementAddress(class_apple);
            //ищем все экземпляры класса яблоко. Вот здесь обычно очень нужно находить подмаски масок элементов и сравнивать их
            var template         = new ConstructionTemplate(classAppleAddress, ElementType.PositiveConstantPermanentAccessArc, ElementType.ConstantNode);
            var cmdFindApples    = new IterateElementsCommand(template);
            var rspIterateAppels = (IterateElementsResponse)client.Send(cmdFindApples);

            //и при итерации добавляем в коллекцию адреса яблок (у нас в примере один, но суть можно уловить)
            foreach (var construction in rspIterateAppels.Constructions)
            {
                apples.Add(construction[2]);
            }

            return(apples);
        }
Esempio n. 3
0
        /// <summary>
        /// Получение произвольного идентификатора. узла
        /// </summary>
        /// <param name="scAddress">SC-адрес узла</param>
        /// <param name="identifierType">тип идентификатора</param>
        /// <returns>идентификатор</returns>
        public Identifier GetNodeIdentifier(ScAddress scAddress, Identifier identifierType)
        {
            Identifier identifier = Identifier.Invalid;

            if (knowledgeBase.IsAvaible)
            {
                var template = new ConstructionTemplate(scAddress, ElementType.ConstantCommonArc_c, ElementType.Link_a, ElementType.PositiveConstantPermanentAccessArc_c, GetNodeAddress(identifierType));
                var command  = new IterateElementsCommand(template);
                var response = (IterateElementsResponse)knowledgeBase.ExecuteCommand(command);
                if (response.Constructions.Count == 1)
                {
                    ScAddress link            = response.Constructions[0][2];
                    var       commandGetLink  = new GetLinkContentCommand(link);
                    var       responseGetLink = (GetLinkContentResponse)knowledgeBase.ExecuteCommand(commandGetLink);
                    if (responseGetLink.Header.ReturnCode == ReturnCode.Successfull)
                    {
                        identifier = LinkContent.ToString(responseGetLink.LinkContent);
                    }
                }
            }
            return(identifier);
        }
Esempio n. 4
0
        /// <summary>
        /// Функция для поиска значения ссылки по отношению, например в констукции bittersweet_apple => nrel_price:[5,5];
        /// </summary>
        /// <param name="node">это адрес узла, например,  bittersweet_apple у которого есть ссылка, например [5,5]</param>
        /// <param name="predicate">это отношение, например nrel_price, которое поясняет, что это за ссылка</param>
        /// <returns></returns>
        private double FindValueByPredicate(ScAddress node, ScAddress predicate)
        {
            double value = double.NaN;
            //итерируем конструкцию
            var template           = new ConstructionTemplate(node, ElementType.ConstantCommonArc, ElementType.Link, ElementType.PositiveConstantPermanentAccessArc, predicate);
            var cmdIterateElements = new IterateElementsCommand(template);
            var rspIterateElements = (IterateElementsResponse)client.Send(cmdIterateElements);

            //если число конструкций равно 1, то ищем значение ссылки

            if (rspIterateElements.Constructions.Count() == 1)
            {
                var cmdGetValue = new GetLinkContentCommand(rspIterateElements.Constructions[0][2]);
                var rspGetValue = (GetLinkContentResponse)client.Send(cmdGetValue);
                value = LinkContent.ToDouble(rspGetValue.LinkContent);
            }
            if (predicate.Offset == 2087)
            {
                int i = 0;
                i = 1;
            }
            return(value);
        }
Esempio n. 5
0
        public List<ScAddress> FindApples()
        {
            List<ScAddress> apples = new List<ScAddress>();
            //ищем адресс класса яблоко
            var classAppleAddress = this.FindElementAddress(class_apple);
            //ищем все экземпляры класса яблоко. Вот здесь обычно очень нужно находить подмаски масок элементов и сравнивать их
            var template = new ConstructionTemplate(classAppleAddress, ElementType.PositiveConstantPermanentAccessArc, ElementType.ConstantNode);
            var cmdFindApples = new IterateElementsCommand(template);
            var rspIterateAppels = (IterateElementsResponse)client.Send(cmdFindApples);

            //и при итерации добавляем в коллекцию адреса яблок (у нас в примере один, но суть можно уловить)
            foreach (var construction in rspIterateAppels.Constructions)
            {
                apples.Add(construction[2]);
            }

            return apples;
        }
Esempio n. 6
0
        /// <summary>
        /// Функция для поиска значения ссылки по отношению, например в констукции bittersweet_apple => nrel_price:[5,5];
        /// </summary>
        /// <param name="node">это адрес узла, например,  bittersweet_apple у которого есть ссылка, например [5,5]</param>
        /// <param name="predicate">это отношение, например nrel_price, которое поясняет, что это за ссылка</param>
        /// <returns></returns>
        private double FindValueByPredicate(ScAddress node, ScAddress predicate)
        {
            double value = double.NaN;
            //итерируем конструкцию
            var template = new ConstructionTemplate(node, ElementType.ConstantCommonArc, ElementType.Link, ElementType.PositiveConstantPermanentAccessArc, predicate);
            var cmdIterateElements = new IterateElementsCommand(template);
            var rspIterateElements = (IterateElementsResponse)client.Send(cmdIterateElements);

            //если число конструкций равно 1, то ищем значение ссылки

            if (rspIterateElements.Constructions.Count() == 1)
            {
                var cmdGetValue = new GetLinkContentCommand(rspIterateElements.Constructions[0][2]);
                var rspGetValue = (GetLinkContentResponse)client.Send(cmdGetValue);
                value = LinkContent.ToDouble(rspGetValue.LinkContent);

            }
            if (predicate.Offset == 2087)
            {
                int i = 0;
                i = 1;
            }
            return value;
        }