/// <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); }
/// <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); }
/// <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; }