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