in packages/graph-explorer/src/connector/sparql/fetchBlankNodeNeighbors/index.ts [98:144]
export default async function fetchBlankNodeNeighbors(
sparqlFetch: SparqlFetch,
req: SPARQLBlankNodeNeighborsRequest
): Promise<SPARQLBlankNodeNeighborsResponse> {
logger.log("[SPARQL Explorer] Fetching blank node one hop neighbors", req);
const neighborsTemplate = blankNodeOneHopNeighborsTemplate(req.subQuery);
const neighbors = await sparqlFetch<
RawBlankNodeNeighborsResponse | ErrorResponse
>(neighborsTemplate);
if (isErrorResponse(neighbors)) {
throw new Error(neighbors.detailedMessage);
}
const filteredNeighbors = neighbors.results.bindings.filter(
result => result.bNode.value === req.resourceURI
);
const vertices = mapOneHop({
results: {
bindings: filteredNeighbors,
},
});
const subjectsURIs = vertices.map(v => v.id);
const edges = await fetchBlankNodeNeighborsPredicates(
sparqlFetch,
req.subQuery,
req.resourceURI,
req.resourceClasses,
subjectsURIs
);
return {
totalCount: vertices.length,
counts: Object.entries(groupBy(vertices, v => v.type)).reduce(
(counts, [group, vs]) => {
counts[group] = vs.length;
return counts;
},
{} as Record<string, number>
),
neighbors: {
vertices,
edges,
},
};
}