From d72b2469a9f6f8b4d30c4ec72a12a10c02e5e90e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20Sch=C3=A4rtl?= <andreas@schaertl.me>
Date: Sun, 27 Sep 2020 10:30:49 +0200
Subject: [PATCH] experimental: add script for generating a simple RDF tree

We use this to test out transitive queries w/ GraphDB.
---
 .../transitive-queries/generate-ttl.py        | 66 +++++++++++++++++++
 1 file changed, 66 insertions(+)
 create mode 100755 experimental/transitive-queries/generate-ttl.py

diff --git a/experimental/transitive-queries/generate-ttl.py b/experimental/transitive-queries/generate-ttl.py
new file mode 100755
index 0000000..8c90791
--- /dev/null
+++ b/experimental/transitive-queries/generate-ttl.py
@@ -0,0 +1,66 @@
+#! /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 ttl_header() -> str:
+    owl_transitive_property = '<http://www.w3.org/2002/07/owl#TransitiveProperty>'
+    rdf_type = '<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>'
+
+    header = ''
+
+    header += PREDICATE + '\n'
+    header += '    ' + rdf_type + '\n'
+    header += '    ' + owl_transitive_property + ' .' + '\n\n'
+
+    return header
+
+
+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])
+
+
+    header = ttl_header()
+    print(header, end='')
+
+    triplets = A.to_rdf()
+    print(triplets.rstrip())
+
+
+if __name__ == '__main__':
+    try:
+        main()
+    except (KeyboardInterrupt, SystemExit, BrokenPipeError):
+        pass
-- 
GitLab