/// <summary>
        /// Получение содержимого ссылки по известному адресу.
        /// </summary>
        /// <param name="scAddress">SC-адрес ссылки</param>
        /// <returns>содержимое ссылки</returns>
        public LinkContent GetLinkContent(ScAddress scAddress)
        {
            LinkContent content = LinkContent.Invalid;

            if (knowledgeBase.IsAvaible)
            {
                var command  = new GetLinkContentCommand(scAddress);
                var response = (GetLinkContentResponse)knowledgeBase.ExecuteCommand(command);
                content = new LinkContent(response.LinkContent);
            }
            return(content);
        }
        /// <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);
        }
Exemple #3
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);
        }
Exemple #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;
        }