Beispiel #1
0
        private static List <IReadOnlyRelation> GetAgentRelations(IReadOnlyNode agent, IReadOnlyNode parentAgent)
        {
            if (agent == parentAgent)
            {
                return(new List <IReadOnlyRelation>());
            }

            if (agent.FromIsA().Any(currentNode => currentNode == parentAgent))
            {
                return(new List <IReadOnlyRelation> {
                    agent.FromRelations.Where(x => x.Name == Relations.IsA).First(x => x.To == parentAgent)
                });
            }

            foreach (var node in agent.FromIsA())
            {
                var relations = GetAgentRelations(node, parentAgent);
                if (relations.Count <= 0)
                {
                    continue;
                }
                relations.Add(node.FromRelations.Where(x => x.Name == Relations.IsA).FirstOrDefault(x => x.To == agent));
                return(relations);
            }

            return(new List <IReadOnlyRelation>());
        }
Beispiel #2
0
        private static IReadOnlyNode GetParentAgent(IReadOnlyNode agent)
        {
            if (agent.Name == EmptyOntologyNode.Name)
            {
                return(agent);
            }

            var agents = new Queue <IReadOnlyNode>();

            agents.Enqueue(agent);
            while (agents.Count > 0)
            {
                agent = agents.Dequeue();
                if (agent.ToRelations.Any(x => x.Name == Relations.Agent))
                {
                    return(agent);
                }
                foreach (var node in agent.FromIsA())
                {
                    agents.Enqueue(node);
                }
            }

            throw new ArgumentException();
        }
Beispiel #3
0
        private static List <IReadOnlyRelation> GetRelations(IReadOnlyNode node, IReadOnlyNode nodeToFind, string relation, bool isFrom)
        {
            if (node.From(relation).Any(currentNode => currentNode == nodeToFind))
            {
                return(new List <IReadOnlyRelation> {
                    node.FromRelations.First(x => x.To == nodeToFind)
                });
            }

            foreach (var currentNode in isFrom ? node.FromIsA() : node.ToIsA())
            {
                var relations = GetRelations(currentNode, nodeToFind, relation, isFrom);
                if (relations.Count <= 0)
                {
                    continue;
                }
                var toNode   = node.ToRelations.FirstOrDefault(x => x.From == currentNode);
                var fromNode = node.FromRelations.FirstOrDefault(x => x.To == currentNode);
                relations.Add(isFrom ? fromNode : toNode);
                return(relations);
            }

            return(new List <IReadOnlyRelation>());
        }