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