예제 #1
0
        public static IEnumerable <Triple> GetContextualGraph(this SparqlRemoteEndpoint endpoint, UriNode uriNode, HashSet <UriNode> processed, int rank)
        {
            if (rank == 0)
            {
                return(new List <Triple>());
            }
            rank--;
            var triples      = endpoint.GetTriples(uriNode).ToList();
            var triplesToAdd = new List <Triple>();

            foreach (var triple in triples)
            {
                var subject = triple.Subject.NodeType == NodeType.Uri ? (UriNode)triple.Subject : null;
                if (!processed.Contains(subject))
                {
                    processed.Add(subject);
                    triplesToAdd.AddRange(GetContextualGraph(endpoint, subject, processed, rank));
                }
                var obj = triple.Object.NodeType == NodeType.Uri ? (UriNode)triple.Object : null;
                if (obj != null && !processed.Contains(obj))
                {
                    processed.Add(obj);
                    triplesToAdd.AddRange(GetContextualGraph(endpoint, obj, processed, rank));
                }
            }
            triples.AddRange(triplesToAdd);
            return(triples.Distinct());
        }
예제 #2
0
        public static IEnumerable <Triple> GetContextualGraph(this SparqlRemoteEndpoint endpoint, Uri uri, HashSet <string> processed, int rank)
        {
            if (rank == 0 || processed.Contains(uri.ToString()))
            {
                return(new List <Triple>());
            }
            rank--;
            var triples = endpoint.GetTriples(uri).ToList();

            if (rank > 0)
            {
                var triplesToAdd = new List <Triple>();
                foreach (var triple in triples)
                {
                    var subject = (UriNode)triple.Subject;
                    if (!processed.Contains(subject.Uri.ToString()))
                    {
                        processed.Add(subject.Uri.ToString());
                        triplesToAdd.AddRange(GetContextualGraph(endpoint, subject.Uri, processed, rank));
                    }
                    var obj = triple.Object.NodeType == NodeType.Uri ? (UriNode)triple.Object : null;
                    if (obj != null && !processed.Contains(obj.Uri.ToString()))
                    {
                        processed.Add(obj.Uri.ToString());
                        triplesToAdd.AddRange(GetContextualGraph(endpoint, obj.Uri, processed, rank));
                    }
                }
                triples.AddRange(triplesToAdd);
            }
            // else
            // {
            //     triples.Select(t => processed.Add(t.Subject.ToString())).ToList();
            //     triples.Where(t => t.Object.NodeType == NodeType.Uri).Select(t => processed.Add(t.Object.ToString())).ToList();
            // }
            return(triples);
        }