diff --git a/experimental/transitive-queries/generate-ttl.py b/experimental/transitive-queries/generate-ttl.py
new file mode 100755
index 0000000000000000000000000000000000000000..a3b00f636b1ecd0d22018dcbf43bc1c7d548fef2
--- /dev/null
+++ b/experimental/transitive-queries/generate-ttl.py
@@ -0,0 +1,49 @@
+#! /usr/bin/env python3
+
+
+from typing import List
+
+
+NS = 'http://example.org/rdf/'
+PREDICATE = '<http://example.org/rdf/has_edge_to>'
+
+
+class Node:
+    def __init__(self, name: str, children=[]):
+        self.name = name
+        self.children = children
+
+    def to_rdf(self) -> str:
+        rdf = ''
+
+        for child in self.children:
+            rdf += self.rdf_uri() + '\n'
+            rdf += '    ' + PREDICATE + '\n'
+            rdf += '    ' + child.rdf_uri() + ' .' + '\n\n'
+
+            rdf += child.to_rdf()
+
+        return rdf
+
+    def rdf_uri(self) -> str:
+        return '<%s%s>' % (NS, self.name)
+
+
+def main():
+    C = Node('C')
+    D = Node('D')
+    B = Node('B', [C, D])
+    G = Node('G')
+    F = Node('F', [G])
+    E = Node('E', [F])
+    A = Node('A', [B, E])
+
+    rdf = A.to_rdf()
+    print(rdf)
+
+
+if __name__ == '__main__':
+    try:
+        main()
+    except (KeyboardInterrupt, SystemExit, BrokenPipeError):
+        pass