Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document HyperGraph Capabilities #328

Open
buddha314 opened this issue Jul 18, 2020 · 7 comments
Open

Document HyperGraph Capabilities #328

buddha314 opened this issue Jul 18, 2020 · 7 comments

Comments

@buddha314
Copy link

I noticed in this issue #245 that GraphEngine is able to support HyperGraph structures. I can't find the documentation on these features. This SO Post shows that people cannot find a good HG engine.

@TaviTruman
Copy link
Contributor

@buddha314 The Graph Engine does not directly support HyperGraphs by default while the default model mode of the GE is "PropertyGrpah"; however, you can model HyperGraph(s) directly using TSL. This is a significant capability as the GE will code generate typed DSL of the model - that means that you don't have to write any logic for accessing the graph. All of the low-level networking is anchored from the TSL generated coded workflow up to HTTP/RCP service endpoint. This one of the big differences between the traditional, conventional, and even contemporary Graph Databases.

As the GE is a general purposed advanced Graph-powered compute engine, you can use TSL to model many types of Graph data models and algorithms. You can start with LIKQ for search and exploration processing, and then you can roll your indexing scheme, semantic reasoning, and typical and or advanced search algorithms. The GE is very extensible as well as you can adorn interfaces for indexing, property-labeling, semantic marking and more; you can even use LIKQ to use rules for Adjancey List processing of Edges and Vertices. There's not a lot of documentation w.r.t advanced Graph implementations but you can model just about any type of Graph. I am working on creating documentation so as to teach and demonstrate how to use TSL to model Graphs and what the implementation of the algorithms looks like.

Quick Example:
The basic idea of the Hypergraph concept is to consider such a generalization of a graph in which any subset of a given set may be an edge rather than two-element subsets.

We can define a HyperGraph like this:

  • Let X = {x1, x2, x3, x4, xn} be a infinite set, and let D = {D1, D2, D3, Dm} be a family of subsets of X

  • The Pair H =(X, D) is called a hypergraph with the vertex set X also denote V(H), and with edge set D also denoted by D(H)

GE TSL HyperGraph Model

What we need:

  • HyperNodes
  • HyperEdges
  • HyperVertices
  • Weights

I'll plug-in the TSL source code here:

@TaviTruman
Copy link
Contributor

@buddha314 I'll get around to posting the code on how to model HyperGraph in TSL later today or tomorrow; I'm currently working a couple of Graph Engine bugs.

@TaviTruman
Copy link
Contributor

@buddha314 Hey Brain - I've been off working to resolve a few critical Graph Engine issues in the Service Fabric area, but I am getting back to this. I'm off the next week but will generate content to demonstrate multiple Graph algorithms and theories when I return in the week of October the 5th.

@buddha314
Copy link
Author

That would be wonderful, thanks!

@TaviTruman
Copy link
Contributor

@buddha314 Hey Brian, I'm just getting back to this area of work, and with CoVID-19 changing so much of my day-to-day, things have slowed down a lot! I've authored a few white papers w.r.t Graph Data Schema modeling with Graph TSL and I'll post them next week,

@TaviTruman
Copy link
Contributor

I got busy with coding for two start-ups; I will get back to doing this.

@TaviTruman
Copy link
Contributor

TaviTruman commented Mar 21, 2023

@buddha314 Hey guys I finally have time to generate this type of content: https://github.com/InKnowWorks/RDF-Graph-and-HyperGraph

[HyperGraph]
cell struct RDFGraph
{
    List<CellId> RDFNodes;
    List<CellId> RDFHyperEdges;
}

[HyperGraph]
cell struct RDFNode
{
    string NodeId;
    List<CellId> OutgoingRDFHyperEdges;
    List<CellId> IncomingRDFHyperEdges;
    List<string> OutgoingPredicates;
    List<string> OutgoingObjects;
    List<string> IncomingPredicates;
    List<string> IncomingSubjects;
}

[HyperGraph]
cell struct RDFHyperEdge
{
    [HyperEdge]
    List<CellId> IncidentRDFNodes;
    string Predicate;
    string Object;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants