Minimal code to parse Veris label and generate triple tags/machine tags.
parent
67a33b67a8
commit
f652db32c8
|
@ -0,0 +1,79 @@
|
|||
import json
|
||||
|
||||
debug = False
|
||||
filename = 'verisc-labels.json'
|
||||
namespace = 'veris'
|
||||
description = 'Vocabulary for Event Recording and Incident Sharing (VERIS)'
|
||||
|
||||
output = {}
|
||||
output['namespace'] = namespace
|
||||
output['description'] = description
|
||||
output['predicates'] = []
|
||||
output['values'] = []
|
||||
|
||||
with open(filename) as fp:
|
||||
t = json.load(fp)
|
||||
|
||||
def lookupPredicate(predicate=False):
|
||||
if not predicate:
|
||||
return False
|
||||
for p in output['predicates']:
|
||||
if p['value'] == predicate:
|
||||
return True
|
||||
|
||||
def lookupValues(predicate=False):
|
||||
if not predicate:
|
||||
return False
|
||||
for p in output['values']:
|
||||
if p['predicate'] == predicate:
|
||||
return True
|
||||
|
||||
def machineTag(namespace=False, predicate=False, value=None, expanded=None):
|
||||
|
||||
if namespace is False or predicate is False:
|
||||
return None
|
||||
if value is None:
|
||||
return ('{0}:{1}'.format(namespace, predicate))
|
||||
else:
|
||||
if not lookupPredicate(predicate=predicate):
|
||||
x = {}
|
||||
x['value'] = predicate
|
||||
output['predicates'].append(x)
|
||||
y = {}
|
||||
y['predicate'] = predicate
|
||||
y['entry'] = []
|
||||
z = {}
|
||||
z['value'] = value
|
||||
z['expanded'] = expanded
|
||||
y['entry'].append(z)
|
||||
output['values'].append(y)
|
||||
return ('{0}:{1}=\"{2}\"'.format(namespace, predicate, value))
|
||||
|
||||
|
||||
prefix = []
|
||||
top = []
|
||||
|
||||
def flatten(root, prefix_keys=True):
|
||||
dicts = [([], root)]
|
||||
ret = {}
|
||||
seen = set()
|
||||
for path, d in dicts:
|
||||
if id(d) in seen:
|
||||
continue
|
||||
seen.add(id(d))
|
||||
for k, v in d.items():
|
||||
new_path = path + [k]
|
||||
prefix = ':'.join(new_path) if prefix_keys else k
|
||||
if hasattr(v, 'items'):
|
||||
dicts.append((new_path, v))
|
||||
else:
|
||||
p = ':'.join(prefix.rsplit(':')[:-1])
|
||||
if debug:
|
||||
print (namespace+":"+p+"="+v)
|
||||
machineTag(namespace=namespace, predicate=p, value=prefix.split(':')[-1], expanded=v)
|
||||
ret[prefix] = v
|
||||
return ret
|
||||
|
||||
flatten ( root = t)
|
||||
|
||||
print (json.dumps(output))
|
Loading…
Reference in New Issue