Publications

Ideograph: Draw to Retrieve Data from Graphs

There are many graph query languages that let us retrieve data from the graph, such as SPARQL, Cypher, and Gremlin. Some of them are declarative languages, and that means we only need to focus on what data we want out of the graph (not how to go get it).

Here is an example of the Cypher language:

MATCH (band:Band)-[:WROTE]->(song:Song {name: 'The Scientist'})
RETURN band.name
// Query the author of 'The Scientist'

The syntax we write has basically the same structure as the subgraph we want. However, it may get complicated when the graph has more loops and branches. Ideograph makes it easier to describe complex graphs by drawing the representation of the subgraph through interactions.

The data source for this tool is undisclosed, but you can watch the video to see how it works.

Ideograph provides a way to map multiple subgraphs at once, which is equivalent to the sizeof function in Cypher. You can find an example at 2:20 of the video. Besides the basic graph structure editing, Ideograph supports the logic compositions (and, or, not) of multiple constraint clauses. All these structures and logical constraints are stored in an AST-like JSON. The backend (Kotlin) receives this JSON and retrieves subgraphs from databases. In our case, the graph data was stored in MongoDB. With the Quine McCluskey algorithm and Kotlin Coroutines, our backend server could solve complex logic with concurrency. You can find more details in my graduate thesis.

Cypher query language →

My graduate thesis about this (Chinese) →